{ // Bundle-authoritative tool guidance, owned by extensions/system-prompt.ts. // // Every tool the bundle can expose must have an entry. Per field: // "snippet" — replaces the tool's one-line entry (null hides it) // "guidelines" — replaces the tool's lines // "description" — replaces the tool description at registration; only // applied to third-party tools loaded through a bundle // adapter (in-repo tools edit their own source instead) // An absent field keeps the upstream text. "inherit": true means the // upstream text was reviewed against this bundle and is kept as-is. "version": 1, "tools": { "bash": { "snippet": "Run shell commands for builds, tests, git, package scripts, and other programs; search files with the find/grep tools, not bash" }, "read": { "inherit": true }, "edit": { "guidelines": [ "Use edit with LINE#HASH anchors from the latest read or edit result for all file changes; batch every change to one file into a single edit call.", "find/grep/multi_grep results carry plain line numbers, not LINE#HASH anchors; read the exact target range before editing.", "Never reuse anchors from an earlier read or edit response once a newer one exists for the same file; treat only the most recent response as carrying valid anchors.", "After a successful edit, the returned --- Anchors --- block replaces a re-read for nearby follow-up edits.", "On [E_STALE_ANCHOR], the error lists the stale refs and any content-matched candidate anchors; re-read the file to get current anchors before retrying." ], "description": "Patch a text file at `LINE#HASH` anchors copied verbatim from the latest read result or the anchors block of a previous edit. find/grep results have no anchors — read the target range first.\n\nBatch every change to a file into one `edit` call: all operations go in the `edits` array, every edit sets `op`, and all anchors must come from the same pre-edit read. Edits validate against one snapshot and apply together, so line numbers never shift between entries of the same call.\n\nOps:\n- `replace` — replace the single line at `pos`, or the inclusive span `pos`..`end`. `lines` is the complete new content for the whole span; `lines: []` deletes it. Without `end`, exactly one line is replaced no matter how many entries `lines` has.\n- `append` — insert `lines` after `pos`; omit `pos` to append at end of file.\n- `prepend` — insert `lines` before `pos`; omit `pos` to insert at start of file.\n\nExample — single-line and span replace in one call:\n```json\n{ \"path\": \"src/main.ts\", \"edits\": [\n { \"op\": \"replace\", \"pos\": \"12#MQ\", \"lines\": [\"const x = 1;\"] },\n { \"op\": \"replace\", \"pos\": \"5#VR\", \"end\": \"8#QV\", \"lines\": [\n \"function greet(name) {\",\n \" return `Hello, ${name}`;\",\n \"}\"\n ] }\n] }\n```\n\nRules:\n- `lines` is literal file content with exact indentation. Never include `LINE#HASH:` or bare `HH:` prefixes, diff `+`/`-` markers, or a copy of a neighboring line — the `:content` part of an anchor is context for you, not payload, and repeating a boundary line duplicates it in the file.\n- Anchors are opaque: copy them exactly, never compute, shift, or guess one.\n- An anchor may keep the `:content` suffix from read output (`\"12#MQ: const x = 1;\"`). The runtime cross-checks that content against the file — catching hash collisions and recovering whitespace-only drift — so keep it for high-risk anchors such as range endpoints. Copy the content as rendered; if you shorten it, keep the start of the line and mark the cut with `...`.\n- Edits in one call must not overlap or touch adjacent lines — merge such changes into a single edit." }, "write": { "inherit": true }, "ls": { "inherit": true }, "powershell": { "inherit": true }, "grep": { "inherit": true }, "find": { "inherit": true }, "multi_grep": { "inherit": true }, "tool_search": { "inherit": true }, "codegraph_explore": { "inherit": true }, "lsp_diagnostics": { "inherit": true }, "lsp_definition": { "inherit": true }, "lsp_references": { "inherit": true }, "lsp_hover": { "inherit": true }, "lsp_symbols": { "inherit": true }, "web_search": { "inherit": true }, "web_fetch": { "inherit": true }, "ctx_execute": { "inherit": true }, "ctx_execute_file": { "inherit": true }, "ctx_batch_execute": { "inherit": true }, "ctx_index": { "inherit": true }, "ctx_search": { "inherit": true }, "ctx_fetch_and_index": { "inherit": true }, "ctx_stats": { "inherit": true }, "ctx_doctor": { "inherit": true }, "ctx_insight": { "inherit": true }, "ctx_upgrade": { "inherit": true }, "ctx_purge": { "inherit": true }, "memory_search": { "inherit": true }, "session_search": { "inherit": true }, "memory_add": { "inherit": true }, "memory_replace": { "inherit": true }, "memory_remove": { "inherit": true }, "skill_manage": { "inherit": true }, "context_tree_query": { "inherit": true }, "overflow_query": { "inherit": true }, "ask_user_question": { "inherit": true }, "ssh_connect": { "inherit": true }, "ssh_cd": { "inherit": true }, "ssh_read": { "inherit": true }, "ssh_write": { "inherit": true }, "ssh_edit": { "inherit": true }, "ssh_find": { "inherit": true }, "ssh_grep": { "inherit": true }, "ssh_bash": { "inherit": true }, "Agent": { "inherit": true }, "get_subagent_result": { "inherit": true }, "steer_subagent": { "inherit": true }, "chrome_launch": { "inherit": true }, "chrome_tab": { "inherit": true }, "chrome_navigate": { "inherit": true }, "chrome_snapshot": { "inherit": true }, "chrome_find": { "inherit": true }, "chrome_inspect": { "inherit": true }, "chrome_wait_for": { "inherit": true }, "chrome_screenshot": { "inherit": true }, "chrome_click": { "inherit": true }, "chrome_type": { "inherit": true }, "chrome_fill": { "inherit": true }, "chrome_key": { "inherit": true }, "chrome_hover": { "inherit": true }, "chrome_drag": { "inherit": true }, "chrome_tap": { "inherit": true }, "chrome_scroll": { "inherit": true }, "chrome_evaluate": { "inherit": true }, "chrome_list_console_messages": { "inherit": true }, "chrome_list_network_requests": { "inherit": true }, "chrome_get_network_request": { "inherit": true }, "chrome_upload_file": { "inherit": true } } }