@oh-my-pi/pi-coding-agent 7.0.0 → 8.0.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 (501) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +1 -1
  3. package/docs/hooks.md +2 -2
  4. package/docs/sdk.md +1 -1
  5. package/package.json +10 -10
  6. package/scripts/format-prompts.ts +143 -0
  7. package/scripts/generate-template.ts +1 -1
  8. package/src/cli/args.ts +3 -3
  9. package/src/cli/config-cli.ts +4 -4
  10. package/src/cli/file-processor.ts +3 -3
  11. package/src/cli/list-models.ts +2 -2
  12. package/src/cli/plugin-cli.ts +3 -3
  13. package/src/cli/session-picker.ts +2 -2
  14. package/src/cli/setup-cli.ts +2 -2
  15. package/src/cli/stats-cli.ts +1 -1
  16. package/src/cli/update-cli.ts +2 -2
  17. package/src/{core → config}/keybindings.ts +1 -1
  18. package/src/{core → config}/model-registry.ts +1 -1
  19. package/src/{core → config}/model-resolver.ts +3 -3
  20. package/src/{core → config}/prompt-templates.ts +2 -2
  21. package/src/{core → config}/settings-manager.ts +6 -6
  22. package/src/{core/cursor/exec-bridge.ts → cursor.ts} +4 -4
  23. package/src/discovery/agents-md.ts +4 -4
  24. package/src/discovery/builtin.ts +17 -17
  25. package/src/discovery/claude.ts +12 -12
  26. package/src/discovery/cline.ts +6 -6
  27. package/src/discovery/codex.ts +21 -21
  28. package/src/discovery/cursor.ts +9 -9
  29. package/src/discovery/gemini.ts +9 -9
  30. package/src/discovery/github.ts +6 -6
  31. package/src/discovery/helpers.ts +4 -4
  32. package/src/discovery/index.ts +16 -16
  33. package/src/discovery/mcp-json.ts +4 -4
  34. package/src/discovery/ssh.ts +4 -4
  35. package/src/discovery/vscode.ts +4 -4
  36. package/src/discovery/windsurf.ts +6 -6
  37. package/src/{core/tools/exa → exa}/company.ts +2 -3
  38. package/src/{core/tools/exa → exa}/index.ts +2 -2
  39. package/src/{core/tools/exa → exa}/linkedin.ts +2 -3
  40. package/src/{core/tools/exa → exa}/mcp-client.ts +2 -2
  41. package/src/{core/tools/exa → exa}/render.ts +3 -3
  42. package/src/{core/tools/exa → exa}/researcher.ts +1 -1
  43. package/src/{core/tools/exa → exa}/search.ts +2 -10
  44. package/src/{core/tools/exa → exa}/websets.ts +1 -1
  45. package/src/{core → exec}/bash-executor.ts +22 -6
  46. package/src/{core → export}/custom-share.ts +1 -1
  47. package/src/{core/export-html → export/html}/index.ts +3 -3
  48. package/src/{core → export}/ttsr.ts +2 -2
  49. package/src/{core → extensibility}/custom-commands/bundled/review/index.ts +4 -4
  50. package/src/{core → extensibility}/custom-commands/loader.ts +3 -3
  51. package/src/{core → extensibility}/custom-commands/types.ts +1 -1
  52. package/src/{core → extensibility}/custom-tools/loader.ts +9 -9
  53. package/src/{core → extensibility}/custom-tools/types.ts +6 -6
  54. package/src/{core → extensibility}/custom-tools/wrapper.ts +1 -1
  55. package/src/{core → extensibility}/extensions/loader.ts +8 -8
  56. package/src/{core → extensibility}/extensions/runner.ts +3 -3
  57. package/src/{core → extensibility}/extensions/types.ts +15 -15
  58. package/src/{core → extensibility}/extensions/wrapper.ts +1 -1
  59. package/src/{core → extensibility}/hooks/index.ts +1 -1
  60. package/src/{core → extensibility}/hooks/loader.ts +7 -7
  61. package/src/{core → extensibility}/hooks/runner.ts +4 -4
  62. package/src/{core → extensibility}/hooks/types.ts +9 -9
  63. package/src/{core → extensibility}/plugins/doctor.ts +1 -1
  64. package/src/{core → extensibility}/plugins/installer.ts +2 -3
  65. package/src/{core → extensibility}/plugins/paths.ts +1 -1
  66. package/src/{core → extensibility}/skills.ts +8 -48
  67. package/src/{core → extensibility}/slash-commands.ts +6 -6
  68. package/src/index.ts +127 -128
  69. package/src/internal-urls/agent-protocol.ts +126 -0
  70. package/src/internal-urls/artifact-protocol.ts +93 -0
  71. package/src/internal-urls/index.ts +28 -0
  72. package/src/internal-urls/json-query.ts +126 -0
  73. package/src/internal-urls/router.ts +69 -0
  74. package/src/internal-urls/rule-protocol.ts +56 -0
  75. package/src/internal-urls/skill-protocol.ts +112 -0
  76. package/src/internal-urls/types.ts +48 -0
  77. package/src/{core/python-executor.ts → ipy/executor.ts} +51 -11
  78. package/src/{core/python-gateway-coordinator.ts → ipy/gateway-coordinator.ts} +41 -325
  79. package/src/{core/python-kernel.ts → ipy/kernel.ts} +38 -10
  80. package/src/ipy/prelude.ts +3 -0
  81. package/src/{core/tools/lsp → lsp}/client.ts +7 -6
  82. package/src/{core/tools/lsp → lsp}/clients/biome-client.ts +1 -1
  83. package/src/{core/tools/lsp → lsp}/clients/index.ts +1 -1
  84. package/src/{core/tools/lsp → lsp}/clients/lsp-linter-client.ts +4 -4
  85. package/src/{core/tools/lsp → lsp}/config.ts +1 -1
  86. package/src/{core/tools/lsp → lsp}/index.ts +16 -15
  87. package/src/{core/tools/lsp → lsp}/render.ts +2 -2
  88. package/src/{core/tools/lsp → lsp}/types.ts +14 -16
  89. package/src/{core/tools/lsp → lsp}/utils.ts +1 -1
  90. package/src/main.ts +12 -12
  91. package/src/{core/mcp → mcp}/config.ts +8 -8
  92. package/src/{core/mcp → mcp}/loader.ts +5 -6
  93. package/src/{core/mcp → mcp}/manager.ts +2 -2
  94. package/src/{core/mcp → mcp}/tool-bridge.ts +35 -6
  95. package/src/{core/mcp → mcp}/tool-cache.ts +1 -1
  96. package/src/{core/mcp → mcp}/transports/http.ts +7 -1
  97. package/src/{core/mcp → mcp}/transports/stdio.ts +1 -1
  98. package/src/{core/mcp → mcp}/types.ts +1 -1
  99. package/src/migrations.ts +2 -2
  100. package/src/modes/{interactive/components → components}/armin.ts +1 -1
  101. package/src/modes/{interactive/components → components}/assistant-message.ts +1 -1
  102. package/src/modes/{interactive/components → components}/bash-execution.ts +37 -29
  103. package/src/modes/{interactive/components → components}/bordered-loader.ts +1 -1
  104. package/src/modes/{interactive/components → components}/branch-summary-message.ts +2 -2
  105. package/src/modes/{interactive/components → components}/compaction-summary-message.ts +2 -2
  106. package/src/modes/{interactive/components → components}/custom-message.ts +3 -3
  107. package/src/modes/{interactive/components → components}/diff.ts +1 -1
  108. package/src/modes/{interactive/components → components}/dynamic-border.ts +1 -1
  109. package/src/modes/{interactive/components → components}/extensions/extension-dashboard.ts +3 -3
  110. package/src/modes/{interactive/components → components}/extensions/extension-list.ts +2 -2
  111. package/src/modes/{interactive/components → components}/extensions/inspector-panel.ts +1 -1
  112. package/src/modes/{interactive/components → components}/extensions/state-manager.ts +11 -17
  113. package/src/modes/{interactive/components → components}/extensions/types.ts +1 -1
  114. package/src/modes/{interactive/components → components}/footer.ts +3 -3
  115. package/src/modes/{interactive/components → components}/history-search.ts +2 -2
  116. package/src/modes/{interactive/components → components}/hook-editor.ts +1 -1
  117. package/src/modes/{interactive/components → components}/hook-input.ts +1 -1
  118. package/src/modes/{interactive/components → components}/hook-message.ts +3 -3
  119. package/src/modes/{interactive/components → components}/hook-selector.ts +1 -1
  120. package/src/modes/{interactive/components → components}/keybinding-hints.ts +2 -2
  121. package/src/modes/{interactive/components → components}/login-dialog.ts +1 -1
  122. package/src/modes/{interactive/components → components}/model-selector.ts +5 -5
  123. package/src/modes/{interactive/components → components}/oauth-selector.ts +2 -2
  124. package/src/modes/{interactive/components → components}/plugin-settings.ts +3 -3
  125. package/src/modes/{interactive/components → components}/python-execution.ts +35 -24
  126. package/src/modes/{interactive/components → components}/queue-mode-selector.ts +1 -1
  127. package/src/modes/{interactive/components → components}/read-tool-group.ts +2 -2
  128. package/src/modes/{interactive/components → components}/session-selector.ts +3 -3
  129. package/src/modes/{interactive/components → components}/settings-defs.ts +2 -2
  130. package/src/modes/{interactive/components → components}/settings-selector.ts +2 -2
  131. package/src/modes/{interactive/components → components}/show-images-selector.ts +1 -1
  132. package/src/modes/{interactive/components → components}/status-line/segments.ts +2 -2
  133. package/src/modes/{interactive/components → components}/status-line/separators.ts +1 -1
  134. package/src/modes/{interactive/components → components}/status-line/types.ts +2 -2
  135. package/src/modes/{interactive/components → components}/status-line-segment-editor.ts +2 -2
  136. package/src/modes/{interactive/components → components}/status-line.ts +3 -3
  137. package/src/modes/{interactive/components → components}/theme-selector.ts +1 -1
  138. package/src/modes/{interactive/components → components}/thinking-selector.ts +1 -1
  139. package/src/modes/{interactive/components → components}/todo-display.ts +3 -4
  140. package/src/modes/{interactive/components → components}/todo-reminder.ts +2 -2
  141. package/src/modes/{interactive/components → components}/tool-execution.ts +8 -8
  142. package/src/modes/{interactive/components → components}/tree-selector.ts +3 -3
  143. package/src/modes/{interactive/components → components}/ttsr-notification.ts +2 -2
  144. package/src/modes/{interactive/components → components}/user-message-selector.ts +1 -1
  145. package/src/modes/{interactive/components → components}/user-message.ts +1 -1
  146. package/src/modes/{interactive/components → components}/welcome.ts +2 -2
  147. package/src/modes/{interactive/controllers → controllers}/command-controller.ts +32 -30
  148. package/src/modes/{interactive/controllers → controllers}/event-controller.ts +9 -9
  149. package/src/modes/{interactive/controllers → controllers}/extension-ui-controller.ts +8 -8
  150. package/src/modes/{interactive/controllers → controllers}/input-controller.ts +6 -6
  151. package/src/modes/{interactive/controllers → controllers}/selector-controller.ts +16 -16
  152. package/src/modes/index.ts +1 -1
  153. package/src/modes/{interactive/interactive-mode.ts → interactive-mode.ts} +14 -14
  154. package/src/modes/print-mode.ts +1 -1
  155. package/src/modes/rpc/rpc-client.ts +3 -3
  156. package/src/modes/rpc/rpc-mode.ts +3 -3
  157. package/src/modes/rpc/rpc-types.ts +3 -3
  158. package/src/modes/{interactive/theme → theme}/theme.ts +1 -1
  159. package/src/modes/{interactive/types.ts → types.ts} +8 -9
  160. package/src/modes/{interactive/utils → utils}/ui-helpers.ts +20 -27
  161. package/src/{core/tools/patch → patch}/applicator.ts +1 -1
  162. package/src/{core/tools/patch → patch}/diff.ts +1 -1
  163. package/src/{core/tools/patch → patch}/index.ts +31 -36
  164. package/src/{core/tools/patch → patch}/shared.ts +9 -6
  165. package/src/prompts/agents/explore.md +83 -46
  166. package/src/prompts/agents/init.md +9 -4
  167. package/src/prompts/agents/plan.md +8 -7
  168. package/src/prompts/agents/reviewer.md +36 -18
  169. package/src/prompts/agents/task.md +4 -4
  170. package/src/prompts/compaction/branch-summary-preamble.md +0 -1
  171. package/src/prompts/review-request.md +0 -1
  172. package/src/prompts/system/custom-system-prompt.md +2 -14
  173. package/src/prompts/system/file-operations.md +0 -2
  174. package/src/prompts/system/system-prompt.md +147 -138
  175. package/src/prompts/system/web-search.md +26 -0
  176. package/src/prompts/tools/ask.md +31 -24
  177. package/src/prompts/tools/bash.md +20 -17
  178. package/src/prompts/tools/calculator.md +9 -5
  179. package/src/prompts/tools/fetch.md +16 -0
  180. package/src/prompts/tools/find.md +15 -5
  181. package/src/prompts/tools/gemini-image.md +21 -6
  182. package/src/prompts/tools/grep.md +28 -12
  183. package/src/prompts/tools/lsp.md +35 -14
  184. package/src/prompts/tools/patch.md +39 -41
  185. package/src/prompts/tools/python.md +59 -76
  186. package/src/prompts/tools/read.md +23 -22
  187. package/src/prompts/tools/replace.md +19 -12
  188. package/src/prompts/tools/ssh.md +21 -28
  189. package/src/prompts/tools/task.md +54 -44
  190. package/src/prompts/tools/todo-write.md +52 -163
  191. package/src/prompts/tools/web-search.md +16 -9
  192. package/src/prompts/tools/write.md +13 -2
  193. package/src/{core/sdk.ts → sdk.ts} +65 -34
  194. package/src/{core → session}/agent-session.ts +45 -37
  195. package/src/{core → session}/agent-storage.ts +2 -2
  196. package/src/session/artifacts.ts +110 -0
  197. package/src/{core → session}/auth-storage.ts +1 -1
  198. package/src/{core → session}/compaction/branch-summarization.ts +5 -5
  199. package/src/{core → session}/compaction/compaction.ts +6 -6
  200. package/src/{core → session}/compaction/utils.ts +3 -3
  201. package/src/{core → session}/history-storage.ts +1 -1
  202. package/src/{core → session}/messages.ts +6 -8
  203. package/src/{core → session}/session-manager.ts +2 -2
  204. package/src/{core → session}/storage-migration.ts +2 -2
  205. package/src/session/streaming-output.ts +177 -0
  206. package/src/{core/ssh → ssh}/connection-manager.ts +1 -1
  207. package/src/{core/ssh → ssh}/ssh-executor.ts +19 -4
  208. package/src/{core/ssh → ssh}/sshfs-mount.ts +1 -1
  209. package/src/{core/system-prompt.ts → system-prompt.ts} +8 -37
  210. package/src/{core/tools/task → task}/agents.ts +8 -8
  211. package/src/{core/tools/task → task}/commands.ts +5 -6
  212. package/src/{core/tools/task → task}/discovery.ts +3 -3
  213. package/src/{core/tools/task → task}/executor.ts +34 -44
  214. package/src/{core/tools/task → task}/index.ts +206 -50
  215. package/src/{core/tools/task → task}/render.ts +80 -23
  216. package/src/{core/tools/task → task}/subprocess-tool-registry.ts +1 -1
  217. package/src/task/template.ts +47 -0
  218. package/src/{core/tools/task → task}/types.ts +19 -27
  219. package/src/{core/tools/task → task}/worker-protocol.ts +8 -4
  220. package/src/{core/tools/task → task}/worker.ts +34 -29
  221. package/src/task/worktree.ts +166 -0
  222. package/src/{core/tools → tools}/ask.ts +13 -21
  223. package/src/{core/tools → tools}/bash-interceptor.ts +1 -1
  224. package/src/{core/tools → tools}/bash.ts +61 -63
  225. package/src/{core/tools → tools}/calculator.ts +4 -4
  226. package/src/{core/tools → tools}/complete.ts +1 -1
  227. package/src/{core/tools → tools}/context.ts +2 -2
  228. package/src/{core/tools/web-fetch.ts → tools/fetch.ts} +97 -76
  229. package/src/{core/tools → tools}/find.ts +80 -104
  230. package/src/{core/tools → tools}/gemini-image.ts +420 -29
  231. package/src/{core/tools → tools}/grep.ts +155 -164
  232. package/src/{core/tools → tools}/index.ts +63 -56
  233. package/src/tools/list-limit.ts +40 -0
  234. package/src/{core/tools → tools}/ls.ts +44 -35
  235. package/src/{core/tools → tools}/notebook.ts +3 -3
  236. package/src/tools/output-meta.ts +443 -0
  237. package/src/tools/output-utils.ts +63 -0
  238. package/src/{core/tools → tools}/python.ts +105 -89
  239. package/src/tools/read.ts +882 -0
  240. package/src/{core/tools → tools}/render-utils.ts +1 -1
  241. package/src/{core/tools → tools}/renderers.ts +8 -10
  242. package/src/{core/tools → tools}/review.ts +2 -2
  243. package/src/{core/tools → tools}/ssh.ts +56 -59
  244. package/src/{core/tools → tools}/todo-write.ts +12 -23
  245. package/src/tools/tool-errors.ts +95 -0
  246. package/src/tools/tool-result.ts +92 -0
  247. package/src/{core/tools → tools}/truncate.ts +2 -2
  248. package/src/{core/tools → tools}/write.ts +15 -13
  249. package/src/utils/changelog.ts +1 -1
  250. package/src/{core → utils}/file-mentions.ts +4 -4
  251. package/src/utils/image-convert.ts +1 -1
  252. package/src/utils/image-resize.ts +1 -1
  253. package/src/utils/shell.ts +1 -1
  254. package/src/{core → utils}/title-generator.ts +4 -4
  255. package/src/utils/tools-manager.ts +1 -1
  256. package/src/{core/tools/web-scrapers → web/scrapers}/choosealicense.ts +1 -1
  257. package/src/{core/tools/web-scrapers → web/scrapers}/twitter.ts +3 -2
  258. package/src/{core/tools/web-scrapers → web/scrapers}/types.ts +4 -2
  259. package/src/{core/tools/web-scrapers → web/scrapers}/utils.ts +1 -1
  260. package/src/{core/tools/web-scrapers → web/scrapers}/youtube.ts +14 -13
  261. package/src/{core/tools/web-search → web/search}/auth.ts +4 -4
  262. package/src/{core/tools/web-search → web/search}/index.ts +22 -71
  263. package/src/{core/tools/web-search → web/search}/providers/anthropic.ts +7 -10
  264. package/src/{core/tools/web-search → web/search}/providers/exa.ts +2 -2
  265. package/src/{core/tools/web-search → web/search}/providers/perplexity.ts +4 -16
  266. package/src/{core/tools/web-search → web/search}/render.ts +3 -3
  267. package/scripts/migrate-sessions.sh +0 -93
  268. package/src/core/index.ts +0 -56
  269. package/src/core/python-prelude.ts +0 -3
  270. package/src/core/ssh-executor.ts +0 -5
  271. package/src/core/streaming-output.ts +0 -115
  272. package/src/core/tools/output.ts +0 -519
  273. package/src/core/tools/read.ts +0 -717
  274. package/src/core/tools/task/template.ts +0 -37
  275. package/src/prompts/tools/output.md +0 -47
  276. package/src/prompts/tools/web-fetch.md +0 -9
  277. /package/src/{core/tools/exa → exa}/types.ts +0 -0
  278. /package/src/{core → exec}/exec.ts +0 -0
  279. /package/src/{core/export-html → export/html}/template.css +0 -0
  280. /package/src/{core/export-html → export/html}/template.generated.ts +0 -0
  281. /package/src/{core/export-html → export/html}/template.html +0 -0
  282. /package/src/{core/export-html → export/html}/template.js +0 -0
  283. /package/src/{core/export-html → export/html}/template.macro.ts +0 -0
  284. /package/src/{core/export-html → export/html}/vendor/highlight.min.js +0 -0
  285. /package/src/{core/export-html → export/html}/vendor/marked.min.js +0 -0
  286. /package/src/{core → extensibility}/custom-commands/index.ts +0 -0
  287. /package/src/{core → extensibility}/custom-tools/index.ts +0 -0
  288. /package/src/{core → extensibility}/extensions/index.ts +0 -0
  289. /package/src/{core → extensibility}/hooks/tool-wrapper.ts +0 -0
  290. /package/src/{core → extensibility}/plugins/index.ts +0 -0
  291. /package/src/{core → extensibility}/plugins/loader.ts +0 -0
  292. /package/src/{core → extensibility}/plugins/manager.ts +0 -0
  293. /package/src/{core → extensibility}/plugins/parser.ts +0 -0
  294. /package/src/{core → extensibility}/plugins/types.ts +0 -0
  295. /package/src/{core/python-modules.ts → ipy/modules.ts} +0 -0
  296. /package/src/{core/python-prelude.py → ipy/prelude.py} +0 -0
  297. /package/src/{core/tools/lsp → lsp}/defaults.json +0 -0
  298. /package/src/{core/tools/lsp → lsp}/edits.ts +0 -0
  299. /package/src/{core/tools/lsp → lsp}/lspmux.ts +0 -0
  300. /package/src/{core/tools/lsp → lsp}/rust-analyzer.ts +0 -0
  301. /package/src/{core/mcp → mcp}/client.ts +0 -0
  302. /package/src/{core/mcp → mcp}/index.ts +0 -0
  303. /package/src/{core/mcp → mcp}/json-rpc.ts +0 -0
  304. /package/src/{core/mcp → mcp}/transports/index.ts +0 -0
  305. /package/src/modes/{interactive/components → components}/countdown-timer.ts +0 -0
  306. /package/src/modes/{interactive/components → components}/custom-editor.ts +0 -0
  307. /package/src/modes/{interactive/components → components}/extensions/index.ts +0 -0
  308. /package/src/modes/{interactive/components → components}/index.ts +0 -0
  309. /package/src/modes/{interactive/components → components}/status-line/index.ts +0 -0
  310. /package/src/modes/{interactive/components → components}/status-line/presets.ts +0 -0
  311. /package/src/modes/{interactive/components → components}/visual-truncate.ts +0 -0
  312. /package/src/modes/{interactive/theme → theme}/dark.json +0 -0
  313. /package/src/modes/{interactive/theme → theme}/defaults/alabaster.json +0 -0
  314. /package/src/modes/{interactive/theme → theme}/defaults/amethyst.json +0 -0
  315. /package/src/modes/{interactive/theme → theme}/defaults/anthracite.json +0 -0
  316. /package/src/modes/{interactive/theme → theme}/defaults/basalt.json +0 -0
  317. /package/src/modes/{interactive/theme → theme}/defaults/birch.json +0 -0
  318. /package/src/modes/{interactive/theme → theme}/defaults/dark-abyss.json +0 -0
  319. /package/src/modes/{interactive/theme → theme}/defaults/dark-arctic.json +0 -0
  320. /package/src/modes/{interactive/theme → theme}/defaults/dark-aurora.json +0 -0
  321. /package/src/modes/{interactive/theme → theme}/defaults/dark-catppuccin.json +0 -0
  322. /package/src/modes/{interactive/theme → theme}/defaults/dark-cavern.json +0 -0
  323. /package/src/modes/{interactive/theme → theme}/defaults/dark-copper.json +0 -0
  324. /package/src/modes/{interactive/theme → theme}/defaults/dark-cosmos.json +0 -0
  325. /package/src/modes/{interactive/theme → theme}/defaults/dark-cyberpunk.json +0 -0
  326. /package/src/modes/{interactive/theme → theme}/defaults/dark-dracula.json +0 -0
  327. /package/src/modes/{interactive/theme → theme}/defaults/dark-eclipse.json +0 -0
  328. /package/src/modes/{interactive/theme → theme}/defaults/dark-ember.json +0 -0
  329. /package/src/modes/{interactive/theme → theme}/defaults/dark-equinox.json +0 -0
  330. /package/src/modes/{interactive/theme → theme}/defaults/dark-forest.json +0 -0
  331. /package/src/modes/{interactive/theme → theme}/defaults/dark-github.json +0 -0
  332. /package/src/modes/{interactive/theme → theme}/defaults/dark-gruvbox.json +0 -0
  333. /package/src/modes/{interactive/theme → theme}/defaults/dark-lavender.json +0 -0
  334. /package/src/modes/{interactive/theme → theme}/defaults/dark-lunar.json +0 -0
  335. /package/src/modes/{interactive/theme → theme}/defaults/dark-midnight.json +0 -0
  336. /package/src/modes/{interactive/theme → theme}/defaults/dark-monochrome.json +0 -0
  337. /package/src/modes/{interactive/theme → theme}/defaults/dark-monokai.json +0 -0
  338. /package/src/modes/{interactive/theme → theme}/defaults/dark-nebula.json +0 -0
  339. /package/src/modes/{interactive/theme → theme}/defaults/dark-nord.json +0 -0
  340. /package/src/modes/{interactive/theme → theme}/defaults/dark-ocean.json +0 -0
  341. /package/src/modes/{interactive/theme → theme}/defaults/dark-one.json +0 -0
  342. /package/src/modes/{interactive/theme → theme}/defaults/dark-rainforest.json +0 -0
  343. /package/src/modes/{interactive/theme → theme}/defaults/dark-reef.json +0 -0
  344. /package/src/modes/{interactive/theme → theme}/defaults/dark-retro.json +0 -0
  345. /package/src/modes/{interactive/theme → theme}/defaults/dark-rose-pine.json +0 -0
  346. /package/src/modes/{interactive/theme → theme}/defaults/dark-sakura.json +0 -0
  347. /package/src/modes/{interactive/theme → theme}/defaults/dark-slate.json +0 -0
  348. /package/src/modes/{interactive/theme → theme}/defaults/dark-solarized.json +0 -0
  349. /package/src/modes/{interactive/theme → theme}/defaults/dark-solstice.json +0 -0
  350. /package/src/modes/{interactive/theme → theme}/defaults/dark-starfall.json +0 -0
  351. /package/src/modes/{interactive/theme → theme}/defaults/dark-sunset.json +0 -0
  352. /package/src/modes/{interactive/theme → theme}/defaults/dark-swamp.json +0 -0
  353. /package/src/modes/{interactive/theme → theme}/defaults/dark-synthwave.json +0 -0
  354. /package/src/modes/{interactive/theme → theme}/defaults/dark-taiga.json +0 -0
  355. /package/src/modes/{interactive/theme → theme}/defaults/dark-terminal.json +0 -0
  356. /package/src/modes/{interactive/theme → theme}/defaults/dark-tokyo-night.json +0 -0
  357. /package/src/modes/{interactive/theme → theme}/defaults/dark-tundra.json +0 -0
  358. /package/src/modes/{interactive/theme → theme}/defaults/dark-twilight.json +0 -0
  359. /package/src/modes/{interactive/theme → theme}/defaults/dark-volcanic.json +0 -0
  360. /package/src/modes/{interactive/theme → theme}/defaults/graphite.json +0 -0
  361. /package/src/modes/{interactive/theme → theme}/defaults/index.ts +0 -0
  362. /package/src/modes/{interactive/theme → theme}/defaults/light-arctic.json +0 -0
  363. /package/src/modes/{interactive/theme → theme}/defaults/light-aurora-day.json +0 -0
  364. /package/src/modes/{interactive/theme → theme}/defaults/light-canyon.json +0 -0
  365. /package/src/modes/{interactive/theme → theme}/defaults/light-catppuccin.json +0 -0
  366. /package/src/modes/{interactive/theme → theme}/defaults/light-cirrus.json +0 -0
  367. /package/src/modes/{interactive/theme → theme}/defaults/light-coral.json +0 -0
  368. /package/src/modes/{interactive/theme → theme}/defaults/light-cyberpunk.json +0 -0
  369. /package/src/modes/{interactive/theme → theme}/defaults/light-dawn.json +0 -0
  370. /package/src/modes/{interactive/theme → theme}/defaults/light-dunes.json +0 -0
  371. /package/src/modes/{interactive/theme → theme}/defaults/light-eucalyptus.json +0 -0
  372. /package/src/modes/{interactive/theme → theme}/defaults/light-forest.json +0 -0
  373. /package/src/modes/{interactive/theme → theme}/defaults/light-frost.json +0 -0
  374. /package/src/modes/{interactive/theme → theme}/defaults/light-github.json +0 -0
  375. /package/src/modes/{interactive/theme → theme}/defaults/light-glacier.json +0 -0
  376. /package/src/modes/{interactive/theme → theme}/defaults/light-gruvbox.json +0 -0
  377. /package/src/modes/{interactive/theme → theme}/defaults/light-haze.json +0 -0
  378. /package/src/modes/{interactive/theme → theme}/defaults/light-honeycomb.json +0 -0
  379. /package/src/modes/{interactive/theme → theme}/defaults/light-lagoon.json +0 -0
  380. /package/src/modes/{interactive/theme → theme}/defaults/light-lavender.json +0 -0
  381. /package/src/modes/{interactive/theme → theme}/defaults/light-meadow.json +0 -0
  382. /package/src/modes/{interactive/theme → theme}/defaults/light-mint.json +0 -0
  383. /package/src/modes/{interactive/theme → theme}/defaults/light-monochrome.json +0 -0
  384. /package/src/modes/{interactive/theme → theme}/defaults/light-ocean.json +0 -0
  385. /package/src/modes/{interactive/theme → theme}/defaults/light-one.json +0 -0
  386. /package/src/modes/{interactive/theme → theme}/defaults/light-opal.json +0 -0
  387. /package/src/modes/{interactive/theme → theme}/defaults/light-orchard.json +0 -0
  388. /package/src/modes/{interactive/theme → theme}/defaults/light-paper.json +0 -0
  389. /package/src/modes/{interactive/theme → theme}/defaults/light-prism.json +0 -0
  390. /package/src/modes/{interactive/theme → theme}/defaults/light-retro.json +0 -0
  391. /package/src/modes/{interactive/theme → theme}/defaults/light-sand.json +0 -0
  392. /package/src/modes/{interactive/theme → theme}/defaults/light-savanna.json +0 -0
  393. /package/src/modes/{interactive/theme → theme}/defaults/light-solarized.json +0 -0
  394. /package/src/modes/{interactive/theme → theme}/defaults/light-soleil.json +0 -0
  395. /package/src/modes/{interactive/theme → theme}/defaults/light-sunset.json +0 -0
  396. /package/src/modes/{interactive/theme → theme}/defaults/light-synthwave.json +0 -0
  397. /package/src/modes/{interactive/theme → theme}/defaults/light-tokyo-night.json +0 -0
  398. /package/src/modes/{interactive/theme → theme}/defaults/light-wetland.json +0 -0
  399. /package/src/modes/{interactive/theme → theme}/defaults/light-zenith.json +0 -0
  400. /package/src/modes/{interactive/theme → theme}/defaults/limestone.json +0 -0
  401. /package/src/modes/{interactive/theme → theme}/defaults/mahogany.json +0 -0
  402. /package/src/modes/{interactive/theme → theme}/defaults/marble.json +0 -0
  403. /package/src/modes/{interactive/theme → theme}/defaults/obsidian.json +0 -0
  404. /package/src/modes/{interactive/theme → theme}/defaults/onyx.json +0 -0
  405. /package/src/modes/{interactive/theme → theme}/defaults/pearl.json +0 -0
  406. /package/src/modes/{interactive/theme → theme}/defaults/porcelain.json +0 -0
  407. /package/src/modes/{interactive/theme → theme}/defaults/quartz.json +0 -0
  408. /package/src/modes/{interactive/theme → theme}/defaults/sandstone.json +0 -0
  409. /package/src/modes/{interactive/theme → theme}/defaults/titanium.json +0 -0
  410. /package/src/modes/{interactive/theme → theme}/light.json +0 -0
  411. /package/src/modes/{interactive/theme → theme}/theme-schema.json +0 -0
  412. /package/src/{core/tools/patch → patch}/fuzzy.ts +0 -0
  413. /package/src/{core/tools/patch → patch}/normalize.ts +0 -0
  414. /package/src/{core/tools/patch → patch}/normative.ts +0 -0
  415. /package/src/{core/tools/patch → patch}/parser.ts +0 -0
  416. /package/src/{core/tools/patch → patch}/types.ts +0 -0
  417. /package/src/{core → session}/compaction/index.ts +0 -0
  418. /package/src/{core → session}/session-storage.ts +0 -0
  419. /package/src/{core/tools/task → task}/name-generator.ts +0 -0
  420. /package/src/{core/tools/task → task}/omp-command.ts +0 -0
  421. /package/src/{core/tools/task → task}/parallel.ts +0 -0
  422. /package/src/{core/tools → tools}/jtd-to-json-schema.ts +0 -0
  423. /package/src/{core/tools → tools}/path-utils.ts +0 -0
  424. /package/src/{core → utils}/event-bus.ts +0 -0
  425. /package/src/{core → utils}/frontmatter.ts +0 -0
  426. /package/src/{core → utils}/terminal-notify.ts +0 -0
  427. /package/src/{core → utils}/timings.ts +0 -0
  428. /package/src/{core → utils}/utils.ts +0 -0
  429. /package/src/{core/tools/web-scrapers → web/scrapers}/artifacthub.ts +0 -0
  430. /package/src/{core/tools/web-scrapers → web/scrapers}/arxiv.ts +0 -0
  431. /package/src/{core/tools/web-scrapers → web/scrapers}/aur.ts +0 -0
  432. /package/src/{core/tools/web-scrapers → web/scrapers}/biorxiv.ts +0 -0
  433. /package/src/{core/tools/web-scrapers → web/scrapers}/bluesky.ts +0 -0
  434. /package/src/{core/tools/web-scrapers → web/scrapers}/brew.ts +0 -0
  435. /package/src/{core/tools/web-scrapers → web/scrapers}/cheatsh.ts +0 -0
  436. /package/src/{core/tools/web-scrapers → web/scrapers}/chocolatey.ts +0 -0
  437. /package/src/{core/tools/web-scrapers → web/scrapers}/cisa-kev.ts +0 -0
  438. /package/src/{core/tools/web-scrapers → web/scrapers}/clojars.ts +0 -0
  439. /package/src/{core/tools/web-scrapers → web/scrapers}/coingecko.ts +0 -0
  440. /package/src/{core/tools/web-scrapers → web/scrapers}/crates-io.ts +0 -0
  441. /package/src/{core/tools/web-scrapers → web/scrapers}/crossref.ts +0 -0
  442. /package/src/{core/tools/web-scrapers → web/scrapers}/devto.ts +0 -0
  443. /package/src/{core/tools/web-scrapers → web/scrapers}/discogs.ts +0 -0
  444. /package/src/{core/tools/web-scrapers → web/scrapers}/discourse.ts +0 -0
  445. /package/src/{core/tools/web-scrapers → web/scrapers}/dockerhub.ts +0 -0
  446. /package/src/{core/tools/web-scrapers → web/scrapers}/fdroid.ts +0 -0
  447. /package/src/{core/tools/web-scrapers → web/scrapers}/firefox-addons.ts +0 -0
  448. /package/src/{core/tools/web-scrapers → web/scrapers}/flathub.ts +0 -0
  449. /package/src/{core/tools/web-scrapers → web/scrapers}/github-gist.ts +0 -0
  450. /package/src/{core/tools/web-scrapers → web/scrapers}/github.ts +0 -0
  451. /package/src/{core/tools/web-scrapers → web/scrapers}/gitlab.ts +0 -0
  452. /package/src/{core/tools/web-scrapers → web/scrapers}/go-pkg.ts +0 -0
  453. /package/src/{core/tools/web-scrapers → web/scrapers}/hackage.ts +0 -0
  454. /package/src/{core/tools/web-scrapers → web/scrapers}/hackernews.ts +0 -0
  455. /package/src/{core/tools/web-scrapers → web/scrapers}/hex.ts +0 -0
  456. /package/src/{core/tools/web-scrapers → web/scrapers}/huggingface.ts +0 -0
  457. /package/src/{core/tools/web-scrapers → web/scrapers}/iacr.ts +0 -0
  458. /package/src/{core/tools/web-scrapers → web/scrapers}/index.ts +0 -0
  459. /package/src/{core/tools/web-scrapers → web/scrapers}/jetbrains-marketplace.ts +0 -0
  460. /package/src/{core/tools/web-scrapers → web/scrapers}/lemmy.ts +0 -0
  461. /package/src/{core/tools/web-scrapers → web/scrapers}/lobsters.ts +0 -0
  462. /package/src/{core/tools/web-scrapers → web/scrapers}/mastodon.ts +0 -0
  463. /package/src/{core/tools/web-scrapers → web/scrapers}/maven.ts +0 -0
  464. /package/src/{core/tools/web-scrapers → web/scrapers}/mdn.ts +0 -0
  465. /package/src/{core/tools/web-scrapers → web/scrapers}/metacpan.ts +0 -0
  466. /package/src/{core/tools/web-scrapers → web/scrapers}/musicbrainz.ts +0 -0
  467. /package/src/{core/tools/web-scrapers → web/scrapers}/npm.ts +0 -0
  468. /package/src/{core/tools/web-scrapers → web/scrapers}/nuget.ts +0 -0
  469. /package/src/{core/tools/web-scrapers → web/scrapers}/nvd.ts +0 -0
  470. /package/src/{core/tools/web-scrapers → web/scrapers}/ollama.ts +0 -0
  471. /package/src/{core/tools/web-scrapers → web/scrapers}/open-vsx.ts +0 -0
  472. /package/src/{core/tools/web-scrapers → web/scrapers}/opencorporates.ts +0 -0
  473. /package/src/{core/tools/web-scrapers → web/scrapers}/openlibrary.ts +0 -0
  474. /package/src/{core/tools/web-scrapers → web/scrapers}/orcid.ts +0 -0
  475. /package/src/{core/tools/web-scrapers → web/scrapers}/osv.ts +0 -0
  476. /package/src/{core/tools/web-scrapers → web/scrapers}/packagist.ts +0 -0
  477. /package/src/{core/tools/web-scrapers → web/scrapers}/pub-dev.ts +0 -0
  478. /package/src/{core/tools/web-scrapers → web/scrapers}/pubmed.ts +0 -0
  479. /package/src/{core/tools/web-scrapers → web/scrapers}/pypi.ts +0 -0
  480. /package/src/{core/tools/web-scrapers → web/scrapers}/rawg.ts +0 -0
  481. /package/src/{core/tools/web-scrapers → web/scrapers}/readthedocs.ts +0 -0
  482. /package/src/{core/tools/web-scrapers → web/scrapers}/reddit.ts +0 -0
  483. /package/src/{core/tools/web-scrapers → web/scrapers}/repology.ts +0 -0
  484. /package/src/{core/tools/web-scrapers → web/scrapers}/rfc.ts +0 -0
  485. /package/src/{core/tools/web-scrapers → web/scrapers}/rubygems.ts +0 -0
  486. /package/src/{core/tools/web-scrapers → web/scrapers}/searchcode.ts +0 -0
  487. /package/src/{core/tools/web-scrapers → web/scrapers}/sec-edgar.ts +0 -0
  488. /package/src/{core/tools/web-scrapers → web/scrapers}/semantic-scholar.ts +0 -0
  489. /package/src/{core/tools/web-scrapers → web/scrapers}/snapcraft.ts +0 -0
  490. /package/src/{core/tools/web-scrapers → web/scrapers}/sourcegraph.ts +0 -0
  491. /package/src/{core/tools/web-scrapers → web/scrapers}/spdx.ts +0 -0
  492. /package/src/{core/tools/web-scrapers → web/scrapers}/spotify.ts +0 -0
  493. /package/src/{core/tools/web-scrapers → web/scrapers}/stackoverflow.ts +0 -0
  494. /package/src/{core/tools/web-scrapers → web/scrapers}/terraform.ts +0 -0
  495. /package/src/{core/tools/web-scrapers → web/scrapers}/tldr.ts +0 -0
  496. /package/src/{core/tools/web-scrapers → web/scrapers}/vimeo.ts +0 -0
  497. /package/src/{core/tools/web-scrapers → web/scrapers}/vscode-marketplace.ts +0 -0
  498. /package/src/{core/tools/web-scrapers → web/scrapers}/w3c.ts +0 -0
  499. /package/src/{core/tools/web-scrapers → web/scrapers}/wikidata.ts +0 -0
  500. /package/src/{core/tools/web-scrapers → web/scrapers}/wikipedia.ts +0 -0
  501. /package/src/{core/tools/web-search → web/search}/types.ts +0 -0
@@ -1,6 +1,16 @@
1
- - Fast file pattern matching tool that works with any codebase size
1
+ # Find
2
+
3
+ Fast file pattern matching that works with any codebase size.
4
+
5
+ <instruction>
2
6
  - Supports glob patterns like "**/*.js" or "src/**/*.ts"
3
- - Returns matching file paths sorted by modification time
4
- - Use this tool when you need to find files by name patterns
5
- - When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead
6
- - You can call multiple tools in a single response. It is always better to speculatively perform multiple searches in parallel if they are potentially useful.
7
+ - Speculatively perform multiple searches in parallel when potentially useful
8
+ </instruction>
9
+
10
+ <output>
11
+ Matching file paths sorted by modification time (most recent first). Results truncated at 1000 entries or 50KB.
12
+ </output>
13
+
14
+ <avoid>
15
+ Open-ended searches requiring multiple rounds of globbing and grepping — use Task tool instead.
16
+ </avoid>
@@ -1,8 +1,23 @@
1
- Generate or edit images using Gemini image models directly or via OpenRouter.
1
+ # Gemini Image
2
2
 
3
- Provide a text prompt and optional input images. Use response modalities to request image-only output,
4
- set aspect ratio or image size, and choose the model explicitly when needed.
3
+ Generate or edit images using Gemini image models.
5
4
 
6
- Prompt tips:
7
- - Describe subject, composition, style, and lighting in full sentences.
8
- - For edits, reference the input image and specify the exact changes.
5
+ <instruction>
6
+ Provide structured parameters for best results. The tool assembles them into an optimized prompt.
7
+
8
+ When using multiple `input_images`, describe each image's role in the `subject` or `scene` field:
9
+ - "Use Image 1 for the character's face and outfit, Image 2 for the pose, Image 3 for the background environment"
10
+ - "Match the color palette from Image 1, apply the lighting style from Image 2"
11
+ </instruction>
12
+
13
+ <output>
14
+ Returns the generated image saved to disk. The response includes the file path where the image was written.
15
+ </output>
16
+
17
+ <important>
18
+ - For photoreal: add "ultra-detailed, realistic, natural skin texture" to style
19
+ - For posters/cards: use 9:16 aspect ratio with negative space for text placement
20
+ - For iteration: use `changes` to make targeted adjustments rather than regenerating from scratch
21
+ - For text: add "sharp, legible, correctly spelled" for important text; keep text short
22
+ - For diagrams: include "scientifically accurate" in style and provide facts explicitly
23
+ </important>
@@ -1,12 +1,28 @@
1
- A powerful search tool built on ripgrep
2
-
3
- Usage:
4
- - ALWAYS use Grep for search tasks. NEVER invoke `grep` or `rg` as a Bash command. The Grep tool has been optimized for correct permissions and access.
5
- - Supports full regex syntax (e.g., "log.*Error", "function\\s+\\w+")
6
- - Filter files with glob parameter (e.g., "*.js", "**/*.tsx") or type parameter (e.g., "js", "py", "rust")
7
- - Output modes: "content" shows matching lines, "files_with_matches" shows only file paths (default), "count" shows match counts
8
- - Pattern syntax: Uses ripgrep (not grep) - literal braces need escaping (use `interface\\{\\}` to find `interface{}` in Go code)
9
- - Multiline matching: By default patterns match within single lines only. For cross-line patterns like `struct \\{[\\s\\S]*?field`, use `multiline: true`
10
-
11
- Important:
12
- - ALWAYS Use Task tool with explore subagent over this for open-ended searches requiring multiple rounds
1
+ # Grep
2
+
3
+ A powerful search tool built on ripgrep.
4
+
5
+ <instruction>
6
+ - Supports full regex syntax (e.g., `log.*Error`, `function\\s+\\w+`)
7
+ - Filter files with `glob` (e.g., `*.js`, `**/*.tsx`) or `type` (e.g., `js`, `py`, `rust`)
8
+ - Pattern syntax uses ripgrepliteral braces need escaping (`interface\\{\\}` to find `interface{}` in Go)
9
+ - For cross-line patterns like `struct \\{[\\s\\S]*?field`, use `multiline: true`
10
+ </instruction>
11
+
12
+ <output>
13
+ Results depend on `output_mode`:
14
+ - `content`: Matching lines with file paths and line numbers
15
+ - `files_with_matches`: File paths only (one per line)
16
+ - `count`: Match counts per file
17
+
18
+ In `content` mode, truncated at 100 matches by default (configurable via `limit`).
19
+ For `files_with_matches` and `count` modes, use `head_limit` to truncate results.
20
+ </output>
21
+
22
+ <critical>
23
+ - ALWAYS use Grep for search tasks—NEVER invoke `grep` or `rg` via Bash. This tool has correct permissions and access.
24
+ </critical>
25
+
26
+ <avoid>
27
+ - Open-ended searches requiring multiple rounds—use Task tool with explore subagent instead
28
+ </avoid>
@@ -1,14 +1,35 @@
1
- Interact with Language Server Protocol (LSP) servers to get code intelligence features.
2
-
3
- Standard operations:
4
- - diagnostics: Get errors/warnings for a file
5
- - workspace_diagnostics: Check entire project for errors (uses tsc, cargo check, go build, etc.)
6
- - definition: Go to symbol definition
7
- - references: Find all references to a symbol
8
- - hover: Get type info and documentation
9
- - symbols: List symbols in a file (functions, classes, etc.)
10
- - workspace_symbols: Search for symbols across the project
11
- - rename: Rename a symbol across the codebase
12
- - actions: List and apply code actions (quick fixes, refactors)
13
- - incoming_calls: Find all callers of a function
14
- - outgoing_calls: Find all functions called by a function
1
+ # LSP
2
+
3
+ Interact with Language Server Protocol servers for code intelligence.
4
+
5
+ <operations>
6
+ - `diagnostics`: Get errors/warnings for a file
7
+ - `workspace_diagnostics`: Check entire project (uses tsc, cargo check, go build, etc.)
8
+ - `definition`: Go to symbol definition
9
+ - `references`: Find all references to a symbol
10
+ - `hover`: Get type info and documentation
11
+ - `symbols`: List symbols in a file (functions, classes, etc.)
12
+ - `workspace_symbols`: Search for symbols across the project
13
+ - `rename`: Rename a symbol across the codebase
14
+ - `actions`: List and apply code actions (quick fixes, refactors)
15
+ - `incoming_calls`: Find all callers of a function
16
+ - `outgoing_calls`: Find all functions called by a function
17
+ </operations>
18
+
19
+ <output>
20
+ Returns vary by operation:
21
+ - `diagnostics`/`workspace_diagnostics`: List of errors/warnings with file, line, severity, message
22
+ - `definition`: File path and position of the definition
23
+ - `references`: List of locations (file + position) where symbol is used
24
+ - `hover`: Type signature and documentation text
25
+ - `symbols`/`workspace_symbols`: List of symbol names, kinds, and locations
26
+ - `rename`: Confirmation of changes made across files
27
+ - `actions`: List of available code actions; when applied, returns the result
28
+ - `incoming_calls`/`outgoing_calls`: Call hierarchy with caller/callee locations
29
+ </output>
30
+
31
+ <important>
32
+ - Requires a running LSP server for the target language
33
+ - Some operations require the file to be saved to disk
34
+ - `workspace_diagnostics` may be slow on large projects
35
+ </important>
@@ -1,15 +1,29 @@
1
- Performs patch operations on a file given a diff.
2
- This is your primary tool for making changes to existing files.
1
+ # Edit
3
2
 
4
- <critical>
5
- - Always read the target file before editing.
6
- - Copy anchors + context lines verbatim (including whitespace).
7
- - Output the clean patch format below.
8
- </critical>
3
+ Performs patch operations on a file given a diff. Primary tool for modifying existing files.
4
+
5
+ <instruction>
6
+ **Hunk Headers:**
7
+ - `@@` — bare header when context lines are already unique
8
+ - `@@ $ANCHOR` — anchor must be copied verbatim from the file (full line or unique substring)
9
+
10
+ **Anchor Selection Algorithm:**
11
+ 1. If surrounding context lines are already unique, use bare `@@`
12
+ 2. Otherwise choose a highly specific anchor copied from the file:
13
+ - full function signature line
14
+ - class declaration line
15
+ - unique string literal / error message
16
+ - config key with uncommon name
17
+ 3. If "Found multiple matches" error: add more context lines, use multiple hunks with separate anchors, or use a longer anchor substring
18
+
19
+ **Context Lines:**
20
+ - Include enough ` `-prefixed lines to make match unique (usually 2–8 total)
21
+ - Must exist in the file exactly as written (preserve indentation/trailing spaces)
22
+ </instruction>
9
23
 
10
24
  <parameters>
11
25
  ```ts
12
- type T =
26
+ type T =
13
27
  // Diff is one or more hunks, within the same file.
14
28
  // - Each hunk begins with "@@" (optionally with an anchor).
15
29
  // - Each hunk body contains only lines starting with: ' ' | '+' | '-'.
@@ -24,40 +38,18 @@ type T =
24
38
  ```
25
39
  </parameters>
26
40
 
27
- <hunk_header>
28
- Allowed:
29
- - `@@`
30
- - `@@ $ANCHOR`
41
+ <output>
42
+ Returns success/failure status. On failure, returns error message indicating:
43
+ - "Found multiple matches" — anchor/context not unique enough
44
+ - "No match found" — context lines don't exist in file (wrong content or stale read)
45
+ - Syntax errors in diff format
46
+ </output>
31
47
 
32
- ANCHOR RULES:
33
- - `$ANCHOR` MUST be copied verbatim from the file as either:
34
- - a full existing line, OR
35
- - a unique substring of a single existing line.
36
- - NEVER use it as a comment:
37
- - line numbers / ranges: `line 207`, `lines 26-37`
38
- - location labels: `top of file`, `start`, `near imports`
39
- - placeholders: `@@ @@`, `...`
40
- </hunk_header>
41
-
42
- <anchor_selection>
43
- ANCHOR SELECTION ALGORITHM (use in this order):
44
- 1) If the surrounding context lines are already unique in the file, use bare `@@`.
45
- 2) Else choose an anchor that is highly specific and stable, copied from the file, e.g.:
46
- - full function signature line
47
- - class declaration line
48
- - a unique string literal / error message
49
- - a config key with uncommon name
50
- 3) If you get "Found multiple matches", escalate by:
51
- - adding more context lines, OR
52
- - using multiple hunks with separate nearby anchors, OR
53
- - using a more specific anchor substring (longer, includes identifiers).
54
- NEVER use generic anchors like `import`, `export`, `describe`, `function`, `const`.
55
- </anchor_selection>
56
-
57
- <context_rules>
58
- - Include enough context lines (' ' prefixed) to make the match unique (usually 2–8 total).
59
- - Context lines must exist in the file exactly as written; preserve indentation/trailing spaces.
60
- </context_rules>
48
+ <critical>
49
+ - Always read the target file before editing
50
+ - Copy anchors and context lines verbatim (including whitespace)
51
+ - Never use anchors as comments (no line numbers, location labels, or placeholders like `@@ @@`)
52
+ </critical>
61
53
 
62
54
  <example name="create">
63
55
  edit {"path":"hello.txt","op":"create","diff":"Hello\n"}
@@ -74,3 +66,9 @@ edit {"path":"src/app.py","op":"update","rename":"src/main.py","diff":"@@\n ...\
74
66
  <example name="delete">
75
67
  edit {"path":"obsolete.txt","op":"delete"}
76
68
  </example>
69
+
70
+ <avoid>
71
+ - Generic anchors: `import`, `export`, `describe`, `function`, `const`
72
+ - Anchor comments: `line 207`, `top of file`, `near imports`, `...`
73
+ - Editing without reading the file first (causes stale context errors)
74
+ </avoid>
@@ -1,7 +1,8 @@
1
- Executes Python cells sequentially in a persistent IPython kernel.
1
+ # Python
2
2
 
3
- ## How to use (REPL discipline)
3
+ Executes Python cells sequentially in a persistent IPython kernel.
4
4
 
5
+ <instruction>
5
6
  The kernel persists between calls and between cells. **Imports, variables, and functions survive.** Use this.
6
7
 
7
8
  **Work incrementally:**
@@ -15,64 +16,9 @@ The kernel persists between calls and between cells. **Imports, variables, and f
15
16
  - Earlier cells already ran—their state persists in the kernel
16
17
  - Resubmit with only the fixed cell (or the fixed cell + remaining cells)
17
18
  - Do NOT rewrite working cells or re-import modules
19
+ </instruction>
18
20
 
19
- **Anti-patterns to avoid:**
20
- - Putting everything in one giant cell
21
- - Re-importing modules you already imported
22
- - Rewriting working code when only one part failed
23
- - Large functions that are hard to debug piece by piece
24
-
25
- ```python
26
- # BAD: One giant cell
27
- cells: [{
28
- "title": "all-in-one",
29
- "code": "import json\nfrom pathlib import Path\ndef process_all_files():\n # 50 lines...\n pass\nresult = process_all_files()"
30
- }]
31
-
32
- # GOOD: Multiple small cells
33
- cells: [
34
- {"title": "imports", "code": "import json\nfrom pathlib import Path"},
35
- {"title": "parse helper", "code": "def parse_config(path):\n return json.loads(Path(path).read_text())"},
36
- {"title": "test helper", "code": "parse_config('config.json')"},
37
- {"title": "use helper", "code": "configs = [parse_config(p) for p in Path('.').glob('*.json')]"}
38
- ]
39
- ```
40
-
41
- ## When to use Python
42
-
43
- **Use Python for user-facing operations:**
44
- - Displaying, concatenating, or merging files → `cat(*paths)`
45
- - Batch transformations across files → `batch(paths, fn)`, `rsed()`
46
- - Formatted output, tables, summaries
47
- - Any loop, conditional, or multi-step logic
48
- - Anything you'd write a bash script for
49
-
50
- **Use specialized tools for YOUR reconnaissance:**
51
- - Reading to understand code → Read tool
52
- - Searching to locate something → Grep tool
53
- - Finding files to identify targets → Find tool
54
-
55
- The distinction: Read/Grep/Find gather info for *your* decisions. Python executes *the user's* request.
56
-
57
- **Prefer Python over bash for:**
58
- - Loops and iteration → Python for-loops, not bash for/while
59
- - Text processing → `sed()`, `cols()`, `sort_lines()`, not sed/awk/cut
60
- - File operations → prelude helpers, not mv/cp/rm commands
61
- - Conditionals → Python if/else, not bash [[ ]]
62
-
63
- **Shell commands:** Use `sh()` or `run()`, never raw `subprocess`:
64
- ```python
65
- # Good
66
- sh("bun run check")
67
- run("cargo build --release")
68
-
69
- # Bad - never use subprocess directly
70
- import subprocess
71
- subprocess.run(["bun", "run", "check"], ...)
72
- ```
73
-
74
- ## Prelude helpers
75
-
21
+ <prelude>
76
22
  All helpers auto-print results and return values for chaining.
77
23
 
78
24
  {{#if categories.length}}
@@ -84,14 +30,49 @@ All helpers auto-print results and return values for chaining.
84
30
  {{docstring}}
85
31
  {{/each}}
86
32
  ```
87
-
88
33
  {{/each}}
89
34
  {{else}}
90
35
  (Documentation unavailable — Python kernel failed to start)
91
36
  {{/if}}
37
+ </prelude>
92
38
 
93
- ## Examples
39
+ <output>
40
+ Output streams in real time, truncated after 100KB.
41
+ If output is truncated, full output is stored under $ARTIFACTS and referenced as `artifact://<id>` in metadata.
94
42
 
43
+ The user sees output like a Jupyter notebook—rich displays are fully rendered:
44
+ - `display(JSON(data))` → interactive JSON tree
45
+ - `display(HTML(...))` → rendered HTML
46
+ - `display(Markdown(...))` → formatted markdown
47
+ - `plt.show()` → inline figures
48
+
49
+ **You will see object repr** (e.g., `<IPython.core.display.JSON object>`) **but the user sees the rendered output.** Trust that `display()` calls work correctly—do not assume the user sees only the repr.
50
+ </output>
51
+
52
+ <important>
53
+ - Kernel persists for the session by default; per-call mode uses a fresh kernel each call
54
+ - Use `reset: true` to clear state when session mode is active
55
+ </important>
56
+
57
+ <critical>
58
+ - Use `plt.show()` to display figures
59
+ - Use `display()` from IPython.display for rich output (HTML, Markdown, images, etc.)
60
+ - Use `sh()` or `run()` for shell commands, never raw `subprocess`
61
+ </critical>
62
+
63
+ <example name="good">
64
+ ```python
65
+ # Multiple small cells
66
+ cells: [
67
+ {"title": "imports", "code": "import json\nfrom pathlib import Path"},
68
+ {"title": "parse helper", "code": "def parse_config(path):\n return json.loads(Path(path).read_text())"},
69
+ {"title": "test helper", "code": "parse_config('config.json')"},
70
+ {"title": "use helper", "code": "configs = [parse_config(p) for p in Path('.').glob('*.json')]"}
71
+ ]
72
+ ```
73
+ </example>
74
+
75
+ <example name="prelude-helpers">
95
76
  ```python
96
77
  # Concatenate all markdown files in docs/
97
78
  cat(*find("*.md", "docs"))
@@ -108,21 +89,23 @@ sort_lines(read("data.txt"), unique=True)
108
89
  # Extract columns 0 and 2 from TSV
109
90
  cols(read("data.tsv"), 0, 2, sep="\t")
110
91
  ```
92
+ </example>
111
93
 
112
- ## Notes
113
-
114
- - Code executes as IPython cells; users see the full cell output (including rendered figures, tables, etc.)
115
- - Kernel persists for the session by default; per-call mode uses a fresh kernel each call. Use `reset: true` to clear state when session mode is active
116
- - Use `plt.show()` to display figures
117
- - Use `display()` from IPython.display for rich output (HTML, Markdown, images, etc.)
118
- - Output streams in real time, truncated after 50KB
119
-
120
- ## Rich output rendering
94
+ <example name="shell-commands">
95
+ ```python
96
+ # Good
97
+ sh("bun run check")
98
+ run("cargo build --release")
121
99
 
122
- The user sees output like a Jupyter notebook—rich displays are fully rendered:
123
- - `display(JSON(data))` → interactive JSON tree
124
- - `display(HTML(...))` rendered HTML
125
- - `display(Markdown(...))` → formatted markdown
126
- - `plt.show()` → inline figures
100
+ # Bad - never use subprocess directly
101
+ import subprocess
102
+ subprocess.run(["bun", "run", "check"], ...)
103
+ ```
104
+ </example>
127
105
 
128
- **You will see object repr** (e.g., `<IPython.core.display.JSON object>`) **but the user sees the rendered output.** Trust that `display()` calls work correctly—do not assume the user sees only the repr.
106
+ <avoid>
107
+ - Putting everything in one giant cell
108
+ - Re-importing modules you already imported
109
+ - Rewriting working cells when only one part failed
110
+ - Large functions that are hard to debug piece by piece
111
+ </avoid>
@@ -1,25 +1,26 @@
1
- Reads a file from the local filesystem. You can access any file directly by using this tool.
2
- Assume this tool is able to read all files on the machine. If the User provides a path to a file assume that path is valid. It is okay to read a file that does not exist; an error will be returned.
1
+ # Read
3
2
 
4
- Usage:
5
- - By default, it reads up to {{DEFAULT_MAX_LINES}} lines starting from the beginning of the file
6
- - You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters
7
- - Any lines longer than 500 characters will be truncated
8
- - By default, results omit line numbers. Use `lines: true` to include them
9
- - This tool allows Claude Code to read images (eg PNG, JPG, etc). When reading an image file the contents are presented visually as Claude Code is a multimodal LLM.
10
- - This tool can read PDF files (.pdf). PDFs are processed page by page, extracting both text and visual content for analysis.
11
- - This tool can read Jupyter notebooks (.ipynb files) and returns all cells with their outputs, combining code, text, and visualizations.
12
- - This tool can only read files, not directories. To read a directory, use the ls tool.
13
- - You can call multiple tools in a single response. It is always better to speculatively read multiple potentially useful files in parallel.
14
- - You will regularly be asked to read screenshots. If the user provides a path to a screenshot, ALWAYS use this tool to view the file at the path. This tool will work with all temporary file paths.
15
- - If you read a file that exists but has empty contents you will receive a system reminder warning in place of file contents.
16
-
17
- Empty files trigger a warning. Directory paths return an ls-style listing. Missing files return an error with closest matches (gitignore respected).
18
-
19
- ## Best Practices
3
+ Reads files from the local filesystem or internal URLs.
20
4
 
5
+ <instruction>
6
+ - Reads up to {{DEFAULT_MAX_LINES}} lines by default
7
+ - Use `offset` and `limit` for large files
8
+ - Use `lines: true` to include line numbers
9
+ - Supports images (PNG, JPG) and PDFs
10
+ - For directories, use the ls tool instead
21
11
  - Parallelize reads when exploring related files
22
- - Read before editing (required in current session)
23
- - Trust user-provided paths; attempt the read
24
- - Screenshots: Read tool renders images visually
25
- - Skip re-reading after edits (Edit/Write report errors)
12
+ - Supports internal URLs:
13
+ - `skill://<name>` - read SKILL.md for a skill
14
+ - `skill://<name>/<path>` - read relative path within skill directory
15
+ - `rule://<name>` - read rule content
16
+ - `agent://<id>` - read agent output artifact
17
+ - `agent://<id>/<path>` or `agent://<id>?q=<query>` - extract JSON from agent output
18
+ </instruction>
19
+
20
+ <output>
21
+ - Returns file content as text
22
+ - Images: returns visual content for analysis
23
+ - PDFs: returns extracted text
24
+ - Missing files: returns closest filename matches for correction
25
+ - Internal URLs: returns resolved content with pagination support
26
+ </output>
@@ -1,18 +1,24 @@
1
+ # Replace
2
+
1
3
  Performs string replacements in files with fuzzy whitespace matching.
2
4
 
3
- Usage:
4
- - Use the smallest edit that uniquely identifies the change. To toggle a checkbox: `- [ ] Task` → `- [x] Task`, not the entire line.
5
- - If the old text is not unique, expand the replacement to a larger block (function/class/section) so it is unique.
6
- - You must use your read tool at least once in the conversation before editing. This tool will error if you attempt an edit without reading the file.
7
- - Fuzzy matching handles minor whitespace/indentation differences automatically - you don't need to match indentation exactly.
8
- - ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
9
- - Only use emojis if the user explicitly requests it. Avoid adding emojis to files unless asked.
10
- - The edit will FAIL if old_string is not unique in the file. Either provide a larger string with more surrounding context to make it unique or use replace_all to change every instance of old_string.
11
- - Use replace_all for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.
5
+ <instruction>
6
+ - Use the smallest edit that uniquely identifies the change
7
+ - If `old_text` is not unique, expand to include more context or use `all: true` to replace all occurrences
8
+ - Fuzzy matching handles minor whitespace/indentation differences automatically
9
+ - Prefer editing existing files over creating new ones
10
+ </instruction>
11
+
12
+ <output>
13
+ Returns success/failure status. On success, the file is modified in place with the replacement applied. On failure (e.g., `old_text` not found or matches multiple locations without `all: true`), returns an error describing the issue.
14
+ </output>
12
15
 
13
- ## When to use bash instead
16
+ <critical>
17
+ - You must read the file at least once in the conversation before editing. The tool will error if you attempt an edit without reading the file first.
18
+ </critical>
14
19
 
15
- Edit is for content-addressed changes—you identify *what* to change by its text.
20
+ <bash_alternatives>
21
+ Replace is for content-addressed changes—you identify *what* to change by its text.
16
22
 
17
23
  For position-addressed or pattern-addressed changes, bash is more efficient:
18
24
 
@@ -27,5 +33,6 @@ For position-addressed or pattern-addressed changes, bash is more efficient:
27
33
  | Copy lines N-M to another file | `sed -n 'N,Mp' src >> dest` |
28
34
  | Move lines N-M to another file | `sed -n 'N,Mp' src >> dest && sed -i 'N,Md' src` |
29
35
 
30
- Use Edit when the *content itself* identifies the location.
36
+ Use Replace when the *content itself* identifies the location.
31
37
  Use bash when *position* or *pattern* identifies what to change.
38
+ </bash_alternatives>
@@ -1,11 +1,14 @@
1
- Execute commands on remote SSH hosts.
2
-
3
- ## Critical: Match Commands to Host Shell
1
+ # SSH
4
2
 
5
- Each host runs a specific shell. **You MUST use commands native to that shell.**
3
+ Execute commands on remote SSH hosts.
6
4
 
7
- ### Command Reference
5
+ <instruction>
6
+ 1. Check the host's shell type from "Available hosts" below
7
+ 2. Use ONLY commands for that shell type
8
+ 3. Construct your command using the reference below
9
+ </instruction>
8
10
 
11
+ <commands>
9
12
  **linux/bash, linux/zsh, macos/bash, macos/zsh** — Unix-like systems:
10
13
  - Files: `ls`, `cat`, `head`, `tail`, `grep`, `find`
11
14
  - System: `ps`, `top`, `df`, `uname`, `free` (Linux), `df`, `uname`, `top` (macOS)
@@ -26,49 +29,39 @@ Each host runs a specific shell. **You MUST use commands native to that shell.**
26
29
  - Files: `dir`, `type`, `findstr`, `where`
27
30
  - System: `tasklist`, `systeminfo`
28
31
  - Navigation: `cd`, `echo %CD%`
32
+ </commands>
29
33
 
30
- ## Execution Pattern
34
+ <output>
35
+ Command output (stdout/stderr combined), truncated at 50KB. Exit code is captured.
36
+ If output is truncated, full output is stored under $ARTIFACTS and referenced as `artifact://<id>` in metadata.
37
+ </output>
31
38
 
32
- 1. Check the host's shell type from "Available hosts" below
33
- 2. Use ONLY commands for that shell type
34
- 3. Construct your command using the reference above
39
+ <critical>
40
+ Each host runs a specific shell. You MUST use commands native to that shell.
41
+ Verify host shell type from "Available hosts" and use matching commands.
42
+ </critical>
35
43
 
36
- ## Examples
37
-
38
- <example>
44
+ <example name="linux">
39
45
  Task: List files in /home/user on host "server1"
40
46
  Host: server1 (10.0.0.1) | linux/bash
41
47
  Command: `ls -la /home/user`
42
48
  </example>
43
49
 
44
- <example>
50
+ <example name="windows-cmd">
45
51
  Task: Show running processes on host "winbox"
46
52
  Host: winbox (192.168.1.5) | windows/cmd
47
53
  Command: `tasklist /v`
48
54
  </example>
49
55
 
50
- <example>
56
+ <example name="windows-wsl">
51
57
  Task: Check disk usage on host "wsl-dev"
52
58
  Host: wsl-dev (192.168.1.10) | windows/bash
53
59
  Command: `df -h`
54
60
  Note: Windows host with WSL — use Unix commands
55
61
  </example>
56
62
 
57
- <example>
63
+ <example name="macos">
58
64
  Task: Get system info on host "macbook"
59
65
  Host: macbook (10.0.0.20) | macos/zsh
60
66
  Command: `uname -a && sw_vers`
61
67
  </example>
62
-
63
- ## Parameters
64
-
65
- - **host**: Host name from "Available hosts" below
66
- - **command**: Command to execute (see Command Reference above)
67
- - **cwd**: Working directory (optional)
68
- - **timeout**: Timeout in seconds (optional)
69
-
70
- ## Output
71
-
72
- Truncated at 50KB. Exit codes captured.
73
-
74
- **Before executing: verify host shell type below and use matching commands.**