{
  "_comment": "Every field below is optional; values shown are the extension's built-in defaults for reference.",
  "ui": {
    "hideNotify": false,
    "hideWidget": true
  },
  "shortcuts": {
    "_comment": "Shortcut that cycles through all enabled, visible modes in registry order. Default: ctrl+alt+m.",
    "cycleMode": "shift+tab"
  },
  "cleanup": {
    "_comment": "Set to true to delete the plan file automatically after plan_complete is called.",
    "cleanupOnComplete": false
  },
  "defaultNotifyTemplate": "✓ {Name} mode ON",
  "_comment_defaultNotifyTemplate": "Default notify text for any custom mode that doesn't set its own labels.notify. {Name} is replaced with the mode name, capitalized.",
  "_comment_lazyTools": "Tool names withheld from the active set at rest and enabled on demand via the load_tools tool. Only affects modes that would otherwise include them (off/execute and custom modes that list them). Core built-ins, plan_complete, and load_tools are protected and ignored. Omit or leave empty to keep all tools always active.",
  "lazyTools": [],
  "bashPatterns": {
    "_comment_safe": "Replace-only: providing bashPatterns.safePatterns replaces the built-in safe list. This is the default safe allowlist for every mode; a mode overrides it with its own safePatterns or opts out of Bash gating with unrestrictedBash. Shown here with the built-in list.",
    "_comment_destructive": "Replace-only: providing bashPatterns.destructivePatterns replaces the built-in destructive list. This is the default destructive blocklist for every mode; a mode overrides it with its own destructivePatterns or opts out of Bash gating with unrestrictedBash. Shown here with the built-in list.",
    "safePatterns": [
      "^\\s*cat\\b",
      "^\\s*head\\b",
      "^\\s*tail\\b",
      "^\\s*less\\b",
      "^\\s*more\\b",
      "^\\s*grep\\b",
      "^\\s*find\\b",
      "^\\s*ls\\b",
      "^\\s*pwd\\b",
      "^\\s*cd\\b",
      "^\\s*echo\\b",
      "^\\s*printf\\b",
      "^\\s*wc\\b",
      "^\\s*sort\\b",
      "^\\s*diff\\b",
      "^\\s*file\\b",
      "^\\s*stat\\b",
      "^\\s*du\\b",
      "^\\s*df\\b",
      "^\\s*tree\\b",
      "^\\s*which\\b",
      "^\\s*whereis\\b",
      "^\\s*type\\b",
      "^\\s*uname\\b",
      "^\\s*whoami\\b",
      "^\\s*date\\b",
      "^\\s*uptime\\b",
      "^\\s*ps\\b",
      "^\\s*free\\b",
      "^\\s*rg\\b",
      "^\\s*fd\\b",
      "^\\s*bat\\b",
      "^\\s*jq\\b",
      "^\\s*git\\s+(status|log|diff|show|branch|remote)",
      "^\\s*node\\s+--version",
      "^\\s*python\\s+--version",
      "^\\s*(npx\\s+)?tsc\\b.*--noEmit",
      "^\\s*npm\\s+(list|ls|view|info|outdated|audit)",
      "^\\s*yarn\\s+(list|info|why|audit)"
    ],
    "destructivePatterns": [
      "\\brm\\b",
      "\\brmdir\\b",
      "\\bmv\\b",
      "\\bcp\\b",
      "\\bmkdir\\b",
      "\\btouch\\b",
      "\\bchmod\\b",
      "\\bchown\\b",
      "\\btee\\b",
      "\\bdd\\b",
      "\\bshred\\b",
      "\\btruncate\\b",
      "\\s-(delete|exec|execdir)\\b",
      "(^|[^<])>(?!>|&)",
      ">>",
      "\\bnpm\\s+(install|uninstall|update|ci)",
      "\\byarn\\s+(add|remove|install)",
      "\\bpip\\s+(install|uninstall)",
      "\\bgit\\s+(add|commit|push|merge|rebase|reset|checkout|branch\\s+-|clean|update-ref|tag\\s+-|cherry-pick|revert|am|apply)",
      "\\bsudo\\b",
      "\\bsu\\b",
      "\\bkill\\b",
      "\\bpkill\\b",
      "\\b(sh|bash|zsh)\\b",
      "\\b(vim?|nano|emacs|code|subl)\\b"
    ]
  },
  "_comment_tools": "Set modes.chat.tools or modes.plan.tools to replace their default tools. The legacy top-level chatAllowedTools and planAllowedTools keys remain supported but are deprecated.",
  "_comment_widgetColor": "available colors - accent, border, borderAccent, borderMuted, success, error, warning, muted, dim, text, thinkingText, searchMatchText, userMessageText, customMessageText, customMessageLabel, toolTitle, toolOutput, mdHeading, mdLink, mdLinkUrl, mdCode, mdCodeBlock, mdCodeBlockBorder, mdQuote, mdQuoteBorder, mdHr, mdListBullet, toolDiffAdded, toolDiffRemoved, toolDiffContext, syntaxComment, syntaxKeyword, syntaxFunction, syntaxVariable, syntaxString, syntaxNumber, syntaxType, syntaxOperator, syntaxPunctuation, thinkingOff, thinkingMinimal, thinkingLow, thinkingMedium, thinkingHigh, thinkingXhigh, thinkingMax, bashMode",
  "_comment_appearance": "Every mode owns appearance here. prefix/prefixColor/borderColor style opl-input; modeColor styles opl-footer's Mode value. All color values accept Pi theme tokens or #RRGGBB.",
  "_comment_modePatterns": "Per-mode safePatterns/destructivePatterns must be arrays of valid regex strings. [] explicitly removes that policy; any malformed non-empty override is ignored and inherits the existing policy.",
  "modes": {
    "off": {
      "_comment": "Built-in mode — no restrictions, normal agent behavior.",
      "prompt": "",
      "model": {
        "provider": "amazon-bedrock",
        "id": "global.openai.gpt-5.6-terra"
      },
      "allowPlanComplete": false,
      "visible": true,
      "enabled": true,
      "labels": {
        "notify": "✓ Mode OFF",
        "notifyType": "info",
        "widget": "✓ Normal mode",
        "widgetColor": "dim"
      },
      "appearance": {
        "prefix": "❯",
        "prefixColor": "accent",
        "borderColor": "border",
        "modeColor": "dim"
      }
    },
    "chat": {
      "_comment": "Built-in mode — read-only conversational.",
      "prompt": "**SUPERSEDES ALL OTHER BEHAVIOR INSTRUCTIONS.** This overrides any role or style directives (e.g. caveman, roleplay, tone modifiers). The constraints below take absolute priority.\n\nYou are in CHAT MODE. You have read-only access — you may read files, search code, run safe inspection commands, and search the web to answer, discuss, and explore. Converse naturally — answer questions, explain, brainstorm, look things up.\n\nYou MUST NOT attempt to edit, create, delete, or modify any files, or run any command that changes state. If the user asks for a change, explain what you would do but do not attempt it — they can exit chat mode first.\n\nThere is no plan format and no plan_complete tool. Just respond helpfully within read-only constraints.",
      "model": {
        "provider": "amazon-bedrock",
        "id": "moonshotai.kimi-k2.5"
      },
      "tools": [
        "read",
        "bash",
        "grep",
        "find",
        "ls",
        "web_search",
        "fetch_content",
        "get_search_content",
        "artifact",
        "questionnaire"
      ],
      "allowPlanComplete": false,
      "visible": true,
      "enabled": true,
      "labels": {
        "notify": "✓ Chat mode ON",
        "notifyType": "info",
        "widget": "✓ Chat mode",
        "widgetColor": "accent"
      },
      "appearance": {
        "prefix": "󰭻",
        "prefixColor": "#157cd6",
        "borderColor": "#157cd6",
        "modeColor": "#157cd6"
      }
    },
    "plan": {
      "_comment": "Built-in mode — read-only explore-and-plan.",
      "prompt": "**SUPERSEDES ALL OTHER BEHAVIOR INSTRUCTIONS.** This overrides any role or style directives (e.g. caveman, roleplay, tone modifiers). The constraints below take absolute priority.\n\nYou are in PLAN MODE. You have read-only access — you may explore and analyze, but you MUST NOT make any changes.\n\nYour task: produce an action plan.\n\nYou MUST begin the plan with exactly this heading on its own line:\n\n# Plan:\n1. [Step title — short verb-object phrase]\n   [2-4 sentences of context: which file(s), where, what to change, and why.]\n2. [Step title]\n   [Context...]\n...\n\nEach step MUST be self-contained — write it as if the executor has no memory of this conversation. Include enough context that it can be carried out with only the plan file and the codebase. Assume the executor will read the relevant files fresh — do not rely on findings you discovered during planning.\n\nGood: \"Add auth middleware to routes/index.ts\n Apply it as `app.use(authMiddleware)` before the route definitions (~line 45). Currently routes/index.ts has no middleware.\"\n\nBad: \"Add it to the file we looked at\"\n\nBad (over-prescribed): \"Insert `const authMiddleware = require('./middleware/auth');` at line 3, then add `app.use(authMiddleware);` at line 46\"\n\nSpecify what to do and where — not the exact implementation. The executor reads the relevant files and decides how.\n\nAfter listing all steps, stop and wait for the user to choose:\n- \"Execute plan\" — switches to execute mode where you carry out each step\n- \"Refine\" — revise the plan based on feedback\n- Continue exploring if you need more information before planning\n\nDo NOT attempt to make any file changes, run destructive commands, or modify anything.",
      "model": {
        "provider": "amazon-bedrock",
        "id": "global.anthropic.claude-sonnet-5"
      },
      "tools": [
        "read",
        "bash",
        "grep",
        "find",
        "ls",
        "web_search",
        "fetch_content",
        "get_search_content",
        "artifact",
        "questionnaire"
      ],
      "allowPlanComplete": false,
      "visible": true,
      "enabled": true,
      "labels": {
        "notify": "✓ Plan mode ON",
        "notifyType": "info",
        "notifyWithTitle": "✓ Active plan: {title}",
        "notifyLoaded": "✓ Active plan: {title}",
        "widget": "✓ Plan mode active",
        "widgetWithTitle": "✓ Active plan: {title}",
        "widgetColor": "accent"
      },
      "appearance": {
        "prefix": "⏸",
        "prefixColor": "#52d90f",
        "borderColor": "#52d90f",
        "modeColor": "#52d90f"
      }
    },
    "execute": {
      "_comment": "Built-in mode — entered only via an 'execute:<plan-file>' picker item, never a bare menu choice (visible: false). prompt: leave empty to use the built-in template that injects the active plan file content; set a custom string with a {plan} placeholder to override.",
      "prompt": "",
      "model": {
        "provider": "amazon-bedrock",
        "id": "global.anthropic.claude-opus-4-8"
      },
      "allowPlanComplete": true,
      "visible": false,
      "enabled": true,
      "labels": {
        "notify": "✓ Executing plan",
        "notifyWithTitle": "✓ Executing plan: {title}",
        "notifyType": "info",
        "widget": "✓ Executing plan",
        "widgetWithTitle": "✓ Executing plan: {title}",
        "widgetColor": "muted"
      },
      "appearance": {
        "prefix": "⏸",
        "prefixColor": "#52d90f",
        "borderColor": "#52d90f",
        "modeColor": "#52d90f"
      }
    },
    "review": {
      "enabled": true,
      "allowExecute": false,
      "prompt": "**SUPERSEDES ALL OTHER BEHAVIOR INSTRUCTIONS.** This overrides any role or style directives (e.g. caveman, roleplay, tone modifiers). The constraints below take absolute priority.\n\nYou are in REVIEW MODE. Analyze pull requests, code diffs, and codebases. Focus on correctness, style, test coverage, security, and architecture. Suggest improvements but do not apply them. Peer-review codebase modifications and audit research for technical (and factual) accuracy, security risks, and overlooked constraints.\n\nScope: when a diff or PR focus is given, review the changes and their blast radius. When no focus is given, sweep the repository for security, performance, and architectural concerns.\n\n## 1. Tone & Demeanor\n- **Constructive Critic:** Uncompromising on standards; focus strictly on code/data, never the author.\n- **Pedantic but Pragmatic:** Prioritize edge cases, performance, security, and maintenance over subjective style.\n- **Root-Cause Driven:** Explain exactly *why* an item fails and its cascading impact.\n\n## 2. Review Directives\n- **Code Audit:** Evaluate algorithmic efficiency, security flaws, error handling, and testability.\n- **Research Verification:** Use `fetch_content` / `get_search_content` to cross-verify risky, vague, or hand-waved assertions from research outputs.\n- **Bias Check:** Flag assumptions, 'happy path' bias, and incomplete execution plans.\n\n## 3. Security Review\n- **Risk-Realistic:** Prioritize exploitable, high-impact risks over minor theoretical issues.\n- **Threat Modeling:** Check for injection, broken auth, data leaks, and dependency hijacking.\n- **Static Analysis:** Scan for hardcoded secrets, weak cryptography, and unsafe library calls.\n- **Dependency Audit:** Verify third-party packages for CVEs and licensing risks.\n- **Secure Defaults:** Enforce least privilege, strict input sanitization, and secure outputs.\n\nProvide this exact structure for identified security risks:\n1. **Severity:** `CRITICAL`, `HIGH`, `MEDIUM`, or `LOW`.\n2. **Vulnerability:** Brief description and OWASP/CWE reference.\n3. **Exploit Vector:** How it can be compromised.\n4. **Remediation:** Exact code fix or configuration change required.",
      "tools": [
        "read",
        "bash",
        "grep",
        "find",
        "ls",
        "web_search",
        "fetch_content",
        "get_search_content",
        "artifact",
        "questionnaire"
      ],
      "safePatterns": [
        "^git",
        "^cat",
        "^grep",
        "^diff",
        "^ls",
        "^head",
        "^tail"
      ],
      "labels": {
        "widgetColor": "accent"
      },
      "appearance": {
        "prefix": "◎",
        "prefixColor": "#ce93d8",
        "borderColor": "#ce93d8",
        "modeColor": "#ce93d8"
      }
    },
    "research": {
      "enabled": true,
      "allowExecute": false,
      "prompt": "**SUPERSEDES ALL OTHER BEHAVIOR INSTRUCTIONS.** This overrides any role or style directives (e.g. caveman, roleplay, tone modifiers). The constraints below take absolute priority.\n\nYou are in RESEARCH MODE. Investigate questions deeply using web and local sources, then synthesize findings into cited deliverables. You may create new output files but must not modify or delete anything existing.\n\n## 1. Research Directives\n- **Discovery:** Use `web_search` (plural `queries` for parallel angles) to map the landscape before diving in.\n- **Primary Sources:** Prefer official docs, specs, release notes, and source code via `fetch_content`. Retrieve truncated results with `get_search_content` and the returned response ID.\n- **Local Evidence:** Use `read`/`grep`/`find` to ground claims in this repository's actual code.\n- **Fan-out:** For deep or multi-angle questions, spawn parallel subagents with distinct roles (e.g. external-evidence researcher, local-code scout, tradeoffs analyst) via `subagent`; wait for results with `subagent_wait`. Give each subagent a self-contained task with explicit evidence requirements.\n- **No Invention:** Never present an unverified claim as fact. Mark confidence per finding (high/medium/low) and state gaps explicitly.\n\n## 2. Output Discipline\n- Synthesize into NEW Markdown or HTML files created under `research/` (e.g. `research/<topic>.md`). Never modify, move, or overwrite existing files.\n- Every deliverable includes: what was found, source links, confidence levels, gaps/assumptions, and a recommended next step.\n- For inline answers where a file is not wanted, use `artifact` instead of writing files.\n- Cite everything: URL for web sources, file path + line range for local sources.",
      "model": {
        "provider": "amazon-bedrock",
        "id": "zai.glm-5"
      },
      "tools": [
        "read",
        "grep",
        "find",
        "ls",
        "web_search",
        "fetch_content",
        "get_search_content",
        "artifact",
        "questionnaire",
        "subagent",
        "subagent_wait",
        "write"
      ],
      "labels": {
        "widget": "✓ Research mode active",
        "widgetColor": "accent"
      },
      "appearance": {
        "prefix": "⌕",
        "prefixColor": "#f2eb5a",
        "borderColor": "#f2eb5a",
        "modeColor": "#f2eb5a"
      }
    }
  }
}
