lazycodex-ai 5.1.62 → 5.1.63

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 (276) hide show
  1. package/dist/cli/index.js +1598 -284
  2. package/dist/cli/service-auth/closed-device-login.fixture.d.ts +1 -0
  3. package/dist/cli/service-auth/credential-lock.d.ts +8 -2
  4. package/dist/cli/service-auth/keychain-helper/access.d.ts +27 -0
  5. package/dist/cli/service-auth/keychain-helper/approval-cache.d.ts +51 -0
  6. package/dist/cli/service-auth/keychain-helper/client.d.ts +68 -0
  7. package/dist/cli/service-auth/keychain-helper/creator-handoff.d.ts +31 -0
  8. package/dist/cli/service-auth/keychain-helper/darwin-backend.d.ts +75 -0
  9. package/dist/cli/service-auth/keychain-helper/darwin-read.d.ts +46 -0
  10. package/dist/cli/service-auth/keychain-helper/darwin-store.d.ts +28 -0
  11. package/dist/cli/service-auth/keychain-helper/fake-keychain.test-support.d.ts +85 -0
  12. package/dist/cli/service-auth/keychain-helper/location.d.ts +28 -0
  13. package/dist/cli/service-auth/keychain-helper/migration.d.ts +20 -0
  14. package/dist/cli/service-auth/keychain-helper/owner-marker.d.ts +7 -0
  15. package/dist/cli/service-auth/keychain-helper/pin.d.ts +20 -0
  16. package/dist/cli/service-auth/keychain-helper/process-copy.test-support.d.ts +3 -0
  17. package/dist/cli/service-auth/keychain-helper/process-state.d.ts +19 -0
  18. package/dist/cli/service-auth/keychain-helper/prompt-lock.d.ts +14 -0
  19. package/dist/cli/service-auth/keychain-helper/recovery.d.ts +34 -0
  20. package/dist/cli/service-auth/keychain-helper/runtime-capabilities.d.ts +13 -0
  21. package/dist/cli/service-auth/keychain-helper/secrets-gate.d.ts +4 -0
  22. package/dist/cli/service-auth/keychain-helper/signature.d.ts +17 -0
  23. package/dist/cli/service-auth/keychain-helper/store-binding.d.ts +46 -0
  24. package/dist/cli/service-auth/keystore.d.ts +18 -3
  25. package/dist/cli/service-auth/session.d.ts +2 -2
  26. package/dist/cli-node/index.js +1598 -284
  27. package/package.json +1 -1
  28. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  29. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  30. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  32. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  34. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  38. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  39. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  41. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  43. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  45. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +2 -0
  47. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  48. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  49. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
  50. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +2 -2
  51. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  52. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +1 -1
  53. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  54. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +2 -0
  56. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  57. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  58. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
  59. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +1 -1
  60. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +10 -10
  61. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  82. package/packages/omo-codex/plugin/package-lock.json +12 -12
  83. package/packages/omo-codex/plugin/package.json +1 -1
  84. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +6 -3
  85. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +2 -2
  86. package/packages/omo-codex/plugin/skills/ast-grep/README.md +4 -4
  87. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +10 -8
  88. package/packages/omo-codex/plugin/skills/ast-grep/references/cli.md +4 -3
  89. package/packages/omo-codex/plugin/skills/ast-grep/references/patterns.md +5 -5
  90. package/packages/omo-codex/plugin/skills/ast-grep/references/pitfalls.md +3 -3
  91. package/packages/omo-codex/plugin/skills/ast-grep/references/recipes.md +6 -4
  92. package/packages/omo-codex/plugin/skills/ast-grep/references/yaml-rules.md +3 -3
  93. package/packages/omo-codex/plugin/skills/ast-grep/scripts/ast_grep_helper.py +3 -3
  94. package/packages/omo-codex/plugin/skills/browser/SKILL.md +2 -3
  95. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  96. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +1 -1
  97. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +2 -1
  98. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +8 -6
  99. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +9 -5
  100. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +3 -3
  101. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +19 -4
  102. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +5 -5
  103. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +2 -2
  104. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +2 -0
  105. package/packages/omo-codex/plugin/skills/debugging/references/methodology/09-cleanup.md +2 -2
  106. package/packages/omo-codex/plugin/skills/debugging/references/methodology/partial-runtime-evidence.md +1 -1
  107. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/bundled-js-binary.md +1 -1
  108. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +1 -1
  109. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +1 -2
  110. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +2 -2
  111. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +1 -1
  112. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +1 -1
  113. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +0 -1
  114. package/packages/omo-codex/plugin/skills/frontend/references/perfection/react-perf-tooling.md +27 -8
  115. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +0 -1
  116. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +12 -2
  117. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +1 -1
  118. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +24 -15
  119. package/packages/omo-codex/plugin/skills/lsp-setup/references/bash/README.md +3 -3
  120. package/packages/omo-codex/plugin/skills/lsp-setup/references/c-cpp/README.md +2 -2
  121. package/packages/omo-codex/plugin/skills/lsp-setup/references/csharp/README.md +2 -2
  122. package/packages/omo-codex/plugin/skills/lsp-setup/references/dart/README.md +2 -2
  123. package/packages/omo-codex/plugin/skills/lsp-setup/references/elixir/README.md +2 -2
  124. package/packages/omo-codex/plugin/skills/lsp-setup/references/go/README.md +2 -2
  125. package/packages/omo-codex/plugin/skills/lsp-setup/references/haskell/README.md +2 -2
  126. package/packages/omo-codex/plugin/skills/lsp-setup/references/java/README.md +3 -3
  127. package/packages/omo-codex/plugin/skills/lsp-setup/references/julia/README.md +3 -3
  128. package/packages/omo-codex/plugin/skills/lsp-setup/references/kotlin/README.md +4 -4
  129. package/packages/omo-codex/plugin/skills/lsp-setup/references/lua/README.md +2 -2
  130. package/packages/omo-codex/plugin/skills/lsp-setup/references/php/README.md +3 -3
  131. package/packages/omo-codex/plugin/skills/lsp-setup/references/python/README.md +13 -12
  132. package/packages/omo-codex/plugin/skills/lsp-setup/references/ruby/README.md +2 -2
  133. package/packages/omo-codex/plugin/skills/lsp-setup/references/rust/README.md +2 -2
  134. package/packages/omo-codex/plugin/skills/lsp-setup/references/swift/README.md +4 -4
  135. package/packages/omo-codex/plugin/skills/lsp-setup/references/terraform/README.md +2 -2
  136. package/packages/omo-codex/plugin/skills/lsp-setup/references/typescript/README.md +3 -3
  137. package/packages/omo-codex/plugin/skills/lsp-setup/references/yaml/README.md +2 -2
  138. package/packages/omo-codex/plugin/skills/lsp-setup/references/zig/README.md +2 -2
  139. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/detect-lsp.ts +1 -1
  140. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/lsp-server-table.ts +3 -2
  141. package/packages/omo-codex/plugin/skills/programming/SKILL.md +5 -5
  142. package/packages/omo-codex/plugin/skills/programming/references/code-smells.md +2 -2
  143. package/packages/omo-codex/plugin/skills/programming/references/go/README.md +3 -3
  144. package/packages/omo-codex/plugin/skills/programming/references/python/README.md +8 -8
  145. package/packages/omo-codex/plugin/skills/programming/references/python/data-processing.md +9 -9
  146. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/README.md +3 -3
  147. package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +5 -5
  148. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/new-project.ts +1 -1
  149. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +35 -35
  150. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +6 -6
  151. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +2 -2
  152. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +10 -7
  153. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +4 -4
  154. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/README.md +2 -2
  155. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/career.md +1 -1
  156. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  157. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/web.md +4 -4
  158. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +2 -1
  159. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +16 -17
  160. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +10 -6
  161. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +12 -12
  162. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +3 -3
  163. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +1 -1
  164. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/rss.md +1 -1
  165. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +12 -7
  166. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +2 -0
  167. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +9 -6
  168. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  169. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +1 -1
  170. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +10 -10
  171. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
  172. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +2 -2
  173. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
  174. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +5 -5
  175. package/packages/omo-codex/plugin/skills/ulw-research/references/report-visualization.md +2 -2
  176. package/packages/omo-codex/plugin/skills/ulw-research/references/research-collection.md +2 -2
  177. package/packages/omo-codex/plugin/skills/ulw-research/references/unit-rules.md +2 -2
  178. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +1 -1
  179. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +5 -5
  180. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +4 -2
  181. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +2 -0
  182. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +7 -3
  183. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  184. package/packages/prompts-core/prompts/ultrawork/codex.md +2 -0
  185. package/packages/shared-skills/skills/ast-grep/AGENTS.md +2 -2
  186. package/packages/shared-skills/skills/ast-grep/README.md +4 -4
  187. package/packages/shared-skills/skills/ast-grep/SKILL.md +10 -8
  188. package/packages/shared-skills/skills/ast-grep/references/cli.md +4 -3
  189. package/packages/shared-skills/skills/ast-grep/references/patterns.md +5 -5
  190. package/packages/shared-skills/skills/ast-grep/references/pitfalls.md +3 -3
  191. package/packages/shared-skills/skills/ast-grep/references/recipes.md +6 -4
  192. package/packages/shared-skills/skills/ast-grep/references/yaml-rules.md +3 -3
  193. package/packages/shared-skills/skills/ast-grep/scripts/ast_grep_helper.py +3 -3
  194. package/packages/shared-skills/skills/browser/SKILL.md +2 -3
  195. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  196. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +1 -1
  197. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +2 -1
  198. package/packages/shared-skills/skills/data-scientist/SKILL.md +8 -6
  199. package/packages/shared-skills/skills/data-scientist/references/placement.md +9 -5
  200. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +3 -3
  201. package/packages/shared-skills/skills/data-scientist/references/visualization.md +19 -4
  202. package/packages/shared-skills/skills/debugging/SKILL.md +5 -5
  203. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +2 -2
  204. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +2 -0
  205. package/packages/shared-skills/skills/debugging/references/methodology/09-cleanup.md +2 -2
  206. package/packages/shared-skills/skills/debugging/references/methodology/partial-runtime-evidence.md +1 -1
  207. package/packages/shared-skills/skills/debugging/references/runtimes/bundled-js-binary.md +1 -1
  208. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +1 -1
  209. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +1 -2
  210. package/packages/shared-skills/skills/frontend/SKILL.md +2 -2
  211. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +1 -1
  212. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +1 -1
  213. package/packages/shared-skills/skills/frontend/references/perfection/README.md +0 -1
  214. package/packages/shared-skills/skills/frontend/references/perfection/react-perf-tooling.md +27 -8
  215. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +0 -1
  216. package/packages/shared-skills/skills/git-master/SKILL.md +12 -2
  217. package/packages/shared-skills/skills/init-deep/SKILL.md +1 -1
  218. package/packages/shared-skills/skills/lsp-setup/SKILL.md +24 -15
  219. package/packages/shared-skills/skills/lsp-setup/references/bash/README.md +3 -3
  220. package/packages/shared-skills/skills/lsp-setup/references/c-cpp/README.md +2 -2
  221. package/packages/shared-skills/skills/lsp-setup/references/csharp/README.md +2 -2
  222. package/packages/shared-skills/skills/lsp-setup/references/dart/README.md +2 -2
  223. package/packages/shared-skills/skills/lsp-setup/references/elixir/README.md +2 -2
  224. package/packages/shared-skills/skills/lsp-setup/references/go/README.md +2 -2
  225. package/packages/shared-skills/skills/lsp-setup/references/haskell/README.md +2 -2
  226. package/packages/shared-skills/skills/lsp-setup/references/java/README.md +3 -3
  227. package/packages/shared-skills/skills/lsp-setup/references/julia/README.md +3 -3
  228. package/packages/shared-skills/skills/lsp-setup/references/kotlin/README.md +4 -4
  229. package/packages/shared-skills/skills/lsp-setup/references/lua/README.md +2 -2
  230. package/packages/shared-skills/skills/lsp-setup/references/php/README.md +3 -3
  231. package/packages/shared-skills/skills/lsp-setup/references/python/README.md +13 -12
  232. package/packages/shared-skills/skills/lsp-setup/references/ruby/README.md +2 -2
  233. package/packages/shared-skills/skills/lsp-setup/references/rust/README.md +2 -2
  234. package/packages/shared-skills/skills/lsp-setup/references/swift/README.md +4 -4
  235. package/packages/shared-skills/skills/lsp-setup/references/terraform/README.md +2 -2
  236. package/packages/shared-skills/skills/lsp-setup/references/typescript/README.md +3 -3
  237. package/packages/shared-skills/skills/lsp-setup/references/yaml/README.md +2 -2
  238. package/packages/shared-skills/skills/lsp-setup/references/zig/README.md +2 -2
  239. package/packages/shared-skills/skills/lsp-setup/scripts/detect-lsp.ts +1 -1
  240. package/packages/shared-skills/skills/lsp-setup/scripts/lsp-server-table.ts +3 -2
  241. package/packages/shared-skills/skills/programming/SKILL.md +5 -5
  242. package/packages/shared-skills/skills/programming/references/code-smells.md +2 -2
  243. package/packages/shared-skills/skills/programming/references/go/README.md +3 -3
  244. package/packages/shared-skills/skills/programming/references/python/README.md +8 -8
  245. package/packages/shared-skills/skills/programming/references/python/data-processing.md +9 -9
  246. package/packages/shared-skills/skills/programming/references/rust-ub/README.md +3 -3
  247. package/packages/shared-skills/skills/programming/references/typescript/README.md +5 -5
  248. package/packages/shared-skills/skills/programming/scripts/typescript/new-project.ts +1 -1
  249. package/packages/shared-skills/skills/refactor/SKILL.md +35 -35
  250. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +6 -6
  251. package/packages/shared-skills/skills/review-work/SKILL.md +2 -2
  252. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +10 -7
  253. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +4 -4
  254. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/README.md +2 -2
  255. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/career.md +1 -1
  256. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  257. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/web.md +4 -4
  258. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +2 -1
  259. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +16 -17
  260. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +10 -6
  261. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +12 -12
  262. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +3 -3
  263. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +1 -1
  264. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/rss.md +1 -1
  265. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +12 -7
  266. package/packages/shared-skills/skills/ulw-execute/SKILL.md +9 -6
  267. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
  268. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +2 -2
  269. package/packages/shared-skills/skills/ulw-research/SKILL.md +3 -3
  270. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +5 -5
  271. package/packages/shared-skills/skills/ulw-research/references/report-visualization.md +2 -2
  272. package/packages/shared-skills/skills/ulw-research/references/research-collection.md +2 -2
  273. package/packages/shared-skills/skills/ulw-research/references/unit-rules.md +2 -2
  274. package/packages/shared-skills/skills/visual-qa/AGENTS.md +1 -1
  275. package/packages/shared-skills/skills/visual-qa/SKILL.md +5 -5
  276. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +4 -2
@@ -78,7 +78,7 @@ Apply unless the per-language reference overrides with something stricter.
78
78
  | Exhaustive variant matching | `match` + `assert_never` | `match` (compiler-enforced) | `switch` + `assertNever` | sealed interface + type switch + **`exhaustive` linter** (the compiler will not help) |
79
79
  | No untyped escape hatches | no `Any` in public sigs, no `cast`, no `# type: ignore` | no `unwrap`/`expect` outside tests (invariant `expect` only behind `#[expect(clippy::expect_used, reason)]`), no numeric `as`, no `#[allow]` (silence with `#[expect(lint, reason)]`) | no `any`, no `as` (except `as const`, `satisfies`), no `!`, no `@ts-ignore`, no `@ts-expect-error` | no `interface{}` / bare `any` in domain sigs; no `_ = err`; no `//nolint` without reason |
80
80
  | No bare error strings | typed exception dataclass with `__str__` | `thiserror` enum (lib) or `anyhow` with `.context(...)` (app) | `Error` subclass with typed fields | sentinel `errors.New` + typed `*XError` struct; wrap with `%w`; check via `errors.Is/As` |
81
- | Boundary catch only | catch the exact exception you expect; broad `except Exception` only in `main()`, with logging + re-raise | `?` everywhere; never `panic!` in library code | `catch` must narrow with `instanceof` and re-throw or convert; no empty catch | every `(T, error)` checked; `panic` only in `main`/tests; one `httperr.Write` funnel in handlers |
81
+ | Boundary catch only | catch the exact exception you expect; broad `except Exception` only at a top-level boundary (`main()`/CLI entry, HTTP handler), with logging + re-raise | `?` everywhere; never `panic!` in library code | `catch` must narrow with `instanceof` and re-throw or convert; no empty catch | every `(T, error)` checked; `panic` only in `main`/tests; one `httperr.Write` funnel in handlers |
82
82
  | Resources via RAII | `with` (sync) / `async with` (async) | `Drop` impl or RAII guard | `using`/`await using` (TC39 explicit resource management) | `defer x.Close()` immediately after acquisition; `bodyclose`/`sqlclosecheck` linters enforce |
83
83
  | Async runtime is mandatory | `anyio` (NEVER bare `asyncio`) | `tokio` (`async-std` is unmaintained) | platform-native async (Bun/Node) with structured cancellation via `AbortSignal` | `context.Context` as first param + `errgroup` for structured concurrency; `-race` on every test |
84
84
  | Modern HTTP client | [`httpx2`](https://github.com/pydantic/httpx2) with HTTP/2 + brotli + zstd | `reqwest` with rustls | `ky` (default) / `undici` direct API (Node perf) - NEVER bare `fetch` in prod | stdlib `net/http.Client` with tuned `Transport` + `go-retryablehttp` for retry/backoff |
@@ -140,13 +140,13 @@ Full rationale, measurement methods, workaround detection, and split examples: *
140
140
 
141
141
  A source file past 250 non-blank, non-comment lines has outgrown a single reviewer's working memory. The module is almost certainly doing more than one thing. Measure: `awk '!/^[[:space:]]*$/ && !/^[[:space:]]*(\/\/|#|--)/' <file> | wc -l`.
142
142
 
143
- **When detected:** Name what the file owns in one short noun phrase. If the answer needs "and", the file needs splitting. Load `/refactor` and split by responsibility. If the file genuinely cannot be split (generated parser, indivisible state machine), mark with `// allow: SIZE_OK — <reason>`.
143
+ **When detected:** Name what the file owns in one short noun phrase. If the answer needs "and", the file needs splitting. Load `/refactor` and split by responsibility. If the file genuinely cannot be split (generated parser, indivisible state machine), mark it in the first 10 lines with `# noqa: SIZE_OK — <reason>` in Python (the form `scripts/python/check-no-excuse-rules.py` reads) or `// allow: SIZE_OK — <reason>` in `//`-comment languages.
144
144
 
145
145
  ### Smell 2 — Function with more than 3 parameters
146
146
 
147
147
  More than 3 arguments signals the function is doing too much, or that related parameters belong in a typed struct. **Workarounds count as the same smell** — passing `dict`/`Record<string, unknown>`/`map[string]any`/`**kwargs`/`...args` to smuggle parameters through one argument, or a throwaway "config" object with 6+ fields that exists solely to wrap what would otherwise be positional args (genuine reusable domain types like `HttpClientConfig` are fine).
148
148
 
149
- **When detected:** Group related parameters into a typed value object with a domain name. If 4+ independent inputs are genuinely required, the justification must be SPECIFIC. See [`references/code-smells.md` Smell 2](references/code-smells.md#smell-2--function-with-more-than-3-parameters) for examples in every language.
149
+ **When detected:** Group related parameters into a typed value object with a domain name. If 4+ independent inputs are genuinely required, the justification must be SPECIFIC. See [`references/code-smells.md` Smell 2](references/code-smells.md#smell-2--function-with-more-than-3-parameters) for Python, TypeScript, and Go examples.
150
150
 
151
151
  ### Smell 3 — Redundant verification after a destructive action
152
152
 
@@ -242,9 +242,9 @@ These two skills are not optional cosmetics. They are the recovery path for the
242
242
 
243
243
  | Trigger | Skill to load | Why |
244
244
  |---|---|---|
245
- | Any [code smell](#code-smells--automatic-review-triggers) fires (250+ LOC, >3 params, redundant verification), OR the post-write loop surfaces 2+ issues, OR the user says "reshape this", "extract this", "clean this up" | `refactor` | Safe codemap-driven multi-step refactor with LSP + tests after each step. Never improvise a structural change. |
245
+ | Any [code smell](#code-smells--automatic-review-triggers) fires (250+ LOC, >3 params, redundant verification, negative naming), OR the post-write loop surfaces more than two issues, OR the user says "reshape this", "extract this", "clean this up" | `refactor` | Safe codemap-driven multi-step refactor with LSP + tests after each step. Never improvise a structural change. |
246
246
  | Recent branch contains AI-authored patterns (broad except, dead helpers, vague comments, oversized files, redundant post-action verification, junk tests), OR the user says "remove slop", "clean AI code", "deslop" | `remove-ai-slops` | Behavior locked by gate-passing tests FIRST, then categorized parallel cleanup (junk tests included, each cut proven by a mutation), then quality gates. Behavior-preserving. |
247
- | Rust code touches `unsafe`, `*mut`, `*const`, `MaybeUninit`, FFI, `unsafe impl Send/Sync`, or a custom lock-free primitive | `references/rust-ub/` | Full UB taxonomy + Miri strictness escalation. Every `unsafe` block must survive Miri Level 3 (strict provenance + symbolic alignment + preemption) before it ships. |
247
+ | Rust code touches `unsafe`, `*mut`, `*const`, `MaybeUninit`, FFI, `unsafe impl Send/Sync`, or a custom lock-free primitive | `references/rust-ub/` | Full UB taxonomy + Miri strictness escalation. Every `unsafe` block must survive Miri Level 3 (strict provenance + symbolic alignment + preemption) and the Level 4 Tree Borrows pass before it ships. |
248
248
 
249
249
  ---
250
250
 
@@ -48,10 +48,10 @@ cloc --by-file <file> # the "code" column is the number
48
48
 
49
49
  A file may legitimately exceed 250 pure LOC if **and only if** it is:
50
50
 
51
- - A truly indivisible single-responsibility unit (e.g., a generated parser table, a state machine whose states share a single closure). Mark with `// allow: SIZE_OK — <reason>`.
51
+ - A truly indivisible single-responsibility unit (e.g., a generated parser table, a state machine whose states share a single closure). Mark it in the first 10 lines with `# noqa: SIZE_OK — <reason>` in Python (the form `scripts/python/check-no-excuse-rules.py` reads) or `// allow: SIZE_OK — <reason>` in `//`-comment languages.
52
52
  - A pure data table (translation strings, error code lookup, brand color palette).
53
53
 
54
- `// allow: SIZE_OK` without a justifying comment is itself slop.
54
+ A SIZE_OK marker without a justifying comment is itself slop.
55
55
 
56
56
  ### Concrete split examples
57
57
 
@@ -66,9 +66,9 @@ Read these per-file references for the canonical patterns:
66
66
  - **HTTP backend** → `backend-stack.md` — `gin` server skeleton, middleware ordering, SSE/streaming with `http.Flusher`, structured slog logging, graceful shutdown — distilled from the CLIProxyAPI codebase (a real proxy serving OpenAI/Gemini/Claude APIs).
67
67
  - **RPC** → `grpc-connect.md` — when to pick Connect vs grpc-go, codegen pipeline, protovalidate, streaming.
68
68
  - **DB** → `sqlc-pgx.md` — compile-time-safe SQL via sqlc + pgx connection pool + migrations via goose + testcontainers in CI.
69
- - **CLI** → `cobra-stack.md` — cobra layout, slog integration, graceful shutdown on signals, fang-style colored help.
69
+ - **CLI** → `cobra-stack.md` — cobra layout, slog integration, graceful shutdown on signals, shell completions, `huh` prompts styled with `lipgloss`.
70
70
  - **TUI** → `bubbletea-v2.md` — v2 model, `SetVirtualCursor(false)` + `tea.View{Cursor}` for CJK IME, why v1 was broken for Korean/Japanese/Chinese input.
71
- - **Testing** → `testing.md` — table-driven tests, `require` vs `assert`, `autogold` snapshots, `gopter` property tests, `testcontainers` for integration, `goleak` for goroutine leaks.
71
+ - **Testing** → `testing.md` — table-driven tests, `require` vs `assert`, `autogold` snapshots, `rapid` property tests, `testcontainers` for integration, `goleak` for goroutine leaks.
72
72
  - **Bootstrap** → `bootstrap.md` — `scripts/go/new-project.ts` invocation, project layout (`cmd/`, `internal/`, `pkg/`), Taskfile, CI.
73
73
  - **Strict config** → `golangci-strict.md` — the canonical `.golangci.yml` with the full linter whitelist and per-linter rationale.
74
74
  - **One-liners** → `one-liners.md` — `go run` scripts with `//go:build ignore`, `gorun`-style invocation.
@@ -81,7 +81,7 @@ The `cmd/server/main.go` is the most common violator. Refactor it: `main.go` onl
81
81
 
82
82
  ## Existing codebases — non-strict project
83
83
 
84
- When editing an existing `.go` file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** Use the `remove-ai-slops` skill for branch-scope cleanup.
84
+ When editing an existing `.go` file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** The one exception is the 250 pure-LOC ceiling: if your edit adds lines to a file already over it, split the unit you are touching into its own file first (see [`../code-smells.md`](../code-smells.md) Smell 1); everything else waits for a separate change. Use the `remove-ai-slops` skill for branch-scope cleanup.
85
85
 
86
86
  ## Activation
87
87
 
@@ -41,7 +41,7 @@ These are deliberate project choices. Violations are always wrong, not "style pr
41
41
  11. **No Any, no object** — both are banned as type annotations. `object` erases all structural information (zero callable attributes, zero narrowing). Use `Protocol` (structural typing), `TypeVar` (generic pass-through), explicit union (known variants), or `TypedDict` (dict shapes).
42
42
  12. **No cast** — `cast()` is banned. Redesign the types.
43
43
  13. **No type: ignore** — fix the type error. The checker is right; you are wrong.
44
- 14. **No broad except** — `except Exception` and `except BaseException` are banned. Catch the **specific** exception you expect. A broad catch swallows bugs you need to see — `KeyError`, `AttributeError`, `TypeError` all vanish silently. If you genuinely need a catch-all at a top-level boundary (CLI entry, HTTP handler), use `# noqa: BROAD_EXCEPT_OK` and log + re-raise.
44
+ 14. **No broad except** — `except Exception` and `except BaseException` are banned. Catch the **specific** exception you expect. A broad catch swallows bugs you need to see — `KeyError`, `AttributeError`, `TypeError` all vanish silently. If you genuinely need a catch-all at a top-level boundary (CLI entry, HTTP handler), put `# noqa: BROAD_EXCEPT_OK` on the `except` line and log + re-raise.
45
45
 
46
46
  ### Typing and safety
47
47
 
@@ -147,19 +147,19 @@ except Exception:
147
147
  # GOOD — catch what you expect
148
148
  try:
149
149
  result = api.fetch(url)
150
- except httpx.HTTPStatusError as e:
150
+ except httpx2.HTTPStatusError as e:
151
151
  logger.error("API %d: %s", e.response.status_code, e.request.url)
152
152
  return None
153
- except httpx.ConnectError:
153
+ except httpx2.ConnectError:
154
154
  raise ServiceUnavailableError(service="api") from None
155
155
 
156
- # GOOD — top-level boundary (only place broad catch is acceptable)
157
- def main() -> int: # noqa: BROAD_EXCEPT_OK
156
+ # GOOD — top-level boundary (CLI entry or HTTP handler: the only places a broad catch is acceptable)
157
+ def main() -> int:
158
158
  try:
159
159
  return run()
160
- except Exception:
160
+ except Exception: # noqa: BROAD_EXCEPT_OK
161
161
  logger.exception("unhandled error")
162
- return 1
162
+ raise
163
163
  ```
164
164
 
165
165
  ### Async
@@ -307,7 +307,7 @@ Tests still follow the iron list — frozen dataclasses, typed errors, exhaustiv
307
307
 
308
308
  ## Existing codebases
309
309
 
310
- When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** Mixing feature work with style migration makes reviews harder and bugs likelier.
310
+ When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** The one exception is the 250 pure-LOC ceiling: if your edit adds lines to a file already over it, split the unit you are touching into its own file first (see [`../code-smells.md`](../code-smells.md) Smell 1); everything else waits for a separate change. Mixing feature work with style migration makes reviews harder and bugs likelier.
311
311
 
312
312
  ## Activation
313
313
 
@@ -10,16 +10,16 @@ NEVER pandas. Polars (with numpy) plus DuckDB. Pandas is 10-50x slower, has weak
10
10
  |---|---|---|
11
11
  | `.csv` / `.parquet` / `.json` direct query | DuckDB | Zero memory load, SQL ergonomics |
12
12
  | `.duckdb` file | DuckDB | Native format |
13
- | Filter (any size) | Polars | 128x faster than DuckDB for filtering |
14
- | Sort | Polars | 12x faster |
15
- | Multi-table join | DuckDB | 3x faster, more join types |
16
- | Heavy GROUP BY aggregation | DuckDB | 4x faster on large datasets |
17
- | Window function | Polars | 3-5x faster |
18
- | Pivot / melt / string ops | Polars | 2x faster |
13
+ | Filter (any size) | Polars | row-wise filtering, low setup cost |
14
+ | Sort | Polars | in-memory sorting |
15
+ | Multi-table join | DuckDB | more join types, out-of-core joins |
16
+ | Heavy GROUP BY aggregation | DuckDB | large grouped aggregation |
17
+ | Window function | Polars | window expressions |
18
+ | Pivot / melt / string ops | Polars | reshape and string expressions |
19
19
  | Larger than RAM | Polars streaming or DuckDB out-of-core | Both handle OOM |
20
20
  | Mixed pipeline | Hybrid (zero-copy via Arrow) | Use each tool's strengths |
21
21
 
22
- For the deep version (per-operation benchmarks, OOM strategies, full execution templates), load the **`data-scientist`** skill - it lives in this same skill set and is the source of truth for performance numbers.
22
+ For the deep version (engine choice, placement, OOM strategies, execution templates), load the **`data-scientist`** skill - it lives in this same skill set; when the engine choice matters, measure on the actual data, as that skill says.
23
23
 
24
24
  ## Standard imports
25
25
 
@@ -69,7 +69,7 @@ result = (
69
69
  pl.len().alias("count"),
70
70
  pl.sum("amount").alias("total"),
71
71
  ])
72
- .collect(streaming=True)
72
+ .collect(engine="streaming")
73
73
  )
74
74
  ```
75
75
 
@@ -84,7 +84,7 @@ joined = duckdb.sql("""
84
84
  JOIN 'products.parquet' p ON o.product_id = p.id
85
85
  """).pl()
86
86
 
87
- # Phase 2: Polars for filtering and transformation (128x + 2x faster)
87
+ # Phase 2: Polars for filtering and transformation
88
88
  processed = (
89
89
  joined
90
90
  .filter(pl.col("amount") > 100)
@@ -98,7 +98,7 @@ MIRIFLAGS="\
98
98
  **Interpret results:**
99
99
  - Fails at Level 1 → Definite UB. Fix immediately.
100
100
  - Passes Level 1, fails Level 2 → Provenance or alignment UB. Fix.
101
- - Passes Levels 1-3, fails Level 4 → Tree Borrows found something Stacked Borrows missed (unusual). Investigate — may be a Tree Borrows false positive, but usually indicates fragile aliasing.
101
+ - Passes Levels 1-3, fails Level 4 → Tree Borrows found something Stacked Borrows missed (unusual). Investigate — may be a Tree Borrows false positive, but usually indicates fragile aliasing. It does not ship until the aliasing is fixed or the false positive is proven and recorded with the Miri output.
102
102
  - Passes all 4 → Miri-clean. Proceed to supplementary tools.
103
103
 
104
104
  ### Phase 3: Supplementary Scans
@@ -159,11 +159,11 @@ Is there unsafe code in the changeset?
159
159
  │ NO → Run Miri Level 2 (strict provenance).
160
160
  │ Miri fails?
161
161
  │ YES → Stop. Classify. Fix. Prove. Then continue.
162
- │ NO → Proceed with the original task.
162
+ │ NO → Proceed with the original task; run Levels 3 and 4 before it ships.
163
163
  NO → Proceed normally.
164
164
  ```
165
165
 
166
- This is not optional. **Every `unsafe` block gets Miri'd before it ships.**
166
+ This is not optional. **Every `unsafe` block passes Miri Levels 3 and 4 before it ships.**
167
167
 
168
168
  ## SAFETY Comment Standard
169
169
 
@@ -16,7 +16,7 @@ These are deliberate project choices. Violations are always wrong, not "style pr
16
16
  | Category | Use | Never |
17
17
  |---|---|---|
18
18
  | Runtime | Bun (native TS, single binary) | ts-node, tsx |
19
- | Package manager | `pnpm` | npm, yarn (unless workspace requires it) |
19
+ | Package manager | Bun (`bun install`); `pnpm` only when Node is forced | npm, yarn (unless workspace requires it) |
20
20
  | Linter + formatter | **oxlint + oxfmt**, with both local copy rules | New ESLint, Prettier, or Biome setups; retain them only in repositories already using them |
21
21
  | Type checker | `tsc --noEmit` with strict config | skip type checking |
22
22
  | Web framework | Hono | Express |
@@ -39,7 +39,7 @@ These are deliberate project choices. Violations are always wrong, not "style pr
39
39
  11. **as const for constants** — module-level constant objects and arrays use `as const`.
40
40
  12. **import type** — type-only imports use `import type`. Enforced by `verbatimModuleSyntax`.
41
41
  13. **Named exports only** — no `export default`. Exception: framework requirement (Next.js pages, etc.).
42
- 14. **No empty catch, no catch-and-swallow** — every `catch` block must either (a) narrow the error with `instanceof` and handle each case, or (b) re-throw. Empty catch blocks and `catch (e) { console.error(e) }` without narrowing or re-throw are banned — they hide bugs. At top-level boundaries (CLI entry, HTTP handler), opt out with `// no-excuse-ok: catch`.
42
+ 14. **No empty catch, no catch-and-swallow** — every `catch` block must either (a) narrow the error with `instanceof` and handle each case, or (b) re-throw. Empty catch blocks and `catch (e) { console.error(e) }` without narrowing or re-throw are banned — they hide bugs. At top-level boundaries (CLI entry, HTTP handler), opt out with `// no-excuse-ok: catch` on the `catch` line.
43
43
 
44
44
  ### Data modeling — which construct, when
45
45
 
@@ -91,10 +91,10 @@ try {
91
91
  }
92
92
 
93
93
  // GOOD — top-level boundary (only place catch-all is acceptable)
94
- async function main(): Promise<void> { // no-excuse-ok: catch
94
+ async function main(): Promise<void> {
95
95
  try {
96
96
  await run()
97
- } catch (e) {
97
+ } catch (e) { // no-excuse-ok: catch
98
98
  console.error("unhandled:", e)
99
99
  process.exit(1)
100
100
  }
@@ -190,7 +190,7 @@ Tests still follow the iron list — branded types, typed errors, exhaustive swi
190
190
 
191
191
  ## Existing codebases
192
192
 
193
- When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.**
193
+ When editing an existing file that doesn't follow these rules: **write new code in strict style, don't refactor existing code in the same change.** The one exception is the 250 pure-LOC ceiling: if your edit adds lines to a file already over it, split the unit you are touching into its own file first (see [`../code-smells.md`](../code-smells.md) Smell 1); everything else waits for a separate change.
194
194
 
195
195
  ## Activation
196
196
 
@@ -77,7 +77,7 @@ const pkg = {
77
77
  },
78
78
  dependencies: {
79
79
  hono: "^4.12.5",
80
- zod: "^3.24.0",
80
+ zod: "^4.0.0",
81
81
  },
82
82
  devDependencies: {
83
83
  "@types/bun": "latest",
@@ -106,17 +106,15 @@ Should I proceed with [recommendation], or would you prefer differently?
106
106
 
107
107
  ## Step 0.3: Create Initial Todos
108
108
 
109
- **IMMEDIATELY after understanding the request, create todos:**
109
+ **IMMEDIATELY after understanding the request, create these todos with the session's todo tool (all pending):**
110
110
 
111
111
  \`\`\`
112
- TodoWrite([
113
- {"id": "phase-1", "content": "PHASE 1: Codebase Analysis - launch parallel explore agents", "status": "pending", "priority": "high"},
114
- {"id": "phase-2", "content": "PHASE 2: Build Codemap - map dependencies and impact zones", "status": "pending", "priority": "high"},
115
- {"id": "phase-3", "content": "PHASE 3: Test Assessment - analyze test coverage and verification strategy", "status": "pending", "priority": "high"},
116
- {"id": "phase-4", "content": "PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan", "status": "pending", "priority": "high"},
117
- {"id": "phase-5", "content": "PHASE 5: Execute Refactoring - step-by-step with continuous verification", "status": "pending", "priority": "high"},
118
- {"id": "phase-6", "content": "PHASE 6: Final Verification - full test suite and regression check", "status": "pending", "priority": "high"}
119
- ])
112
+ - phase-1: PHASE 1: Codebase Analysis - launch parallel explore agents
113
+ - phase-2: PHASE 2: Build Codemap - map dependencies and impact zones
114
+ - phase-3: PHASE 3: Test Assessment - analyze test coverage and verification strategy
115
+ - phase-4: PHASE 4: Plan Generation - invoke Plan agent for detailed refactoring plan
116
+ - phase-5: PHASE 5: Execute Refactoring - step-by-step with continuous verification
117
+ - phase-6: PHASE 6: Final Verification - full test suite and regression check
120
118
  \`\`\`
121
119
 
122
120
  ---
@@ -179,14 +177,14 @@ While background agents are running, use direct tools:
179
177
 
180
178
  \`\`\`typescript
181
179
  // Find definition(s)
182
- LspGotoDefinition(filePath, line, character) // Where is it defined?
180
+ lsp_goto_definition(filePath, line, character) // Where is it defined?
183
181
 
184
182
  // Find ALL usages across workspace
185
- LspFindReferences(filePath, line, character, includeDeclaration=true)
183
+ lsp_find_references(filePath, line, character, includeDeclaration=true)
186
184
 
187
185
  // Get file structure
188
- LspDocumentSymbols(filePath) // Hierarchical outline
189
- LspWorkspaceSymbols(filePath, query="[target_symbol]") // Search by name
186
+ lsp_symbols(filePath, scope="document") // Hierarchical outline
187
+ lsp_symbols(filePath, scope="workspace", query="[target_symbol]") // Search by name
190
188
 
191
189
  // Get current diagnostics
192
190
  lsp_diagnostics(filePath) // Errors, warnings before we start
@@ -195,8 +193,8 @@ lsp_diagnostics(filePath) // Errors, warnings before we start
195
193
  ### AST-Grep Skill for Pattern Analysis:
196
194
 
197
195
  \`\`\`bash
198
- // Find structural patterns
199
- python3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' --lang ts src/
196
+ // Find structural patterns — run this from the ast-grep skill's directory; this skill ships no scripts/
197
+ python3 scripts/ast_grep_helper.py search 'function $NAME($$$) { $$$ }' src/ --lang ts
200
198
 
201
199
  # Preview refactoring first
202
200
  sg --pattern '[old_pattern]' --rewrite '[new_pattern]' --lang ts src/
@@ -205,7 +203,7 @@ sg --pattern '[old_pattern]' --rewrite '[new_pattern]' --lang ts src/
205
203
  ### Grep for Text Patterns:
206
204
 
207
205
  \`\`\`
208
- grep(pattern="[search_term]", path="src/", include="*.ts")
206
+ grep(pattern="[search_term]", path="src/") // narrow to *.ts with the grep tool's file-filter parameter
209
207
  \`\`\`
210
208
 
211
209
  ## 1.3: Collect Background Results
@@ -342,6 +340,11 @@ Which approach do you prefer?
342
340
  - Unit: \`bun test\` / \`npm test\` / \`pytest\` / etc.
343
341
  - Integration: [command if exists]
344
342
  - Type check: \`tsc --noEmit\` / \`pyright\` / etc.
343
+ - Lint: [project's linter command, the one Phase 6.3 runs]
344
+
345
+ ### Baseline (before any change)
346
+ - Pass counts: [X/Y passing per test command above]
347
+ - lsp_diagnostics: [pre-existing diagnostics recorded in Phase 1.2]
345
348
 
346
349
  ### Verification Checkpoints
347
350
  After each refactoring step:
@@ -405,17 +408,14 @@ After receiving plan from Plan agent:
405
408
 
406
409
  ## 4.3: Register Detailed Todos
407
410
 
408
- Convert Plan agent output into granular todos:
411
+ Convert Plan agent output into granular todos with the session's todo tool (each step from the plan becomes a todo, followed by its verify todo):
409
412
 
410
413
  \`\`\`
411
- TodoWrite([
412
- // Each step from the plan becomes a todo
413
- {"id": "refactor-1", "content": "Step 1: [description]", "status": "pending", "priority": "high"},
414
- {"id": "verify-1", "content": "Verify Step 1: run tests", "status": "pending", "priority": "high"},
415
- {"id": "refactor-2", "content": "Step 2: [description]", "status": "pending", "priority": "medium"},
416
- {"id": "verify-2", "content": "Verify Step 2: run tests", "status": "pending", "priority": "medium"},
417
- // ... continue for all steps
418
- ])
414
+ - refactor-1: Step 1: [description]
415
+ - verify-1: Verify Step 1: run tests
416
+ - refactor-2: Step 2: [description]
417
+ - verify-2: Verify Step 2: run tests
418
+ - ... continue for all steps
419
419
  \`\`\`
420
420
 
421
421
  **Mark phase-4 as completed.**
@@ -449,8 +449,8 @@ lsp_rename(filePath, line, character, newName) // Execute rename
449
449
  // Preview first
450
450
  sg --pattern '[pattern]' --rewrite '[rewrite]' --lang ts path/to/file.ts
451
451
 
452
- // If preview looks good, execute
453
- python3 scripts/ast_grep_helper.py replace '[pattern]' '[rewrite]' --lang ts path/to/file.ts --apply
452
+ // If preview looks good, execute (from the ast-grep skill's directory)
453
+ python3 scripts/ast_grep_helper.py replace '[pattern]' '[rewrite]' path/to/file.ts --lang ts --apply
454
454
  \`\`\`
455
455
 
456
456
  **For Structural Changes:**
@@ -543,7 +543,7 @@ bun run build # or npm run build, etc.
543
543
  \`\`\`typescript
544
544
  // Check all changed files
545
545
  for (file of changedFiles) {
546
- lsp_diagnostics(file) // Must all be clean
546
+ lsp_diagnostics(file) // Must be clean or same as the Phase 1 baseline: zero new diagnostics
547
547
  }
548
548
  \`\`\`
549
549
 
@@ -609,8 +609,8 @@ You already know these tools. Use them intelligently:
609
609
 
610
610
  ## LSP Tools
611
611
  Leverage LSP tools for precision analysis. Key patterns:
612
- - **Understand before changing**: \`LspGotoDefinition\` to grasp context
613
- - **Impact analysis**: \`LspFindReferences\` to map all usages before modification
612
+ - **Understand before changing**: \`lsp_goto_definition\` to grasp context
613
+ - **Impact analysis**: \`lsp_find_references\` to map all usages before modification
614
614
  - **Safe refactoring**: \`lsp_prepare_rename\` → \`lsp_rename\` for symbol renames
615
615
  - **Continuous verification**: \`lsp_diagnostics\` after every change
616
616
 
@@ -674,7 +674,7 @@ Then choose the path:
674
674
  - **Team path (5.1-T)**: when the plan recommends \`team\` AND \`file_independent_steps >= 3\`. Members execute in parallel, Lead orchestrates, a \`deep-high\` verifier lives outside the team.
675
675
  - **Legacy path (5.1-L)**: otherwise. Use the original 5.1 / 5.2 / 5.3 flow from above.
676
676
 
677
- Record the chosen path in the TodoWrite list.
677
+ Record the chosen path in the todo list.
678
678
 
679
679
  ## Phase 5.1-T: \`refactor-squad\` team execution
680
680
 
@@ -682,9 +682,9 @@ Record the chosen path in the TodoWrite list.
682
682
 
683
683
  1. When the session lists the \`team-mode\` skill, load it for lifecycle, message protocol, and limits.
684
684
  2. Call \`team_list\` and verify no active \`refactor-squad\` run exists; if one does, shutdown + delete the orphan before proceeding.
685
- 3. If \`~/.omo/teams/refactor-squad/config.json\` is missing, write it using the spec below.
685
+ 3. If the project-level spec \`.omo/teams/refactor-squad/config.json\` (under the project root) is missing, write it using the spec below.
686
686
 
687
- **Team spec** (\`~/.omo/teams/refactor-squad/config.json\`):
687
+ **Team spec** (\`<project root>/.omo/teams/refactor-squad/config.json\`):
688
688
 
689
689
  \`\`\`json
690
690
  {
@@ -748,7 +748,7 @@ While any team task is \`pending | claimed | in_progress\`:
748
748
  prompt=<files touched + verify-spec commands + instruction to return "PASS" or "FAIL:<failing test + specific error + suggested revert hunks>">
749
749
  )
750
750
  \`\`\`
751
- If \`deep\` is unavailable, fall back to \`category="unspecified-high"\`. Do not create a commit checkpoint until the verifier returns PASS.
751
+ If \`deep-high\` is unavailable, fall back to \`category="unspecified-high"\`. Do not create a commit checkpoint until the verifier returns PASS.
752
752
  - On a verifier PASS: make the commit checkpoint for that step (see original 5.3). Proceed.
753
753
  - On a verifier FAIL: Lead decides:
754
754
  - **Retry with fix hint**: \`team_task_update(status=pending)\` on the original step + \`team_send_message(teamRunId=<id>, to=<original member>, summary="retry", body=<specific failure from verifier>)\`. Runtime reassigns.
@@ -765,7 +765,7 @@ If Phase 5 used the team path, dismantle \`refactor-squad\` BEFORE producing the
765
765
  2. \`team_delete(teamRunId=<id>)\`.
766
766
  3. \`team_list\` to confirm no residual \`refactor-squad\` run.
767
767
 
768
- The \`~/.omo/teams/refactor-squad/config.json\` declaration stays on disk; next session reuses it.
768
+ The \`.omo/teams/refactor-squad/config.json\` declaration stays on disk in the project; next session reuses it.
769
769
 
770
770
  Append to the 6.6 summary a "Dispatch path" line and, when team path was used, team metrics (teamRunId, tasks created, verifier runs, team lifetime).
771
771
 
@@ -96,12 +96,12 @@ The agent looks for these ten categories. The first three are stylistic, the nex
96
96
  10. **Oversized modules** — any source file exceeding **250 pure LOC** (non-blank, non-comment lines). This is an architectural defect, not a style preference. Measure: `awk '!/^[[:space:]]*$/ && !/^[[:space:]]*(#|\/\/)/' <file> | wc -l`.
97
97
 
98
98
  **When found, do NOT just flag it. Execute a full modular refactoring:**
99
- 1. Run `check-no-excuse-rules.py` recursively on scope to list all violations.
99
+ 1. List every oversized file in scope: run the `awk` measure above on each source file. For `.py` files you may instead run the `programming` skill's Python checker (`uv run <programming skill dir>/scripts/python/check-no-excuse-rules.py <paths>`, rule `oversized-module`); it scans only `.py` files, so it never covers another language.
100
100
  2. For each oversized file, identify distinct responsibilities (single-responsibility principle).
101
101
  3. Plan the split: name each new file after the concept it owns (never `utils.py`, `helpers.py`, `common.py`, `part_1.py`).
102
102
  4. Present the split plan to the user before executing.
103
103
  5. Extract into clean modules with explicit `__init__.py` re-exports (re-exports ONLY, no logic in `__init__.py`).
104
- 6. Verify: run `check-no-excuse-rules.py` again — every file must be ≤250 pure LOC. Run tests, typecheck, lint.
104
+ 6. Verify: re-measure exactly as in step 1 — every file must be ≤250 pure LOC. Run tests, typecheck, lint.
105
105
 
106
106
  **Forbidden escapes**:
107
107
  - Counting blanks/comments toward budget.
@@ -110,7 +110,7 @@ The agent looks for these ten categories. The first three are stylistic, the nex
110
110
  - "It's generated" — only valid if the file lives in a build output directory.
111
111
  - "230 LOC, close enough" — a 230-LOC file about to grow is already over. Split now.
112
112
 
113
- KEEP: genuinely self-contained single-responsibility scripts (e.g., a standalone CLI checker). Opt out with `# noqa: SIZE_OK` in first 5 lines and a comment explaining why.
113
+ KEEP: genuinely self-contained single-responsibility scripts (e.g., a standalone CLI checker). Opt out with the language's SIZE_OK marker in the first 10 lines (`# noqa: SIZE_OK` in Python, the form the Python checker reads; `// allow: SIZE_OK` in `//`-comment languages) and a comment explaining why.
114
114
 
115
115
  ---
116
116
 
@@ -130,7 +130,7 @@ A pass is complete only when all applicable gates are green. Skip gates that are
130
130
 
131
131
  ## Process
132
132
 
133
- ### Phase 0: Plan with TodoWrite
133
+ ### Phase 0: Plan with the todo tool
134
134
 
135
135
  Create todos for all phases below. Mark `in_progress` one at a time.
136
136
 
@@ -270,8 +270,8 @@ If any gate fails or any checklist item flips:
270
270
 
271
271
  1. Identify the specific change that caused the failure.
272
272
  2. Explain why it broke things.
273
- 3. `git checkout` the affected file (or use `git diff` + targeted `Edit` to revert just the problematic hunk).
274
- 4. If genuine slop remains after revert, edit the file directly yourself — in parallel per file via multiple Edit calls — applying only the changes you can prove are safe.
273
+ 3. `git checkout` the affected file (or use `git diff` + targeted `edit` to revert just the problematic hunk).
274
+ 4. If genuine slop remains after revert, edit the file directly yourself — in parallel per file via multiple `edit` calls — applying only the changes you can prove are safe.
275
275
  5. Re-run the failing gate and re-walk the checklist for the affected file.
276
276
  6. Repeat until all gates green AND checklist clean.
277
277
 
@@ -163,7 +163,7 @@ For GOAL, CONSTRAINTS, BACKGROUND - review the full conversation history. The us
163
163
 
164
164
  ## Phase 1: Manual QA (you run it)
165
165
 
166
- You are the QA lane. Do not delegate hands-on QA to a sub-agent: the orchestrator owns the real-surface proof, exactly as the ulw-loop final gate records `manualQa` under the main session.
166
+ You are the QA lane. Do not delegate hands-on QA to a sub-agent: the orchestrator owns the real-surface proof, exactly as the ulw-loop final gate records `manualQa` under the main session. One exception: inside a `ulw-execute` run, whose root never runs QA itself, dispatch these scenarios to one QA worker and build the matrix from the artifacts it captures.
167
167
 
168
168
  1. **Reuse first.** If this session already captured real-surface evidence for the FINAL tree (an ultrawork or ulw-loop evidence directory, a `visual-qa` verdict on this same build), consume it as QA rows instead of re-running. A fix committed after a capture stales that capture: re-run the rows it covered.
169
169
  2. **Pick the channel that faithfully exercises the surface** and capture the artifact:
@@ -282,7 +282,7 @@ Store the lane verdicts independently:
282
282
  | Manual QA (Phase 1) | PASS/FAIL | rows, artifact paths |
283
283
  | Gate review | pending/APPROVE/REJECT/INCONCLUSIVE | - |
284
284
 
285
- If the reviewer stays silent after the reliability followup, record the lane INCONCLUSIVE and respawn one smaller reviewer scoped to the same inputs. If that retry also ends without a verdict, close the still-running agent if safe, keep the lane INCONCLUSIVE, and emit the final result naming the incomplete lane. Do not spin in repeated wait/followup cycles, and do not use a queued followup as a cancellation.
285
+ If the reviewer ends without a verdict (it completed without one, answered ack-only to one follow-up, or reported `BLOCKED:`), record the lane INCONCLUSIVE and respawn one smaller reviewer scoped to the same inputs. A reviewer that is still running is alive, not silent. If that retry also ends without a verdict, close the still-running agent if safe, keep the lane INCONCLUSIVE, and emit the final result naming the incomplete lane. Do not spin in repeated wait/followup cycles, and do not use a queued followup as a cancellation.
286
286
 
287
287
  After the lane reaches a terminal state and before delivering the verdict, tear down the review worktree: run `git worktree unlock <path>` followed by `git worktree remove <path>`. The reviewer runs inside that worktree, so removing it earlier destroys its working directory; a crashed review leaves the locked tree as a recoverable marker for manual cleanup.
288
288
 
@@ -22,7 +22,7 @@ User request
22
22
  +- archive snapshot of a dead or changed page ------- TIER 1 insane-search (surrogates, provenance-tagged)
23
23
  |
24
24
  +- Chinese platform (xhs/douyin/weibo/bilibili/v2ex/wechat) TIER 1.5 agent-reach
25
- +- podcast transcript / stock forum ----------------- TIER 1.5 agent-reach
25
+ +- podcast transcript ------------------------------- TIER 1.5 agent-reach
26
26
  +- Twitter feed / LinkedIn profile / GitHub via CLI - TIER 1.5 agent-reach
27
27
  |
28
28
  +- Tier 1/1.5 returned empty or partial ------------- TIER 2 2a owned engine (stealth)
@@ -71,8 +71,8 @@ The full engine harness (rules R1-R7, the Phase 0 official-API index, the no-sit
71
71
  | search | Exa AI | [references/agent-reach/search.md](references/agent-reach/search.md) |
72
72
 
73
73
  ```bash
74
- mcporter call 'douyin.parse_douyin_video_info(url: "<URL>")' # douyin, zero-config
75
- curl -s "https://r.jina.ai/https://weibo.com/<uid>/<pid>" # weibo via Jina
74
+ mcporter call 'douyin.parse_douyin_video_info(share_link: "<URL>")' # douyin, zero-config
75
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://weibo.com/<uid>/<pid>" # weibo via Jina (key required)
76
76
  yt-dlp --dump-json "<bilibili-url>" # Bilibili (overseas: add --cookies-from-browser)
77
77
  curl -s "https://www.v2ex.com/api/topics/hot.json" # V2EX public API
78
78
  ```
@@ -115,17 +115,19 @@ When the blocked flow needs the user's account, drive the browser they are alrea
115
115
 
116
116
  ### Cookie login (cross-platform)
117
117
 
118
- `scripts/extract_cookies.py` reads cookies from a local Chromium-family or Firefox-family browser and optionally injects them into the running CDP session. It resolves browser profile paths and decrypts cookie values per-OS (macOS Keychain, Linux libsecret, Windows DPAPI):
118
+ A login the user holds goes through Tier 2b, never through their cookies: the `browser` skill forbids copying a session out of the user's real browser profile (`references/owned-engine/network.md`, Cookies).
119
+
120
+ `scripts/extract_cookies.py` reads cookies from the default profile store of a local Chromium-family or Firefox-family browser and optionally injects them over CDP. It resolves browser profile paths and decrypts cookie values per-OS (macOS Keychain, Linux libsecret, Windows DPAPI). Because it always reads that default store, run it only where that browser profile is not the user's live profile (for example a dedicated automation account whose browser the task owns); on the user's own machine it would copy their session, so use Tier 2b instead.
119
121
 
120
122
  ```bash
121
123
  # Extract cookies to a file:
122
124
  mkdir -p ~/.local/state/omo-cookies
123
125
  python3 -B scripts/extract_cookies.py --browser chrome --domain youtube.com --output ~/.local/state/omo-cookies/youtube.cookies.json
124
- # Extract and inject into the running CDP session:
126
+ # Extract and inject over CDP (needs a browser started with --remote-debugging-port=9242; connectPipe opens no port):
125
127
  python3 -B scripts/extract_cookies.py --browser chrome --domain youtube.com --inject --cdp 9242
126
128
  ```
127
129
 
128
- Cookie export files are written with owner-only `0600` permissions. Do not place live auth cookies in shared temp directories or commit them to a repo. Cookie injection sends values to CDP over stdin rather than argv. Cookies apply on next navigation — reload after injecting. Google services use fingerprint-bound tokens that may not transfer across browser profiles. Limits in [references/chrome-stealth.md](references/chrome-stealth.md).
130
+ For a Tier 2a owned page, load the exported file and call `omowright.injectCookies(page, cookies)` instead (see [references/chrome-stealth.md](references/chrome-stealth.md)). Cookie export files are written with owner-only `0600` permissions. Do not place live auth cookies in shared temp directories or commit them to a repo. Cookie injection sends values to CDP over stdin rather than argv. Cookies apply on next navigation — reload after injecting. Google services use fingerprint-bound tokens that may not transfer across browser profiles. Limits in [references/chrome-stealth.md](references/chrome-stealth.md).
129
131
 
130
132
  ## Reference docs
131
133
 
@@ -139,7 +141,8 @@ Cookie export files are written with owner-only `0600` permissions. Do not place
139
141
 
140
142
  ```bash
141
143
  # agent-reach auth: set the channel-specific env vars from each tool's docs only if you have access
142
- # insane-search needs no env vars — it auto-installs deps on first run
144
+ # insane-search: JINA_API_KEY only for the Jina Reader route (the engine skips that surrogate without it)
145
+ # insane-search Python deps: the install one-liner in references/insane-search/README.md
143
146
  ```
144
147
 
145
148
  ## Anti-patterns
@@ -61,7 +61,7 @@ is a regression, not an upgrade:
61
61
  - **Module split of the fetch chain** — `curl_probe` / `referers` / `url_transforms` /
62
62
  `waf_detector` / `validators` / `executor` / `summary` as separate modules rather than
63
63
  one monolith.
64
- - **The Python test suite** under `engine/tests/` with its HTML/JSON fixtures.
64
+ - **The Python test suite** under `engine/tests/` with its HTML/JSON fixtures (source checkout only: the skill copy filter drops `engine/tests/` from every shipped edition).
65
65
  - **De-personalization** — no personal absolute paths, no personal auth token literals,
66
66
  no personal browser choice; enforced by `depersonalization-gate.test.ts`.
67
67
  - **Skill-level layering** — the engine is Tier 1 under a router that also owns Tier 1.5
@@ -115,7 +115,7 @@ Any future upstream sync preserves BOTH sides. Concretely:
115
115
 
116
116
  ## OVERVIEW
117
117
 
118
- A 17-module Python package embedded in the `ultimate-browsing` skill: a site-agnostic fetch chain that escalates from a cheap curl probe to a real browser, with declarative WAF and surrogate registries. Not "optional scripts" — it has its own CLI entry (`python3 -B -m engine URL`; `-B` keeps bytecode caches out of a signed app bundle, #11373), two YAML config schemas, a 4-file test suite, and a standalone CI guard. Package exports (`__init__.py`): `fetch`, `FetchResult`, `Attempt`, `Verdict`, `ValidationResult`, `validate`, `CHALLENGE_MARKERS`, `detect`, `TRANSFORMS`, `apply_transform`.
118
+ A 13-file Python package (`__init__.py`, `__main__.py` and 11 modules) embedded in the `ultimate-browsing` skill: a site-agnostic fetch chain that escalates from a cheap curl probe to a real browser, with declarative WAF and surrogate registries. Not "optional scripts" — it has its own CLI entry (`python3 -B -m engine URL`; `-B` keeps bytecode caches out of a signed app bundle, #11373), two YAML config schemas, a 6-file test suite (source checkout only), and a standalone CI guard. Package exports (`__init__.py`): `fetch`, `FetchResult`, `Attempt`, `Verdict`, `ValidationResult`, `validate`, `CHALLENGE_MARKERS`, `detect`, `TRANSFORMS`, `apply_transform`.
119
119
 
120
120
  ## THE NO-SITE-NAME RULE (enforced in CI)
121
121
 
@@ -170,11 +170,11 @@ python3 -B -m engine URL [--selector S] [--device auto|desktop|mobile]
170
170
 
171
171
  ## TESTS
172
172
 
173
- `tests/` — `test_surrogate.py` (staleness, proxy gating, short-circuit), `test_surrogate_validators.py`, `test_fetch_chain.py`, `test_playwright_templates.py`, plus HTML/JSON fixtures under `tests/fixtures/`.
173
+ `tests/` (source checkout only; not shipped with the skill) — `test_surrogate.py` (staleness, proxy gating, short-circuit), `test_surrogate_validators.py`, `test_fetch_chain.py`, `test_playwright_templates.py`, `test_playwright_stealth.py`, `test_executor_timeout.py`, plus HTML/JSON fixtures under `tests/fixtures/`.
174
174
 
175
175
  ## NOTES
176
176
 
177
177
  - `summary.py` emits an **R7 API-first hint** after >=3 challenge verdicts against a known WAF profile: look for `/api/`, `/graphql`, or `.json` endpoints, which usually carry weaker WAF protection than the HTML surface.
178
178
  - `templates/` holds the Playwright JS templates (`playwright_real_chrome.js`, `playwright_mobile_chrome.js`) the executor drives.
179
179
  - `url_transforms.py` transforms stay domain-agnostic (`mobile_subdomain`, `am_prefix`, `drop_www`).
180
- - Parent: [`packages/shared-skills/AGENTS.md`](../../../AGENTS.md).
180
+ - Parent (source checkout only; not shipped with the skill): `packages/shared-skills/AGENTS.md`.
@@ -25,13 +25,13 @@
25
25
  mcporter call 'exa.web_search_exa(query: "query", numResults: 5)'
26
26
 
27
27
  # 通用网页阅读
28
- curl -s "https://r.jina.ai/URL"
28
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/URL"
29
29
 
30
30
  # GitHub 搜索
31
31
  gh search repos "query" --sort stars --limit 10
32
32
 
33
33
  # Twitter 搜索
34
- twitter search "query" --limit 10
34
+ twitter search "query" -n 10
35
35
 
36
36
  # YouTube/B站字幕
37
37
  yt-dlp --write-sub --skip-download -o "/tmp/%(id)s" "URL"
@@ -25,5 +25,5 @@ mcporter call 'linkedin-scraper.search_jobs(keyword: "software engineer", limit:
25
25
  如果 MCP 不可用,可以用 Jina Reader:
26
26
 
27
27
  ```bash
28
- curl -s "https://r.jina.ai/https://linkedin.com/in/username"
28
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://linkedin.com/in/username"
29
29
  ```
@@ -105,7 +105,7 @@ twitter likes
105
105
 
106
106
  ```bash
107
107
  # 使用 Jina Reader 读取
108
- curl -s "https://r.jina.ai/https://weibo.com/USER_ID/POST_ID"
108
+ curl -s -H "Authorization: Bearer ${JINA_API_KEY}" "https://r.jina.ai/https://weibo.com/USER_ID/POST_ID"
109
109
  ```
110
110
 
111
111
  > 微博主要通过网页抓取,推荐使用通用网页读取方式。