cowork-harness 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.claude/skills/cowork-harness/SKILL.md +31 -12
  2. package/.claude/skills/cowork-harness/references/ci-recipe.md +15 -13
  3. package/.claude/skills/cowork-harness/references/critique.md +1 -1
  4. package/.claude/skills/cowork-harness/references/fidelity-and-answers.md +1 -1
  5. package/.claude/skills/cowork-harness/references/scenario-schema.md +14 -12
  6. package/.claude/skills/cowork-harness/references/task-recipes.md +2 -2
  7. package/.claude/skills/cowork-harness/scripts/assertion-keys.json +1 -0
  8. package/.claude/skills/cowork-harness/scripts/scenario.py +8 -1
  9. package/CHANGELOG.md +236 -0
  10. package/DESIGN.md +3 -3
  11. package/README.md +41 -11
  12. package/baselines/desktop-1.37937.1.json +816 -0
  13. package/baselines/prompts/cowork-system-prompt-fingerprints.json +27 -0
  14. package/dist/assert.js +77 -0
  15. package/dist/cli.js +15 -4
  16. package/dist/run/cassette.js +255 -77
  17. package/dist/run/execute.js +59 -0
  18. package/dist/run/trace-view.js +39 -1
  19. package/dist/sync/cowork-sync.js +207 -8
  20. package/dist/types.js +39 -9
  21. package/docs/README.md +3 -0
  22. package/docs/cassette.md +36 -11
  23. package/docs/debugging.md +25 -0
  24. package/docs/fidelity-gaps.md +5 -1
  25. package/docs/maintenance.md +15 -1
  26. package/docs/scenario.md +13 -10
  27. package/examples/replays/README.md +1 -1
  28. package/examples/replays/example-multiselect-gate.cassette.json +41 -46
  29. package/examples/replays/example-pdf-skill.cassette.json +90 -90
  30. package/examples/replays/hostloop-computer-links.cassette.json +62 -68
  31. package/llms.txt +3 -1
  32. package/package.json +1 -1
  33. package/schema/scenario.schema.json +28 -9
package/docs/scenario.md CHANGED
@@ -361,7 +361,9 @@ The predicate is evaluated with the tool's input fields as locals (e.g. `command
361
361
  test the *shape* of behavior and constraint-respect — robust to LLM phrasing drift, and impossible to test
362
362
  without actually running the agent. For **content correctness**, match the assertion to the deliverable:
363
363
  - a skill whose output is **prose** (a markdown report) → `transcript_matches` (a regex, drift-tolerant) or
364
- `transcript_contains` (a literal, for stable markers). Avoid pinning exact long phrases. `transcript_matches`
364
+ `transcript_contains` (a literal, for stable markers). **Both see top-level `assistant_text` only** — text
365
+ the agent emitted inside a tool call (a gate question or option) is invisible to them; assert that with
366
+ `question_context`/`question_asked` instead. Avoid pinning exact long phrases. `transcript_matches`
365
367
  is **case-insensitive**; **single-quote** the regex in YAML (double-quoted YAML eats a backslash, so
366
368
  `"\d"` breaks — use `'\d'` or a block scalar); the transcript is one concatenated string, so use `[\s\S]`,
367
369
  not `.`, to span turns.
@@ -418,10 +420,10 @@ whether it **survives `replay`**. Both are in the key's row below, and the repla
418
420
  | Assertion | Passes when |
419
421
  |---|---|
420
422
  | `result: success \| error` | the run ended with that status |
421
- | `transcript_contains: <str>` | the assistant transcript includes the literal string |
422
- | `transcript_not_contains: <str>` | it does not |
423
- | `transcript_matches: <regex>` | the transcript matches the regex (case-insensitive) — fuzzy content for stochastic prose, e.g. `'SOM:?\s*\$[0-9.]+\s*M'` |
424
- | `transcript_not_matches: <regex>` | it does not match (e.g. no leaked stack trace / `undefined`) |
423
+ | `transcript_contains: <str>` | the assistant transcript includes the literal string. **Sees top-level `assistant_text` only — it excludes every `tool_use`/`tool_result`**, so text the agent emitted only inside a tool call (an `AskUserQuestion` gate question or option, a tool result) can never match at any phrasing; use the gate keys (`question_asked`, `question_context`, `question_options`) or `tool_result_contains` for those. |
424
+ | `transcript_not_contains: <str>` | it does not. **Sees top-level `assistant_text` only — it excludes every `tool_use`/`tool_result`**, so text the agent emitted only inside a tool call (an `AskUserQuestion` gate question or option, a tool result) can never match at any phrasing; use the gate keys (`question_asked`, `question_context`, `question_options`) or `tool_result_contains` for those. |
425
+ | `transcript_matches: <regex>` | the transcript matches the regex (case-insensitive) — fuzzy content for stochastic prose, e.g. `'SOM:?\s*\$[0-9.]+\s*M'`. **Sees top-level `assistant_text` only — it excludes every `tool_use`/`tool_result`**, so text the agent emitted only inside a tool call (an `AskUserQuestion` gate question or option, a tool result) can never match at any phrasing; use the gate keys (`question_asked`, `question_context`, `question_options`) or `tool_result_contains` for those. |
426
+ | `transcript_not_matches: <regex>` | it does not match (e.g. no leaked stack trace / `undefined`). **Sees top-level `assistant_text` only — it excludes every `tool_use`/`tool_result`**, so text the agent emitted only inside a tool call (an `AskUserQuestion` gate question or option, a tool result) can never match at any phrasing; use the gate keys (`question_asked`, `question_context`, `question_options`) or `tool_result_contains` for those. |
425
427
  | `file_exists: <path>` | the path exists under the run's `work/` (e.g. `outputs/x.md`) |
426
428
  | `user_visible_artifact: <path>` | the path exists **and** is under a user-visible root (`outputs/` + each connected folder's mount name) — i.e. the deliverable the user actually sees in Cowork. **Footgun:** if your skill delivers by writing to its working dir (the scratchpad) and calling `present_files` (rather than writing directly under `outputs/`), that promotion is modeled **only on `fidelity: container`**. On `hostloop` there is nothing to promote — the agent's cwd already **is** the outputs dir (`src/run/execute.ts` sets `hostCwd` to `mnt/outputs`), so a file written there is already under a user-visible root and this assertion passes. On `microvm`/`protocol` the file stays in the scratchpad and this assertion false-reds. Prefer writing directly to `outputs/`, or run present_files-delivering skills on `container`. Writing directly to `outputs/` also sidesteps the lane split — the delivery *tool* is named `present_files` on the desktop-local lane and `SendUserFile` on remote Cowork ([fidelity-gaps.md](./fidelity-gaps.md), "File delivery"), so a skill is better off describing the outcome than naming either. |
427
429
  | `no_delete_in_outputs: true` | no delete op (`rm`/`mv`/…) touched `mnt/outputs` (Cowork's outputs mount fails `unlink`/`rmdir` with `EPERM`) — **only `true` is valid**; writing `false` is rejected by the schema. **Omitting the key does NOT allow deletes**: a detected delete still fails the run via the `outputs_delete` verdict signal, which fires precisely *because* the key was not authored — authoring it turns that signal into an explicit assertion. To accept an intended delete, use `allow_outputs_delete: true`. Detects operations that UNLINK a name; emptying a file in place (`truncate`, `>`, `shred` without `-u`) is not a delete and is permitted by Cowork, so it is not flagged |
@@ -485,8 +487,9 @@ whether it **survives `replay`**. Both are in the key's row below, and the repla
485
487
  | `no_path_denied: true` | **`fidelity: hostloop` only** — NO path denial was recorded at all (the channel is already path-scoped, unlike `no_hook_blocked`'s indiscriminate reject); decision-level — needs `controlOut` on replay; any other tier **FAILS** ("cannot verify"); **only `true` is valid** — **Mutually exclusive** with `path_denied` and `vm_path_denied` (same channel, opposite demands — refused by `run`/`skill`/`record`) |
486
488
  | `max_peak_rss_bytes: <N>` | peak sampled RSS of the agent sandbox ≤ N bytes — **live lane only** (container/hostloop/microvm); evidence-unavailable on replay/protocol or when sampling captured no RSS |
487
489
  | `semantic_matches: {rubric, min_pass?, judge_model?, include_subagent_text?}` | a pinned LLM judge grades each fixed `rubric` claim against the run's answer — the agent's final message, the transcript, and any files it authored — so a claim about written-file content grades like one about inlined prose. **What "the transcript" contains, exactly:** top-level `assistant_text` only. It **excludes every `tool_use`/`tool_result`**, and **excludes all sub-agent-originated text** (including fork-scoped `Skill`/`Agent(fork)` dispatches, which the tool-attribution path *does* treat as main-agent flow — the text path does not). ⚠️ **A rubric claim about whether a tool was called is therefore unassertable — that branch can never grade true regardless of behaviour.** Use the structural keys (`tool_called`, `present_files_called`, `subagent_dispatched`, `hook_blocked`) for tool claims. Sub-agent text lives in `RunResult.subagents[].reasoning` and reaches the judge only with `include_subagent_text: true` (opt-in; `kind:"text"` turns only, since sub-agent *thinking* arrives empty+redacted — see [subagents.md](./subagents.md)). Passes iff ≥ `min_pass` claims pass (default: all) — **live lane only** (an LLM judge call); skipped-loud on replay. Authored-file evidence is captured on every live sandbox tier including **microvm** (its session tree is snapshotted from the VM into the run dir) — but can be **incomplete** on any of them (a file dropped at the capture-size cap, or unreadable at read-back), and the incomplete case fails **evidence unavailable** rather than trusting a judge grade against a partial document. `judge_model` pins the grading model (flag/env precedence: per-assertion `judge_model` > `COWORK_HARNESS_JUDGE_MODEL` env > the harness default, `claude-opus-4-8`) — pin it for a reproducible before/after comparison. |
488
- | `question_asked: <regex>` | the agent asked an AskUserQuestion whose **question text** matches (`question`, falling back to `header`). Text only — for the option set a gate offered, use `question_options` below |
489
- | `question_options: {when_question?, equals?, contains?, order?}` | the option SET (and by default the ORDER) a gate offered the user — the founder-facing half `question_asked` cannot reach: an agent that presents the right choices in the wrong order puts a different option in the default slot, and every artifact assertion still passes. `when_question` is a regex over the same label `question_asked` matches; omit it only when the run fired exactly one sub-question (more than one without a selector FAILS as ambiguous, rather than silently taking the first). Set exactly one of `equals` (the complete set) or `contains` (a subset); `order: exact` (the default) compares order too, `order: any` compares membership only. Evidence is captured when the gate is ASKED, so it covers a gate that was shown and then denied, stalled or left unanswered; a lane that cannot read it (a truncated cassette, a verify-run dir with no `events.jsonl`) fails **evidence-unavailable**, never vacuously |
490
+ | `question_asked: <regex>` | the agent asked an AskUserQuestion whose **question text** matches (`question`, falling back to `header`). Text only — for the option set a gate offered, use `question_options` below ⚠️ **This text is model-composed and is reworded run to run** — pin a producer-authored constant, not model prose; if the wording may also move between the question and an option, use `question_context`. |
491
+ | `question_options: {when_question?, equals?, contains?, order?}` | the option SET (and by default the ORDER) a gate offered the user, **by label** — the half `question_asked` cannot reach (option *descriptions* are not compared here; use `question_context` for those): an agent that presents the right choices in the wrong order puts a different option in the default slot, and every artifact assertion still passes. `when_question` is a regex over the same label `question_asked` matches; omit it only when the run fired exactly one sub-question (more than one without a selector FAILS as ambiguous, rather than silently taking the first). Set exactly one of `equals` (the complete set) or `contains` (a subset); `order: exact` (the default) compares order too, `order: any` compares membership only. Evidence is captured when the gate is ASKED, so it covers a gate that was shown and then denied, stalled or left unanswered; a lane that cannot read it (a truncated cassette, a verify-run dir with no `events.jsonl`) fails **evidence-unavailable**, never vacuously ⚠️ **This text is model-composed and is reworded run to run** — pin a producer-authored constant, not model prose; if the wording may also move between the question and an option, use `question_context`. |
492
+ | `question_context: {when_question?, matches}` | a regex matched against **everything a gate put in front of the user**: the question label, every option **label**, and every option **description**. This is the key for "was the founder actually told X at the decision point?" when the skill's wording may land in any of those fields — `question_asked` sees only the question text and `question_options` compares only labels, so a sentence delivered inside an option's `description` is invisible to both. `when_question` narrows to matching sub-questions; **omitting it is not ambiguous here** (unlike `question_options`, which pins which gate offered which set — this key asks only whether the text was shown, so it searches every gate). Evidence is the **ask-time** `AskUserQuestion` payload, never a `tool_result`: a skill's producer script usually writes the same sentence into its own gate-state file, so a `tool_result_matches` on that phrase grades true whether or not the model ever surfaced it. Zero gates recorded **fails**; a lane that cannot read the payload fails **evidence-unavailable**, never vacuously ⚠️ **This text is model-composed and is reworded run to run** — pin a producer-authored constant, not model prose — this key already spans the question text, the option labels and their descriptions, so it is the drift-tolerant choice when the placement itself may move. |
490
493
  | `questions_count_max: <N>` | at most N **sub-questions** asked — a bundled `AskUserQuestion` with K sub-questions counts as K, not 1 (this is a decision-load budget, not a per-tool-call count); `trace --view questions`'s footer total is computed the same way, so it always matches what this key compares against. **`: 0` is the way to declare a gate-clean scenario** — and is then **mutually exclusive** with `gate_answer_count_min: >= 1`, `question_asked` and `gate_answers_delivered: false` (a delivered gate records at least one question, so the pair can never both hold; `run`/`skill`/`record` refuse it before spending, and `lint` reports `assert-contradiction`) |
491
494
  | `gate_answers_delivered: true` | every answered AskUserQuestion gate's answer actually reached the model — requires a positive, observed `tool_result` (an **unobserved** delivery fails too, not only an errored one — no silent false-green); **zero gates fired passes vacuously** (gate firing is model-dependent) — pair with `gate_answer_count_min: >= 1` to also require a gate, or, in a scenario that expects no gates, drop this key and declare `questions_count_max: 0` instead |
492
495
  | `gate_answers_delivered: false` | asserts that at least one answered gate's answer was **confirmed not delivered** (an observed delivery failure); an unobserved/null delivery does **not** satisfy this — useful for negative-path tests of delivery failures. Requires a gate to have fired, so it is **mutually exclusive** with `questions_count_max: 0` (refused by `run`/`skill`/`record`) |
@@ -502,8 +505,8 @@ whether it **survives `replay`**. Both are in the key's row below, and the repla
502
505
  | `egress_denied: <host>` | the host was blocked by the egress proxy |
503
506
  | `egress_allowed: <host>` | the host was allowed through |
504
507
  | `artifact_json: {…}` | assert over a JSON artifact's contents — see below |
505
- | `computer_links_resolve: true` | every `computer://` link in the model-visible transcript resolves to an artifact that exists in the run's collected outputs/mounts (a dangling link fails, naming which target was checked — host path, work tree, or replay manifest); **requires ≥1 link** (zero links fails — use `computer_links_resolve_if_present` for the presence-free variant) — **only `true` is valid**, writing `false` is rejected by the schema |
506
- | `computer_links_resolve_if_present: true` | like `computer_links_resolve` but passes vacuously when the transcript has zero `computer://` links — the presence-free variant; **only `true` is valid** |
508
+ | `computer_links_resolve: true` | every `computer://` link in the model-visible transcript resolves to an artifact that exists in the run's collected outputs/mounts (a dangling link fails, naming which target was checked — host path, work tree, or replay manifest); **requires ≥1 link** (zero links fails — use `computer_links_resolve_if_present` for the presence-free variant) — **only `true` is valid**, writing `false` is rejected by the schema **Sees top-level `assistant_text` only — it excludes every `tool_use`/`tool_result`**, so a `computer://` link that appeared only inside a tool call or its result is invisible to it. |
509
+ | `computer_links_resolve_if_present: true` | like `computer_links_resolve` but passes vacuously when the transcript has zero `computer://` links — the presence-free variant; **only `true` is valid** **Sees top-level `assistant_text` only — it excludes every `tool_use`/`tool_result`**, so a `computer://` link that appeared only inside a tool call or its result is invisible to it. |
507
510
 
508
511
  `expect_denied: [host, …]` is shorthand that adds an `egress_denied` assertion per host.
509
512
 
@@ -701,7 +704,7 @@ alongside the explicit exclusion list `LIVE_ONLY_KEYS`; the table below is deriv
701
704
  `allow_l0_plugin_divergence` / `allow_stall` / `allow_undelivered_deliverables` / `allow_outputs_delete` / `allow_delete_in` (kept on replay as no-op passes). `max_cost_usd`/`max_tokens`
702
705
  assert the *frozen recording's* spend on replay, not fresh spend — see their table entries above.
703
706
 
704
- **`question_asked`, `question_options`, `questions_count_max`, `gate_answers_delivered`, and
707
+ **`question_asked`, `question_options`, `question_context`, `questions_count_max`, `gate_answers_delivered`, and
705
708
  `gate_answer_count_min`** are also content assertions, plus the hook-blocked keys `hook_blocked` and `no_hook_blocked`, and the
706
709
  path-denial keys `vm_path_denied`, `path_denied`, and `no_path_denied` — all of
707
710
  which require the cassette to carry `controlOut` (full-fidelity replay). When
@@ -16,7 +16,7 @@ DOES exercise a real gate exchange, see `example-multiselect-gate.cassette.json`
16
16
 
17
17
  Run it with:
18
18
 
19
- > Assumes the `cowork-harness` CLI is available — from a source checkout run `npm ci && npm run build && npm link` first, or `npm i -g "cowork-harness@^2.2.0"`. (`replay` itself needs nothing else — no token, no Docker.)
19
+ > Assumes the `cowork-harness` CLI is available — from a source checkout run `npm ci && npm run build && npm link` first, or `npm i -g "cowork-harness@^2.3.0"`. (`replay` itself needs nothing else — no token, no Docker.)
20
20
 
21
21
  ```sh
22
22
  cowork-harness replay examples/replays/example-pdf-skill.cassette.json
@@ -35,42 +35,37 @@
35
35
  "requires_capabilities": []
36
36
  },
37
37
  "events": [
38
- "{\"type\":\"control_response\",\"response\":{\"subtype\":\"success\",\"request_id\":\"init-1\",\"response\":{\"commands\":[{\"name\":\"deep-research\",\"description\":\"Deep research harness — fan-out web searches, fetch sources, adversarially verify claims, synthesize a cited report. (dynamic workflow)\",\"argumentHint\":\"\"},{\"name\":\"design-sync\",\"description\":\"Push a React design system to claude.ai/design. This runs a converter that bundles the real component code (from Storybook or a bare package) and uploads it. Use when the user runs /design-sync or says \\\"sync my design system to Claude Design\\\".\",\"argumentHint\":\"[<project hint, e.g. \\\"Acme DS\\\">]\"},{\"name\":\"dataviz\",\"description\":\"Use this skill whenever you are about to create ANY chart, graph, plot, dashboard, or data visualization, in ANY output medium — an HTML or React artifact, inline SVG, plotting code in any library (matplotlib, plotly, d3, Recharts, …), an image/PNG you will render and upload, or a chart shared into Slack. Read it BEFORE writing the first line of chart code, choosing chart colors, building a stat tile / meter / KPI row, or laying out a dashboard. Produces visualizations that read as one system — elegant, accessible, consistent in light and dark — using a brand-neutral placeholder palette you swap for your own. Teaches a design-system-agnostic method: a form heuristic, a color formula with a runnable validator, mark specs, and interaction rules. A validated default palette is documented in `references/palette.md` — swap that file's values for your brand's. Triggers on: \\\"chart\\\", \\\"graph\\\", \\\"plot\\\", \\\"data viz\\\", \\\"visualization\\\", \\\"dashboard\\\", \\\"analytics\\\", \\\"visualize data\\\", \\\"categorical colors\\\", \\\"sequential / diverging palette\\\", \\\"stat tile\\\", \\\"sparkline\\\", \\\"heatmap\\\", \\\"legend\\\", \\\"axis\\\", \\\"tooltip\\\", \\\"chart colors\\\", \\\"color by series\\\".\",\"argumentHint\":\"\"},{\"name\":\"update-config\",\"description\":\"Use this skill to configure the Claude Code harness via settings.json. Automated behaviors (\\\"from now on when X\\\", \\\"each time X\\\", \\\"whenever X\\\", \\\"before/after X\\\") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions (\\\"allow X\\\", \\\"add permission\\\", \\\"move permission to\\\"), env vars (\\\"set X=Y\\\"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: \\\"allow npm commands\\\", \\\"add bq permission to global settings\\\", \\\"move permission to user settings\\\", \\\"set DEBUG=true\\\", \\\"when claude stops show X\\\". For simple settings like theme/model, suggest the /config command.\",\"argumentHint\":\"\"},{\"name\":\"verify\",\"description\":\"Verify that a code change actually does what it's supposed to by exercising it end-to-end and observing behavior — drive the affected flow, not just tests or typecheck. Run before committing nontrivial changes; bootstraps this repo's project verify skill if none exists yet. Don't invoke it on a diff that only touches tests, docs, or other code with no runtime surface to drive (a change to product source always has one) — there's nothing to observe.\",\"argumentHint\":\"\"},{\"name\":\"debug\",\"description\":\"Enable debug logging for this session and help diagnose issues\",\"argumentHint\":\"[issue description]\"},{\"name\":\"code-review\",\"description\":\"Review the current diff, or a PR number/branch/path target, for correctness bugs and reuse/simplification/efficiency cleanups at the given effort level (low/medium: fewer, high-confidence findings; high→max: broader coverage, may include uncertain findings); with no level given, it reuses the level you typed last. Pass --comment to post findings as inline PR comments, or --fix to apply the findings to the working tree after the review.\",\"argumentHint\":\"[low|medium|high|xhigh|max] [--fix] [--comment] [<pr#>|<branch>|<path>]\",\"aliases\":[\"review\"]},{\"name\":\"simplify\",\"description\":\"Review the changed code for reuse, simplification, efficiency, and altitude cleanups, then apply the fixes. Quality only — it does not hunt for bugs; use /code-review for that.\",\"argumentHint\":\"[<target>]\"},{\"name\":\"batch\",\"description\":\"Research and plan a large-scale change, then execute it in parallel across 5–30 isolated worktree agents that each open a PR.\",\"argumentHint\":\"<instruction>\"},{\"name\":\"fewer-permission-prompts\",\"description\":\"Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts.\",\"argumentHint\":\"\"},{\"name\":\"doctor\",\"description\":\"Health-check the user's Claude Code setup and fix issues: diagnose installation health — what the `claude doctor` terminal diagnostics cover — from local data (duplicate or leftover installs, PATH, unparseable settings files, broken or colliding agent definitions, skills whose frontmatter fails to parse); find unused skills, MCP servers, and plugins versus their context cost and disable dead weight; deduplicate local CLAUDE.md files against checked-in ones; trim checked-in CLAUDE.md files by cutting content a session could derive from the codebase (directory layouts, tech-stack lists, architecture overviews) while keeping gotchas, rationale, and non-standard conventions; migrate always-loaded CLAUDE.md guidance into lazy skills and nested CLAUDE.md files; flag slow hooks and context-heavy extensions; check the installed version is current; make auto mode the default permission mode; and pre-approve frequently denied read-only commands. Use when the user asks for a doctor run, checkup, audit, tune-up, or cleanup of their Claude Code setup or configuration.\",\"argumentHint\":\"\",\"aliases\":[\"checkup\"]},{\"name\":\"loop\",\"description\":\"Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo, defaults to 10m)\",\"argumentHint\":\"[interval] <prompt>\",\"aliases\":[\"proactive\"]},{\"name\":\"claude-api\",\"description\":\"Reference for the Claude API / Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\\nTRIGGER — read BEFORE opening the target file; don't skip because it \\\"looks like a one-liner\\\" — whenever: the prompt names Claude/Anthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing/model choice/limits/caching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent/MCP/tool-definition/multi-agent/RAG/LLM-judge/computer-use; generate/summarize/extract/classify/rewrite/converse over NL; debugging refusals/cutoffs/streaming/tool-calls/tokens).\\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI/GPT/Gemini/Llama/Mistral/Cohere/Ollama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).\",\"argumentHint\":\"\"},{\"name\":\"run\",\"description\":\"Launch and drive this project's app to see a change working. Use when asked to run, start, or screenshot the app, or to confirm a change works in the real app (not just tests). First looks for a project skill that already covers launching the app; otherwise falls back to built-in patterns per project type (CLI, server, TUI, Electron, browser-driven, library).\",\"argumentHint\":\"\"},{\"name\":\"run-skill-generator\",\"description\":\"Author or improve the run-<unit> skill — a per-project skill that tells agents how to build, launch, and drive this project's app. Use when the user asks to set up the project, get it running, write run instructions, or verify build/run steps work from a clean environment.\",\"argumentHint\":\"\"},{\"name\":\"agents\",\"description\":\"(removed) Ask Claude to create/manage subagents, or edit .claude/agents/\",\"argumentHint\":\"\"},{\"name\":\"auto-mode-setup\",\"description\":\"Teach auto mode about your environment, plus optional rule tweaks\",\"argumentHint\":\"[--request-id <uuid>] (--wizard posture=… scope=… depth=… --propose | --expect-sha256 <64-hex> --apply-file <path>)\"},{\"name\":\"autocompact\",\"description\":\"Configure the auto-compact window size\",\"argumentHint\":\"[auto|<tokens>]\"},{\"name\":\"clear\",\"description\":\"Start a new session with empty context; previous session stays on disk (resumable with /resume)\",\"argumentHint\":\"[name]\",\"aliases\":[\"reset\",\"new\"]},{\"name\":\"color\",\"description\":\"Set the prompt bar color for this session\",\"argumentHint\":\"[red|blue|green|yellow|purple|orange|pink|cyan|default]\"},{\"name\":\"compact\",\"description\":\"Free up context by summarizing the conversation so far\",\"argumentHint\":\"<optional custom summarization instructions>\"},{\"name\":\"config\",\"description\":\"Set a setting by key\",\"argumentHint\":\"key=value\",\"aliases\":[\"settings\"]},{\"name\":\"context\",\"description\":\"Show current context usage\",\"argumentHint\":\"\"},{\"name\":\"effort\",\"description\":\"Set effort level for model usage\",\"argumentHint\":\"<low|medium|high|xhigh|max|ultracode|auto>\"},{\"name\":\"fast\",\"description\":\"Toggle fast mode (Opus 5)\",\"argumentHint\":\"[on|off]\"},{\"name\":\"heapdump\",\"description\":\"Dump the JS heap to ~/Desktop\",\"argumentHint\":\"\"},{\"name\":\"init\",\"description\":\"Initialize a new CLAUDE.md file with codebase documentation\",\"argumentHint\":\"\"},{\"name\":\"mcp\",\"description\":\"Manage MCP servers\",\"argumentHint\":\"[reconnect|enable|disable [<server>|all]]\"},{\"name\":\"import\",\"description\":\"Import config from another AI coding agent\",\"argumentHint\":\"\"},{\"name\":\"model\",\"description\":\"Set the AI model for Claude Code\",\"argumentHint\":\"<model>\"},{\"name\":\"__remote-workflow\",\"description\":\"Run the workflow script delivered in this session environment (server-launched sessions only)\",\"argumentHint\":\"\"},{\"name\":\"workflow-launch-exec\",\"description\":\"Execute a server-launched workflow handoff (workflow_launch event sessions only)\",\"argumentHint\":\"\"},{\"name\":\"reload-skills\",\"description\":\"Pick up skills added or changed on disk during this session\",\"argumentHint\":\"\"},{\"name\":\"rename\",\"description\":\"Rename the current conversation\",\"argumentHint\":\"[name]\",\"aliases\":[\"name\"]},{\"name\":\"security-review\",\"description\":\"Complete a security review of the pending changes on the current branch\",\"argumentHint\":\"\"},{\"name\":\"usage\",\"description\":\"Show session cost, plan usage, and what's contributing to your limits\",\"argumentHint\":\"\",\"aliases\":[\"cost\",\"stats\"]},{\"name\":\"insights\",\"description\":\"Generate a report analyzing your Claude Code sessions\",\"argumentHint\":\"\"},{\"name\":\"recap\",\"description\":\"Generate a one-line session recap now\",\"argumentHint\":\"\"},{\"name\":\"goal\",\"description\":\"Set a goal — keep working until the condition is met\",\"argumentHint\":\"\"},{\"name\":\"design\",\"description\":\"Grant or revoke Claude agent access to your Design projects\",\"argumentHint\":\"consent | revoke\"},{\"name\":\"design-consent\",\"description\":\"Grant Claude agent access to your Design projects\",\"argumentHint\":\"\"},{\"name\":\"design-revoke\",\"description\":\"Revoke Claude agent access to your Design projects\",\"argumentHint\":\"\"},{\"name\":\"list-agents\",\"description\":\"List subagents and other Claude sessions you can message\",\"argumentHint\":\"\",\"aliases\":[\"peers\"]},{\"name\":\"team-onboarding\",\"description\":\"Help teammates ramp on Claude Code with a guide from your usage\",\"argumentHint\":\"\"}],\"agents\":[{\"name\":\"claude\",\"description\":\"Catch-all for any task that doesn't fit a more specific agent. FleetView's default when no agent name is typed.\"},{\"name\":\"Explore\",\"description\":\"Fast read-only search agent for locating code. Use it to find files by pattern (eg. \\\"src/components/**/*.tsx\\\"), grep for symbols or keywords (eg. \\\"API endpoints\\\"), or answer \\\"where is X defined / which files reference Y.\\\" Do NOT use it for code review, design-doc auditing, cross-file consistency checks, or open-ended analysis — it reads excerpts rather than whole files and will miss content past its read window. When calling, specify search breadth: \\\"quick\\\" for a single targeted lookup, \\\"medium\\\" for moderate exploration, or \\\"very thorough\\\" to search across multiple locations and naming conventions.\"},{\"name\":\"general-purpose\",\"description\":\"General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks. When you are searching for a keyword or file and are not confident that you will find the right match in the first few tries use this agent to perform the search for you.\"},{\"name\":\"Plan\",\"description\":\"Software architect agent for designing implementation plans. Use this when you need to plan the implementation strategy for a task. Returns step-by-step plans, identifies critical files, and considers architectural trade-offs.\"},{\"name\":\"statusline-setup\",\"description\":\"Use this agent to configure the user's Claude Code status line setting.\",\"model\":\"sonnet\"}],\"output_style\":\"default\",\"available_output_styles\":[\"default\",\"Proactive\",\"Concise\",\"Explanatory\",\"Learning\"],\"models\":[{\"value\":\"default\",\"resolvedModel\":\"claude-opus-5[1m]\",\"displayName\":\"Default (recommended)\",\"description\":\"Use the default model (currently Opus 5 (1M context)) · $5/$25 per Mtok\",\"supportsEffort\":true,\"supportedEffortLevels\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"],\"supportsAdaptiveThinking\":true,\"supportsFastMode\":true,\"supportsAutoMode\":true},{\"value\":\"opus[1m]\",\"resolvedModel\":\"claude-opus-5[1m]\",\"displayName\":\"Opus (1M context)\",\"description\":\"Opus 5 with 1M context · Best for everyday, complex tasks · $5/$25 per Mtok\",\"supportsEffort\":true,\"supportedEffortLevels\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"],\"supportsAdaptiveThinking\":true,\"supportsFastMode\":true,\"supportsAutoMode\":true},{\"value\":\"sonnet\",\"resolvedModel\":\"claude-sonnet-5\",\"displayName\":\"Sonnet\",\"description\":\"Sonnet 5 · Efficient for routine tasks · $3/$15 per Mtok\",\"supportsEffort\":true,\"supportedEffortLevels\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"],\"supportsAdaptiveThinking\":true,\"supportsAutoMode\":true},{\"value\":\"haiku\",\"resolvedModel\":\"claude-haiku-4-5-20251001\",\"displayName\":\"Haiku\",\"description\":\"Haiku 4.5 · Fastest for quick answers · $1/$5 per Mtok\"}],\"account\":{\"tokenSource\":\"none\",\"apiKeySource\":\"ANTHROPIC_API_KEY\",\"apiProvider\":\"firstParty\"},\"pid\":1165,\"current_permission_mode\":\"default\",\"hooks_applied\":true,\"remote_control_auto_enable\":false,\"remote_control_auto_on_by_default\":false,\"ide_rc_auto_enable_gate\":true,\"fast_mode_state\":\"off\",\"fast_mode_disabled_reason\":\"sdk_opt_in_required\",\"session_state\":\"idle\"}}}",
39
- "{\"type\":\"system\",\"subtype\":\"init\",\"cwd\":\"[REDACTED:local-path:1387fe4179e9]\",\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"tools\":[\"Task\",\"AskUserQuestion\",\"Bash\",\"CronCreate\",\"CronDelete\",\"CronList\",\"DesignSync\",\"Edit\",\"EnterPlanMode\",\"EnterWorktree\",\"ExitPlanMode\",\"ExitWorktree\",\"ListAgents\",\"Monitor\",\"NotebookEdit\",\"PushNotification\",\"Read\",\"ReportFindings\",\"ScheduleWakeup\",\"SendMessage\",\"Skill\",\"TaskOutput\",\"TaskStop\",\"ToolSearch\",\"WebFetch\",\"WebSearch\",\"Workflow\",\"Write\"],\"mcp_servers\":[],\"model\":\"claude-opus-5[1m]\",\"permissionMode\":\"default\",\"slash_commands\":[\"deep-research\",\"design-sync\",\"dataviz\",\"update-config\",\"verify\",\"debug\",\"code-review\",\"simplify\",\"batch\",\"fewer-permission-prompts\",\"doctor\",\"loop\",\"claude-api\",\"run\",\"run-skill-generator\",\"agents\",\"auto-mode-setup\",\"autocompact\",\"clear\",\"color\",\"compact\",\"config\",\"context\",\"effort\",\"fast\",\"heapdump\",\"init\",\"mcp\",\"import\",\"model\",\"__remote-workflow\",\"workflow-launch-exec\",\"reload-skills\",\"rename\",\"security-review\",\"usage\",\"insights\",\"recap\",\"goal\",\"design\",\"design-consent\",\"design-revoke\",\"list-agents\",\"team-onboarding\"],\"terminal_slash_commands\":[\"doctor\",\"color\"],\"apiKeySource\":\"ANTHROPIC_API_KEY\",\"claude_code_version\":\"2.1.238\",\"output_style\":\"default\",\"agents\":[\"claude\",\"Explore\",\"general-purpose\",\"Plan\",\"statusline-setup\"],\"skills\":[\"deep-research\",\"design-sync\",\"dataviz\",\"update-config\",\"verify\",\"debug\",\"code-review\",\"simplify\",\"batch\",\"fewer-permission-prompts\",\"doctor\",\"loop\",\"claude-api\",\"run\",\"run-skill-generator\"],\"plugins\":[],\"capabilities\":[\"interrupt_receipt_v1\",\"interrupt_cancel_queued_v1\",\"msg_lifecycle_v1\"],\"analytics_disabled\":false,\"product_feedback_disabled\":false,\"uuid\":\"450fe0f4-707a-476f-b62c-0c756619b2eb\",\"memory_paths\":{\"auto\":\"[REDACTED:local-path:0688e87c086e]\"},\"messaging_socket_path\":\"/tmp/cc-socks/1165.sock\",\"fast_mode_state\":\"off\",\"fast_mode_disabled_reason\":\"sdk_opt_in_required\"}",
40
- "{\"type\":\"system\",\"subtype\":\"status\",\"status\":\"requesting\",\"uuid\":\"6cbe72a5-d541-4196-91d2-7fa2d4443e12\",\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\"}",
41
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeFp28My7wBKdGUp8EAg4\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":30837,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":30837,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":24,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"f6f7fae3-b702-447e-9666-e331962baf0a\",\"ttft_ms\":2316}",
42
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_018GMNbxKjLZnUfuZdL3s4Q6\",\"name\":\"AskUserQuestion\",\"input\":{},\"caller\":{\"type\":\"direct\"}}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"7dcca2a7-a25b-47f5-895b-5af522b9cb1b\"}",
43
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"ce4f4a75-65ef-46ae-9649-ac7ecb2205ae\"}",
44
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"questions\\\": [{\\\"question\\\": \\\"\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"cf8a2d64-66a3-4020-b443-15efea6e541d\"}",
45
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"Which features should\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"e4150372-4146-4ba4-b848-c45903092f3e\"}",
46
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" be\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"f2095f71-3cce-47dc-9518-a4412fa47be2\"}",
47
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" enabled?\\\", \\\"header\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"c9e5eda0-dec5-40f7-9bf5-0c9dad59d06a\"}",
48
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\": \\\"Features\\\", \\\"multi\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"bf23b8eb-1db0-4c91-ac92-c4f52ca5c9bb\"}",
49
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"Select\\\": true, \\\"options\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"a2684c6b-6901-48b4-92fd-9a1800ac7c15\"}",
50
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\": [{\\\"label\\\": \\\"Auth\\\", \\\"description\\\": \\\"User authentication and session management.\\\"}, {\\\"label\\\": \\\"Billing\\\", \\\"description\\\": \\\"Payments, subscriptions, and invoicing.\\\"}, {\\\"label\\\": \\\"Audit\\\", \\\"description\\\": \\\"Audit logging of user and\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"2c65fec1-38bb-40b3-b521-893bd26b7e3b\"}",
51
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" system actions.\\\"}]}]\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"c8843f3c-80c3-40dc-9320-b3fe22eb292a\"}",
52
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"9832bdde-5bed-4419-909c-924d86f7a496\"}",
53
- "{\"type\":\"assistant\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeFp28My7wBKdGUp8EAg4\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[{\"type\":\"tool_use\",\"id\":\"toolu_018GMNbxKjLZnUfuZdL3s4Q6\",\"name\":\"AskUserQuestion\",\"input\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"multiSelect\":true,\"options\":[{\"label\":\"Auth\",\"description\":\"User authentication and session management.\"},{\"label\":\"Billing\",\"description\":\"Payments, subscriptions, and invoicing.\"},{\"label\":\"Audit\",\"description\":\"Audit logging of user and system actions.\"}]}]},\"caller\":{\"type\":\"direct\"}}],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":30837,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":30837,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":24,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null,\"context_management\":null},\"parent_tool_use_id\":null,\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"uuid\":\"dbcffebf-7b17-415f-8542-e097a56984bf\",\"timestamp\":\"2026-08-21T11:25:55.970Z\",\"request_id\":\"req_011CeFp27fJVeaTVtmFqtY7Y\"}",
54
- "{\"type\":\"control_request\",\"request_id\":\"1d40b7fc-f178-464d-b799-9a6b5312fa28\",\"request\":{\"subtype\":\"can_use_tool\",\"tool_name\":\"AskUserQuestion\",\"display_name\":\"AskUserQuestion\",\"input\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"options\":[{\"label\":\"Auth\",\"description\":\"User authentication and session management.\"},{\"label\":\"Billing\",\"description\":\"Payments, subscriptions, and invoicing.\"},{\"label\":\"Audit\",\"description\":\"Audit logging of user and system actions.\"}],\"multiSelect\":true}]},\"tool_use_id\":\"toolu_018GMNbxKjLZnUfuZdL3s4Q6\",\"requires_user_interaction\":true}}",
55
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_stop\",\"index\":0},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"b1abeccb-ec08-406b-81ed-f19f1224de53\"}",
56
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":30837,\"cache_read_input_tokens\":0,\"output_tokens\":171,\"output_tokens_details\":{\"thinking_tokens\":0},\"iterations\":[{\"input_tokens\":2,\"output_tokens\":171,\"cache_read_input_tokens\":0,\"cache_creation_input_tokens\":30837,\"cache_creation\":{\"ephemeral_5m_input_tokens\":30837,\"ephemeral_1h_input_tokens\":0},\"type\":\"message\"}]},\"context_management\":{\"applied_edits\":[]}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"d74f51e8-5d48-4729-ab57-304613ab1443\"}",
57
- "{\"type\":\"user\",\"message\":{\"role\":\"user\",\"content\":[{\"type\":\"tool_result\",\"content\":\"Your questions have been answered: \\\"Which features should be enabled?\\\"=\\\"Auth, Audit\\\". You can now continue with these answers in mind.\",\"tool_use_id\":\"toolu_018GMNbxKjLZnUfuZdL3s4Q6\"}]},\"parent_tool_use_id\":null,\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"uuid\":\"65c62b69-faa7-4d0d-9f36-2a4f77a86112\",\"timestamp\":\"2026-08-21T11:25:55.978Z\",\"tool_use_result\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"options\":[{\"label\":\"Auth\",\"description\":\"User authentication and session management.\"},{\"label\":\"Billing\",\"description\":\"Payments, subscriptions, and invoicing.\"},{\"label\":\"Audit\",\"description\":\"Audit logging of user and system actions.\"}],\"multiSelect\":true}],\"answers\":{\"Which features should be enabled?\":\"Auth, Audit\"}}}",
58
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_stop\"},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"9985e5e4-0987-4d4b-8cc1-1b8d57522c0d\"}",
59
- "{\"type\":\"system\",\"subtype\":\"status\",\"status\":\"requesting\",\"uuid\":\"1ad5e862-ee1d-4a9f-a1f7-1d9638098f7d\",\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\"}",
60
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeFp2PkvrDZvGYsvzfjsA\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":242,\"cache_read_input_tokens\":30837,\"cache_creation\":{\"ephemeral_5m_input_tokens\":242,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":2,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"2d50dcca-b5e4-49b7-a6ca-a071da30709c\",\"ttft_ms\":2295}",
61
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"f3906e74-00cd-4fd4-871e-2818379c6779\"}",
62
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"En\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"78050fb5-4948-4656-a583-7490e1956d68\"}",
63
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"abled: Auth, Audit.\"}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"e542c8c8-bced-402a-a8d8-249c9be7c002\"}",
64
- "{\"type\":\"assistant\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeFp2PkvrDZvGYsvzfjsA\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[{\"type\":\"text\",\"text\":\"Enabled: Auth, Audit.\"}],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":242,\"cache_read_input_tokens\":30837,\"cache_creation\":{\"ephemeral_5m_input_tokens\":242,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":2,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null,\"context_management\":null},\"parent_tool_use_id\":null,\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"uuid\":\"16400997-bdc0-4210-a1c3-355b40daf621\",\"timestamp\":\"2026-08-21T11:25:58.448Z\",\"request_id\":\"req_011CeFp2PCCBdHQNpHPu7hsS\"}",
65
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_stop\",\"index\":0},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"d9d4acbd-1632-41fc-9856-a9641bd7d0b3\"}",
66
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":242,\"cache_read_input_tokens\":30837,\"output_tokens\":15,\"output_tokens_details\":{\"thinking_tokens\":0},\"iterations\":[{\"input_tokens\":2,\"output_tokens\":15,\"cache_read_input_tokens\":30837,\"cache_creation_input_tokens\":242,\"cache_creation\":{\"ephemeral_5m_input_tokens\":242,\"ephemeral_1h_input_tokens\":0},\"type\":\"message\"}]},\"context_management\":{\"applied_edits\":[]}},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"3a97192d-184f-46e9-8b37-2470d6eff218\"}",
67
- "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_stop\"},\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"parent_tool_use_id\":null,\"uuid\":\"ed8eab7c-2e3d-41b9-8f9c-840c09afb146\"}",
68
- "{\"is_error\":false,\"duration_api_ms\":8214,\"num_turns\":2,\"stop_reason\":\"end_turn\",\"session_id\":\"4fedab03-07df-4a7e-96f4-c9bfb570f665\",\"total_cost_usd\":0.21535425,\"usage\":{\"input_tokens\":4,\"cache_creation_input_tokens\":31079,\"cache_read_input_tokens\":30837,\"output_tokens\":186,\"output_tokens_details\":{\"thinking_tokens\":0},\"server_tool_use\":{\"web_search_requests\":0,\"web_fetch_requests\":0},\"service_tier\":\"standard\",\"cache_creation\":{\"ephemeral_1h_input_tokens\":0,\"ephemeral_5m_input_tokens\":31079},\"inference_geo\":\"global\",\"iterations\":[{\"input_tokens\":2,\"output_tokens\":15,\"cache_read_input_tokens\":30837,\"cache_creation_input_tokens\":242,\"cache_creation\":{\"ephemeral_5m_input_tokens\":242,\"ephemeral_1h_input_tokens\":0},\"type\":\"message\"}],\"speed\":\"standard\"},\"modelUsage\":{\"claude-haiku-4-5-20251001\":{\"inputTokens\":967,\"outputTokens\":11,\"cacheReadInputTokens\":0,\"cacheCreationInputTokens\":0,\"webSearchRequests\":0,\"costUSD\":0.001022,\"contextWindow\":200000,\"maxOutputTokens\":32000,\"canonicalModel\":\"claude-haiku-4-5\",\"provider\":\"firstParty\"},\"claude-opus-5[1m]\":{\"inputTokens\":4,\"outputTokens\":186,\"cacheReadInputTokens\":30837,\"cacheCreationInputTokens\":31079,\"webSearchRequests\":0,\"costUSD\":0.21433225,\"contextWindow\":1000000,\"maxOutputTokens\":64000,\"canonicalModel\":\"claude-opus-5\",\"provider\":\"firstParty\"}},\"permission_denials\":[],\"terminal_reason\":\"completed\",\"fast_mode_state\":\"off\",\"fast_mode_disabled_reason\":\"sdk_opt_in_required\",\"subagent_stats\":{\"spawned\":0,\"requested\":{\"background\":0,\"foreground\":0,\"unset\":0},\"started_in_background\":0,\"max_depth\":0,\"spawned_by_subagents\":0,\"completed\":0,\"failed\":0,\"killed\":{\"parent\":0,\"user\":0,\"system\":0},\"refused\":{\"depth_limit\":0,\"concurrency_limit\":0,\"budget\":0},\"by_type\":{}},\"subtype\":\"success\",\"api_error_status\":null,\"result\":\"Enabled: Auth, Audit.\",\"ttft_ms\":3654,\"ttft_stream_ms\":2333,\"time_to_request_ms\":17,\"type\":\"result\",\"duration_ms\":6140,\"uuid\":\"63f942d9-69c8-4e33-9f59-56a17701c539\"}"
38
+ "{\"type\":\"control_response\",\"response\":{\"subtype\":\"success\",\"request_id\":\"init-1\",\"response\":{\"commands\":[{\"name\":\"deep-research\",\"description\":\"Deep research harness — fan-out web searches, fetch sources, adversarially verify claims, synthesize a cited report. (dynamic workflow)\",\"argumentHint\":\"\"},{\"name\":\"design-sync\",\"description\":\"Push a React design system to claude.ai/design. This runs a converter that bundles the real component code (from Storybook or a bare package) and uploads it. Use when the user runs /design-sync or says \\\"sync my design system to Claude Design\\\".\",\"argumentHint\":\"[<project hint, e.g. \\\"Acme DS\\\">]\"},{\"name\":\"dataviz\",\"description\":\"Use this skill whenever you are about to create ANY chart, graph, plot, dashboard, or data visualization, in ANY output medium — an HTML or React artifact, inline SVG, plotting code in any library (matplotlib, plotly, d3, Recharts, …), an image/PNG you will render and upload, or a chart shared into Slack. Read it BEFORE writing the first line of chart code, choosing chart colors, building a stat tile / meter / KPI row, or laying out a dashboard. Produces visualizations that read as one system — elegant, accessible, consistent in light and dark — using a brand-neutral placeholder palette you swap for your own. Teaches a design-system-agnostic method: a form heuristic, a color formula with a runnable validator, mark specs, and interaction rules. A validated default palette is documented in `references/palette.md` — swap that file's values for your brand's. Triggers on: \\\"chart\\\", \\\"graph\\\", \\\"plot\\\", \\\"data viz\\\", \\\"visualization\\\", \\\"dashboard\\\", \\\"analytics\\\", \\\"visualize data\\\", \\\"categorical colors\\\", \\\"sequential / diverging palette\\\", \\\"stat tile\\\", \\\"sparkline\\\", \\\"heatmap\\\", \\\"legend\\\", \\\"axis\\\", \\\"tooltip\\\", \\\"chart colors\\\", \\\"color by series\\\".\",\"argumentHint\":\"\"},{\"name\":\"update-config\",\"description\":\"Use this skill to configure the Claude Code harness via settings.json. Automated behaviors (\\\"from now on when X\\\", \\\"each time X\\\", \\\"whenever X\\\", \\\"before/after X\\\") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions (\\\"allow X\\\", \\\"add permission\\\", \\\"move permission to\\\"), env vars (\\\"set X=Y\\\"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: \\\"allow npm commands\\\", \\\"add bq permission to global settings\\\", \\\"move permission to user settings\\\", \\\"set DEBUG=true\\\", \\\"when claude stops show X\\\". For simple settings like theme/model, suggest the /config command.\",\"argumentHint\":\"\"},{\"name\":\"verify\",\"description\":\"Verify that a code change actually does what it's supposed to by exercising it end-to-end and observing behavior — drive the affected flow, not just tests or typecheck. Run before committing nontrivial changes; bootstraps this repo's project verify skill if none exists yet. Don't invoke it on a diff that only touches tests, docs, or other code with no runtime surface to drive (a change to product source always has one) — there's nothing to observe.\",\"argumentHint\":\"\"},{\"name\":\"debug\",\"description\":\"Enable debug logging for this session and help diagnose issues\",\"argumentHint\":\"[issue description]\"},{\"name\":\"code-review\",\"description\":\"Review the current diff, or a PR number/branch/path target, for correctness bugs and reuse/simplification/efficiency cleanups at the given effort level (low/medium: fewer, high-confidence findings; high→max: broader coverage, may include uncertain findings); with no level given, it reuses the level you typed last. Pass --comment to post findings as inline PR comments, or --fix to apply the findings to the working tree after the review.\",\"argumentHint\":\"[low|medium|high|xhigh|max] [--fix] [--comment] [<pr#>|<branch>|<path>]\",\"aliases\":[\"review\"]},{\"name\":\"simplify\",\"description\":\"Review the changed code for reuse, simplification, efficiency, and altitude cleanups, then apply the fixes. Quality only — it does not hunt for bugs; use /code-review for that.\",\"argumentHint\":\"[<target>]\"},{\"name\":\"batch\",\"description\":\"Research and plan a large-scale change, then execute it in parallel across 5–30 isolated worktree agents that each open a PR.\",\"argumentHint\":\"<instruction>\"},{\"name\":\"fewer-permission-prompts\",\"description\":\"Scan your transcripts for common read-only Bash and MCP tool calls, then add a prioritized allowlist to project .claude/settings.json to reduce permission prompts.\",\"argumentHint\":\"\"},{\"name\":\"doctor\",\"description\":\"Health-check the user's Claude Code setup and fix issues: diagnose installation health — what the `claude doctor` terminal diagnostics cover — from local data (duplicate or leftover installs, PATH, unparseable settings files, broken or colliding agent definitions, skills whose frontmatter fails to parse); find unused skills, MCP servers, and plugins versus their context cost and disable dead weight; deduplicate local CLAUDE.md files against checked-in ones; trim checked-in CLAUDE.md files by cutting content a session could derive from the codebase (directory layouts, tech-stack lists, architecture overviews) while keeping gotchas, rationale, and non-standard conventions; migrate always-loaded CLAUDE.md guidance into lazy skills and nested CLAUDE.md files; flag slow hooks and context-heavy extensions; check the installed version is current; make auto mode the default permission mode; and pre-approve frequently denied read-only commands. Use when the user asks for a doctor run, checkup, audit, tune-up, or cleanup of their Claude Code setup or configuration.\",\"argumentHint\":\"\",\"aliases\":[\"checkup\"]},{\"name\":\"loop\",\"description\":\"Run a prompt or slash command on a recurring interval (e.g. /loop 5m /foo, defaults to 10m)\",\"argumentHint\":\"[interval] <prompt>\",\"aliases\":[\"proactive\"]},{\"name\":\"claude-api\",\"description\":\"Reference for the Claude API / Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\\nTRIGGER — read BEFORE opening the target file; don't skip because it \\\"looks like a one-liner\\\" — whenever: the prompt names Claude/Anthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing/model choice/limits/caching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent/MCP/tool-definition/multi-agent/RAG/LLM-judge/computer-use; generate/summarize/extract/classify/rewrite/converse over NL; debugging refusals/cutoffs/streaming/tool-calls/tokens).\\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI/GPT/Gemini/Llama/Mistral/Cohere/Ollama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).\",\"argumentHint\":\"\"},{\"name\":\"run\",\"description\":\"Launch and drive this project's app to see a change working. Use when asked to run, start, or screenshot the app, or to confirm a change works in the real app (not just tests). First looks for a project skill that already covers launching the app; otherwise falls back to built-in patterns per project type (CLI, server, TUI, Electron, browser-driven, library).\",\"argumentHint\":\"\"},{\"name\":\"run-skill-generator\",\"description\":\"Author or improve the run-<unit> skill - a per-project skill that tells agents how to build, launch, and drive this project's app. Use when the user asks to set up the project, get it running, write run instructions, or verify build/run steps work from a clean environment.\",\"argumentHint\":\"\"},{\"name\":\"agents\",\"description\":\"(removed) Ask Claude to create/manage subagents, or edit .claude/agents/\",\"argumentHint\":\"\"},{\"name\":\"auto-mode-setup\",\"description\":\"Teach auto mode about your environment, plus optional rule tweaks\",\"argumentHint\":\"[--request-id <uuid>] (--wizard posture=… scope=… depth=… --propose | --expect-sha256 <64-hex> --apply-file <path>)\"},{\"name\":\"autocompact\",\"description\":\"Configure the auto-compact window size\",\"argumentHint\":\"[auto|<tokens>]\"},{\"name\":\"clear\",\"description\":\"Start a new session with empty context; previous session stays on disk (resumable with /resume)\",\"argumentHint\":\"[name]\",\"aliases\":[\"reset\",\"new\"]},{\"name\":\"color\",\"description\":\"Set the prompt bar color for this session\",\"argumentHint\":\"[red|blue|green|yellow|purple|orange|pink|cyan|default]\"},{\"name\":\"compact\",\"description\":\"Free up context by summarizing the conversation so far\",\"argumentHint\":\"<optional custom summarization instructions>\"},{\"name\":\"config\",\"description\":\"Set a setting by key\",\"argumentHint\":\"key=value\",\"aliases\":[\"settings\"]},{\"name\":\"context\",\"description\":\"Show current context usage\",\"argumentHint\":\"\"},{\"name\":\"effort\",\"description\":\"Set effort level for model usage\",\"argumentHint\":\"<low|medium|high|xhigh|max|ultracode|auto>\"},{\"name\":\"fast\",\"description\":\"Toggle fast mode (Opus 5)\",\"argumentHint\":\"[on|off]\"},{\"name\":\"heapdump\",\"description\":\"Dump the JS heap to ~/Desktop\",\"argumentHint\":\"\"},{\"name\":\"init\",\"description\":\"Initialize a new CLAUDE.md file with codebase documentation\",\"argumentHint\":\"\"},{\"name\":\"mcp\",\"description\":\"Manage MCP servers\",\"argumentHint\":\"[reconnect|enable|disable [<server>|all]]\"},{\"name\":\"import\",\"description\":\"Import config from another AI coding agent\",\"argumentHint\":\"\"},{\"name\":\"model\",\"description\":\"Set the AI model for Claude Code\",\"argumentHint\":\"<model>\"},{\"name\":\"__remote-workflow\",\"description\":\"Run the workflow script delivered in this session environment (server-launched sessions only)\",\"argumentHint\":\"\"},{\"name\":\"workflow-launch-exec\",\"description\":\"Execute a server-launched workflow handoff (workflow_launch event sessions only)\",\"argumentHint\":\"\"},{\"name\":\"reload-skills\",\"description\":\"Pick up skills added or changed on disk during this session\",\"argumentHint\":\"\"},{\"name\":\"rename\",\"description\":\"Rename the current conversation\",\"argumentHint\":\"[name]\",\"aliases\":[\"name\"]},{\"name\":\"security-review\",\"description\":\"Complete a security review of the pending changes on the current branch\",\"argumentHint\":\"\"},{\"name\":\"usage\",\"description\":\"Show session cost, plan usage, and what's contributing to your limits\",\"argumentHint\":\"\",\"aliases\":[\"cost\",\"stats\"]},{\"name\":\"insights\",\"description\":\"Generate a report analyzing your Claude Code sessions\",\"argumentHint\":\"\"},{\"name\":\"recap\",\"description\":\"Generate a one-line session recap now\",\"argumentHint\":\"\"},{\"name\":\"goal\",\"description\":\"Set a goal — keep working until the condition is met\",\"argumentHint\":\"\"},{\"name\":\"design\",\"description\":\"Grant or revoke Claude agent access to your Design projects\",\"argumentHint\":\"consent | revoke\"},{\"name\":\"design-consent\",\"description\":\"Grant Claude agent access to your Design projects\",\"argumentHint\":\"\"},{\"name\":\"design-revoke\",\"description\":\"Revoke Claude agent access to your Design projects\",\"argumentHint\":\"\"},{\"name\":\"list-agents\",\"description\":\"List subagents, teammates, and other Claude sessions you can message\",\"argumentHint\":\"\",\"aliases\":[\"peers\"]},{\"name\":\"team-onboarding\",\"description\":\"Help teammates ramp on Claude Code with a guide from your usage\",\"argumentHint\":\"\"}],\"agents\":[{\"name\":\"claude\",\"description\":\"Catch-all for any task that doesn't fit a more specific agent. FleetView's default when no agent name is typed.\"},{\"name\":\"Explore\",\"description\":\"Fast read-only search agent for locating code. Use it to find files by pattern (eg. \\\"src/components/**/*.tsx\\\"), grep for symbols or keywords (eg. \\\"API endpoints\\\"), or answer \\\"where is X defined / which files reference Y.\\\" Do NOT use it for code review, design-doc auditing, cross-file consistency checks, or open-ended analysis — it reads excerpts rather than whole files and will miss content past its read window. When calling, specify search breadth: \\\"quick\\\" for a single targeted lookup, \\\"medium\\\" for moderate exploration, or \\\"very thorough\\\" to search across multiple locations and naming conventions.\"},{\"name\":\"general-purpose\",\"description\":\"General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks. When you are searching for a keyword or file and are not confident that you will find the right match in the first few tries use this agent to perform the search for you.\"},{\"name\":\"Plan\",\"description\":\"Software architect agent for designing implementation plans. Use this when you need to plan the implementation strategy for a task. Returns step-by-step plans, identifies critical files, and considers architectural trade-offs.\"},{\"name\":\"statusline-setup\",\"description\":\"Use this agent to configure the user's Claude Code status line setting.\",\"model\":\"sonnet\"}],\"output_style\":\"default\",\"available_output_styles\":[\"default\",\"Proactive\",\"Concise\",\"Explanatory\",\"Learning\"],\"models\":[{\"value\":\"default\",\"resolvedModel\":\"claude-opus-5[1m]\",\"displayName\":\"Default (recommended)\",\"description\":\"Use the default model (currently Opus 5 (1M context)) · $5/$25 per Mtok\",\"supportsEffort\":true,\"supportedEffortLevels\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"],\"supportsAdaptiveThinking\":true,\"supportsFastMode\":true,\"supportsAutoMode\":true},{\"value\":\"opus[1m]\",\"resolvedModel\":\"claude-opus-5[1m]\",\"displayName\":\"Opus (1M context)\",\"description\":\"Opus 5 with 1M context · Best for everyday, complex tasks · $5/$25 per Mtok\",\"supportsEffort\":true,\"supportedEffortLevels\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"],\"supportsAdaptiveThinking\":true,\"supportsFastMode\":true,\"supportsAutoMode\":true},{\"value\":\"sonnet\",\"resolvedModel\":\"claude-sonnet-5\",\"displayName\":\"Sonnet\",\"description\":\"Sonnet 5 · Efficient for routine tasks · $2/$10 per Mtok\",\"supportsEffort\":true,\"supportedEffortLevels\":[\"low\",\"medium\",\"high\",\"xhigh\",\"max\"],\"supportsAdaptiveThinking\":true,\"supportsAutoMode\":true},{\"value\":\"haiku\",\"resolvedModel\":\"claude-haiku-4-5-20251001\",\"displayName\":\"Haiku\",\"description\":\"Haiku 4.5 · Fastest for quick answers · $1/$5 per Mtok\"}],\"account\":{\"tokenSource\":\"none\",\"apiKeySource\":\"ANTHROPIC_API_KEY\",\"apiProvider\":\"firstParty\"},\"pid\":69771,\"current_permission_mode\":\"default\",\"hooks_applied\":true,\"analytics_disabled\":false,\"remote_control_auto_enable\":false,\"remote_control_auto_on_by_default\":false,\"ide_rc_auto_enable_gate\":true,\"fast_mode_state\":\"off\",\"fast_mode_disabled_reason\":\"sdk_opt_in_required\",\"session_state\":\"idle\"}}}",
39
+ "{\"type\":\"system\",\"subtype\":\"init\",\"cwd\":\"[REDACTED:local-path:421fc3d4999d]\",\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"tools\":[\"Task\",\"AskUserQuestion\",\"Bash\",\"CronCreate\",\"CronDelete\",\"CronList\",\"DesignSync\",\"Edit\",\"EnterPlanMode\",\"EnterWorktree\",\"ExitPlanMode\",\"ExitWorktree\",\"ListAgents\",\"Monitor\",\"NotebookEdit\",\"PushNotification\",\"Read\",\"ReportFindings\",\"ScheduleWakeup\",\"SendMessage\",\"Skill\",\"TaskOutput\",\"TaskStop\",\"ToolSearch\",\"WebFetch\",\"WebSearch\",\"Workflow\",\"Write\"],\"mcp_servers\":[],\"model\":\"claude-opus-5[1m]\",\"permissionMode\":\"default\",\"slash_commands\":[\"deep-research\",\"design-sync\",\"dataviz\",\"update-config\",\"verify\",\"debug\",\"code-review\",\"simplify\",\"batch\",\"fewer-permission-prompts\",\"doctor\",\"loop\",\"claude-api\",\"run\",\"run-skill-generator\",\"agents\",\"auto-mode-setup\",\"autocompact\",\"clear\",\"color\",\"compact\",\"config\",\"context\",\"effort\",\"fast\",\"heapdump\",\"init\",\"mcp\",\"import\",\"model\",\"__remote-workflow\",\"workflow-launch-exec\",\"reload-skills\",\"rename\",\"security-review\",\"usage\",\"insights\",\"recap\",\"goal\",\"design\",\"design-consent\",\"design-revoke\",\"list-agents\",\"team-onboarding\"],\"terminal_slash_commands\":[\"doctor\",\"color\"],\"apiKeySource\":\"ANTHROPIC_API_KEY\",\"claude_code_version\":\"2.1.246\",\"output_style\":\"default\",\"agents\":[\"claude\",\"Explore\",\"general-purpose\",\"Plan\",\"statusline-setup\"],\"skills\":[\"deep-research\",\"design-sync\",\"dataviz\",\"update-config\",\"verify\",\"debug\",\"code-review\",\"simplify\",\"batch\",\"fewer-permission-prompts\",\"doctor\",\"loop\",\"claude-api\",\"run\",\"run-skill-generator\"],\"plugins\":[],\"capabilities\":[\"interrupt_receipt_v1\",\"interrupt_cancel_queued_v1\",\"msg_lifecycle_v1\"],\"analytics_disabled\":false,\"product_feedback_disabled\":false,\"uuid\":\"46e8d6ae-a16c-44fb-9fa1-4c965d347df4\",\"memory_paths\":{\"auto\":\"[REDACTED:local-path:adcb968b1a77]\"},\"messaging_socket_path\":\"/tmp/cc-socks/69771.sock\",\"fast_mode_state\":\"off\",\"fast_mode_disabled_reason\":\"sdk_opt_in_required\"}",
40
+ "{\"type\":\"system\",\"subtype\":\"status\",\"status\":\"requesting\",\"uuid\":\"e1eb4874-2db4-481d-86cf-c9ebf9fc2044\",\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\"}",
41
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeQwsKCo8pN41VTSEvduQ\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":31293,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":31293,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":25,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"10652c95-9f04-4bcd-a20d-07bbe7c93037\",\"ttft_ms\":2229}",
42
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01BqRj1QuYAfhuUQ2555bWPa\",\"name\":\"AskUserQuestion\",\"input\":{},\"caller\":{\"type\":\"direct\"}}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"2f7fef99-4a58-472d-9253-460b4cba60c4\"}",
43
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"6be08129-1024-454a-b623-55015ffe61d5\"}",
44
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"questions\\\": [{\\\"question\\\": \\\"Which\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"daaec3b5-e7da-47fe-940f-67d343890073\"}",
45
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" features should be enabled?\\\", \\\"header\\\": \\\"Features\\\", \\\"multiSelect\\\": true, \\\"options\\\": [{\\\"label\\\": \\\"Auth\\\", \\\"description\\\": \\\"Enable authentication.\\\"}, {\\\"label\\\": \\\"Billing\\\", \\\"description\\\": \\\"Enable billing.\\\"}, {\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"32411919-73ff-4c8b-996e-2675e8c49cd6\"}",
46
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"label\\\": \\\"Audit\\\", \\\"description\\\": \\\"Enable audit logging.\\\"}]}]\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"272d0e46-2125-44ce-9615-6c37b54b64d1\"}",
47
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"}\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"4d8168c4-1ce1-4b6e-84e0-4f90e356038e\"}",
48
+ "{\"type\":\"assistant\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeQwsKCo8pN41VTSEvduQ\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[{\"type\":\"tool_use\",\"id\":\"toolu_01BqRj1QuYAfhuUQ2555bWPa\",\"name\":\"AskUserQuestion\",\"input\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"multiSelect\":true,\"options\":[{\"label\":\"Auth\",\"description\":\"Enable authentication.\"},{\"label\":\"Billing\",\"description\":\"Enable billing.\"},{\"label\":\"Audit\",\"description\":\"Enable audit logging.\"}]}]},\"caller\":{\"type\":\"direct\"}}],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":31293,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":31293,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":25,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null,\"context_management\":null},\"parent_tool_use_id\":null,\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"uuid\":\"f7b48bde-91d6-4850-92eb-7df2a2dfecf7\",\"timestamp\":\"2026-08-26T07:14:12.180Z\",\"request_id\":\"req_011CeQwsJWsYJme8FxpogSLx\"}",
49
+ "{\"type\":\"control_request\",\"request_id\":\"b7d3d4fe-d7be-4097-a1cf-56d2b0795b30\",\"request\":{\"subtype\":\"can_use_tool\",\"tool_name\":\"AskUserQuestion\",\"display_name\":\"AskUserQuestion\",\"input\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"options\":[{\"label\":\"Auth\",\"description\":\"Enable authentication.\"},{\"label\":\"Billing\",\"description\":\"Enable billing.\"},{\"label\":\"Audit\",\"description\":\"Enable audit logging.\"}],\"multiSelect\":true}]},\"tool_use_id\":\"toolu_01BqRj1QuYAfhuUQ2555bWPa\",\"requires_user_interaction\":true}}",
50
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_stop\",\"index\":0},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"66feaee1-6700-47d9-95c7-bc6726625221\"}",
51
+ "{\"type\":\"user\",\"message\":{\"role\":\"user\",\"content\":[{\"type\":\"tool_result\",\"content\":\"Your questions have been answered: \\\"Which features should be enabled?\\\"=\\\"Auth, Audit\\\". You can now continue with these answers in mind.\",\"tool_use_id\":\"toolu_01BqRj1QuYAfhuUQ2555bWPa\"}]},\"parent_tool_use_id\":null,\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"uuid\":\"58f7fea5-2c2e-453c-8584-4a7051eec5cb\",\"timestamp\":\"2026-08-26T07:14:12.189Z\",\"tool_use_result\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"options\":[{\"label\":\"Auth\",\"description\":\"Enable authentication.\"},{\"label\":\"Billing\",\"description\":\"Enable billing.\"},{\"label\":\"Audit\",\"description\":\"Enable audit logging.\"}],\"multiSelect\":true}],\"answers\":{\"Which features should be enabled?\":\"Auth, Audit\"}}}",
52
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":31293,\"cache_read_input_tokens\":0,\"output_tokens\":156,\"output_tokens_details\":{\"thinking_tokens\":0},\"iterations\":[{\"input_tokens\":2,\"output_tokens\":156,\"cache_read_input_tokens\":0,\"cache_creation_input_tokens\":31293,\"cache_creation\":{\"ephemeral_5m_input_tokens\":31293,\"ephemeral_1h_input_tokens\":0},\"type\":\"message\"}]},\"context_management\":{\"applied_edits\":[]}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"3a107385-75ca-4742-a2c9-93c758d09a83\"}",
53
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_stop\"},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"f84cbe6f-ec7b-4d28-b683-a029e3a4902e\"}",
54
+ "{\"type\":\"system\",\"subtype\":\"status\",\"status\":\"requesting\",\"uuid\":\"7da21f47-e642-46cf-a276-2296614d2562\",\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\"}",
55
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeQwscaKXZG7k5LVf1qWa\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":227,\"cache_read_input_tokens\":31293,\"cache_creation\":{\"ephemeral_5m_input_tokens\":227,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":2,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"e9427acd-900f-4a87-8943-2dd6c01bc6b2\",\"ttft_ms\":1463}",
56
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"d4e8ef28-847c-4cd0-94a7-206dd59f9772\"}",
57
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"En\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"b44ca6fb-7eab-4c36-a9ed-72f83a81e9bf\"}",
58
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"abled: Auth, Audit.\"}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"fc5d5a76-ba4f-4c11-9bc4-8aeee8573d41\"}",
59
+ "{\"type\":\"assistant\",\"message\":{\"model\":\"claude-opus-5\",\"id\":\"msg_011CeQwscaKXZG7k5LVf1qWa\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[{\"type\":\"text\",\"text\":\"Enabled: Auth, Audit.\"}],\"stop_reason\":null,\"stop_sequence\":null,\"stop_details\":null,\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":227,\"cache_read_input_tokens\":31293,\"cache_creation\":{\"ephemeral_5m_input_tokens\":227,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":2,\"service_tier\":\"standard\",\"inference_geo\":\"global\"},\"diagnostics\":null,\"context_management\":null},\"parent_tool_use_id\":null,\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"uuid\":\"0658b0f3-cdcd-476b-ba39-392c644da846\",\"timestamp\":\"2026-08-26T07:14:13.831Z\",\"request_id\":\"req_011CeQwsbf18nSsf5AodJgD3\"}",
60
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"content_block_stop\",\"index\":0},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"5ba229a4-c64d-41a0-867b-58e4dff665dd\"}",
61
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"stop_details\":null},\"usage\":{\"input_tokens\":2,\"cache_creation_input_tokens\":227,\"cache_read_input_tokens\":31293,\"output_tokens\":15,\"output_tokens_details\":{\"thinking_tokens\":0},\"iterations\":[{\"input_tokens\":2,\"output_tokens\":15,\"cache_read_input_tokens\":31293,\"cache_creation_input_tokens\":227,\"cache_creation\":{\"ephemeral_5m_input_tokens\":227,\"ephemeral_1h_input_tokens\":0},\"type\":\"message\"}]},\"context_management\":{\"applied_edits\":[]}},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"b078885f-2cb7-43ea-b74b-00cdbbeb4b1b\"}",
62
+ "{\"type\":\"stream_event\",\"event\":{\"type\":\"message_stop\"},\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"parent_tool_use_id\":null,\"uuid\":\"54a64144-3dde-4ebc-8f48-961cbdfe8e14\"}",
63
+ "{\"is_error\":false,\"duration_api_ms\":6530,\"num_turns\":2,\"stop_reason\":\"end_turn\",\"session_id\":\"546d5695-eaa7-4ffd-b7b8-aa9063b452c8\",\"total_cost_usd\":0.2179685,\"usage\":{\"input_tokens\":4,\"cache_creation_input_tokens\":31520,\"cache_read_input_tokens\":31293,\"output_tokens\":171,\"output_tokens_details\":{\"thinking_tokens\":0},\"server_tool_use\":{\"web_search_requests\":0,\"web_fetch_requests\":0},\"service_tier\":\"standard\",\"cache_creation\":{\"ephemeral_1h_input_tokens\":0,\"ephemeral_5m_input_tokens\":31520},\"inference_geo\":\"global\",\"iterations\":[{\"input_tokens\":2,\"output_tokens\":15,\"cache_read_input_tokens\":31293,\"cache_creation_input_tokens\":227,\"cache_creation\":{\"ephemeral_5m_input_tokens\":227,\"ephemeral_1h_input_tokens\":0},\"type\":\"message\"}],\"speed\":\"standard\"},\"modelUsage\":{\"claude-haiku-4-5-20251001\":{\"inputTokens\":967,\"outputTokens\":12,\"cacheReadInputTokens\":0,\"cacheCreationInputTokens\":0,\"webSearchRequests\":0,\"costUSD\":0.001027,\"contextWindow\":200000,\"maxOutputTokens\":32000,\"canonicalModel\":\"claude-haiku-4-5\",\"provider\":\"firstParty\",\"costBasis\":\"list\"},\"claude-opus-5[1m]\":{\"inputTokens\":4,\"outputTokens\":171,\"cacheReadInputTokens\":31293,\"cacheCreationInputTokens\":31520,\"webSearchRequests\":0,\"costUSD\":0.2169415,\"contextWindow\":1000000,\"maxOutputTokens\":64000,\"canonicalModel\":\"claude-opus-5\",\"provider\":\"firstParty\",\"costBasis\":\"list\"}},\"permission_denials\":[],\"terminal_reason\":\"completed\",\"fast_mode_state\":\"off\",\"fast_mode_disabled_reason\":\"sdk_opt_in_required\",\"subagent_stats\":{\"spawned\":0,\"requested\":{\"background\":0,\"foreground\":0,\"unset\":0},\"started_in_background\":0,\"max_depth\":0,\"spawned_by_subagents\":0,\"completed\":0,\"failed\":0,\"killed\":{\"parent\":0,\"user\":0,\"system\":0},\"refused\":{\"depth_limit\":0,\"concurrency_limit\":0,\"budget\":0},\"by_type\":{}},\"subtype\":\"success\",\"api_error_status\":null,\"result\":\"Enabled: Auth, Audit.\",\"ttft_ms\":4071,\"ttft_stream_ms\":2300,\"time_to_request_ms\":71,\"type\":\"result\",\"duration_ms\":5735,\"uuid\":\"d6ff6e7b-40ca-4209-b4fa-db1b0f7da385\",\"queued_turn_count\":0}"
69
64
  ],
70
65
  "controlOut": [
71
66
  "{\"type\":\"control_request\",\"request_id\":\"init-1\",\"request\":{\"subtype\":\"initialize\",\"hooks\":{\"PreToolUse\":[{\"matcher\":\"Task\",\"hookCallbackIds\":[\"cowork-task-bg-block\"]}]}}}",
72
67
  "{\"type\":\"user\",\"message\":{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"Call the AskUserQuestion tool exactly once with a SINGLE multi-select question\\n(allow selecting more than one option) asking which features to enable, with these\\nthree options: Auth, Billing, Audit.\\nAfter I answer, reply with exactly: \\\"Enabled: <the features I chose, comma-separated>.\\\"\\nand nothing else.\\n\"}]}}",
73
- "{\"type\":\"control_response\",\"response\":{\"subtype\":\"success\",\"request_id\":\"1d40b7fc-f178-464d-b799-9a6b5312fa28\",\"response\":{\"behavior\":\"allow\",\"updatedInput\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"options\":[{\"label\":\"Auth\",\"description\":\"User authentication and session management.\"},{\"label\":\"Billing\",\"description\":\"Payments, subscriptions, and invoicing.\"},{\"label\":\"Audit\",\"description\":\"Audit logging of user and system actions.\"}],\"multiSelect\":true}],\"answers\":{\"Which features should be enabled?\":\"Auth, Audit\"}}}}}"
68
+ "{\"type\":\"control_response\",\"response\":{\"subtype\":\"success\",\"request_id\":\"b7d3d4fe-d7be-4097-a1cf-56d2b0795b30\",\"response\":{\"behavior\":\"allow\",\"updatedInput\":{\"questions\":[{\"question\":\"Which features should be enabled?\",\"header\":\"Features\",\"options\":[{\"label\":\"Auth\",\"description\":\"Enable authentication.\"},{\"label\":\"Billing\",\"description\":\"Enable billing.\"},{\"label\":\"Audit\",\"description\":\"Enable audit logging.\"}],\"multiSelect\":true}],\"answers\":{\"Which features should be enabled?\":\"Auth, Audit\"}}}}}"
74
69
  ],
75
70
  "effectiveFidelity": "protocol",
76
71
  "artifacts": [],
@@ -82,54 +77,54 @@
82
77
  "preRunHashes": {},
83
78
  "scenarioSource": "../../e2e/scenarios/smoke-multiselect.yaml",
84
79
  "fingerprint": {
85
- "baseline": "1.34493.1",
80
+ "baseline": "1.37937.1",
86
81
  "hashFormat": "jcs1",
87
82
  "promptAssetsHash": "491afe2862dc67ea"
88
83
  },
89
84
  "timeline": [
90
85
  {
91
86
  "seq": 0,
92
- "ts": 4787,
93
- "line": 15,
87
+ "ts": 5149,
88
+ "line": 10,
94
89
  "type": "tool_use",
95
- "toolUseId": "toolu_018GMNbxKjLZnUfuZdL3s4Q6",
90
+ "toolUseId": "toolu_01BqRj1QuYAfhuUQ2555bWPa",
96
91
  "name": "AskUserQuestion",
97
92
  "model": "claude-opus-5",
98
93
  "skillScope": "(root)"
99
94
  },
100
95
  {
101
96
  "seq": 1,
102
- "ts": 4790,
103
- "line": 16,
97
+ "ts": 5152,
98
+ "line": 11,
104
99
  "type": "decision",
105
100
  "kind": "question"
106
101
  },
107
102
  {
108
103
  "seq": 2,
109
- "ts": 4793,
110
- "line": 19,
104
+ "ts": 5157,
105
+ "line": 13,
111
106
  "type": "tool_result",
112
- "toolUseId": "toolu_018GMNbxKjLZnUfuZdL3s4Q6",
107
+ "toolUseId": "toolu_01BqRj1QuYAfhuUQ2555bWPa",
113
108
  "isError": false
114
109
  },
115
110
  {
116
111
  "seq": 3,
117
- "ts": 7272,
118
- "line": 30,
112
+ "ts": 6812,
113
+ "line": 25,
119
114
  "type": "result",
120
115
  "isError": false
121
116
  }
122
117
  ],
123
118
  "timelineHeader": {
124
119
  "v": 1,
125
- "startedAtWall": "2026-08-21T11:25:51.184Z",
126
- "startedAtMono": "487405077341291"
120
+ "startedAtWall": "2026-08-26T07:14:07.032Z",
121
+ "startedAtMono": "904298714707875"
127
122
  },
128
123
  "sessionFingerprint": "d9334c705e89ea65b17fde17c233c079bd15c7e330d92f20f069000111571450",
129
124
  "folderPrefixMap": [],
130
125
  "environment": {
131
126
  "location": "local",
132
127
  "tier": "protocol",
133
- "harnessVersion": "1.25.0"
128
+ "harnessVersion": "2.2.0"
134
129
  }
135
130
  }