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
@@ -42,8 +42,9 @@ Per-surface patterns and pitfalls: read `references/execution-surfaces.md` befor
42
42
  older spellings.
43
43
  - **numpy** when numeric work goes beyond SQL/DataFrame aggregation: statistical tests,
44
44
  linear algebra, FFT, random sampling.
45
- - **matplotlib** for every chart — read `references/visualization.md` first; it carries the
46
- quality bar and a mandatory visual check.
45
+ - **matplotlib** for charts in a kernel, a file or a document; a chart shown inline beside a
46
+ reply is drawn in HTML instead. Read `references/visualization.md` first either way; it
47
+ carries the quality bar, the inline case and a mandatory visual check.
47
48
 
48
49
  Performance folklore ("X is Nx faster at filtering") varies with data shape, cardinality,
49
50
  and hardware. When the engine choice materially matters, measure on the actual data instead
@@ -65,10 +66,11 @@ a direct scan. Then place the work:
65
66
  takes longer.
66
67
  - **Query remotely, in place** when the data lives elsewhere: DuckDB reads http(s)/S3
67
68
  Parquet and CSV with projection and predicate pushdown, so fetch the columns and rows the
68
- question needs, never the whole file. When data sits on another machine you can execute
69
- on, ship the query to the data and return the small result. Rule: result much smaller
70
- than data — move the query; repeated local iteration planned — move a pruned copy of the
71
- data once.
69
+ question needs, never the whole file. When data sits in a database, run the aggregation
70
+ there in its own SQL and pull back the result rows, never a table dump. When data sits on
71
+ another machine you can execute on, ship the query to the data and return the small
72
+ result. Rule: result much smaller than data — move the query; repeated local iteration
73
+ planned — move a pruned copy of the data once.
72
74
 
73
75
  Sizing heuristics and recipes: `references/placement.md`.
74
76
 
@@ -8,13 +8,17 @@ ten times) or kills the machine (loading a dataset larger than RAM and swapping)
8
8
  Three facts, one cell or script:
9
9
 
10
10
  ```python
11
- import os, shutil, subprocess, sys
11
+ import os, re, shutil, subprocess, sys
12
12
  size = os.path.getsize("data.csv") # bytes on disk
13
13
  disk_free = shutil.disk_usage(".").free # spill headroom
14
- if sys.platform == "darwin":
15
- ram = int(subprocess.run(["sysctl", "-n", "hw.memsize"], capture_output=True, text=True).stdout)
16
- else:
17
- ram = os.sysconf("SC_PAGE_SIZE") * os.sysconf("SC_PHYS_PAGES")
14
+ if sys.platform == "darwin": # free RAM = free + inactive + speculative pages
15
+ vm = subprocess.run(["vm_stat"], capture_output=True, text=True).stdout
16
+ page = int(re.search(r"page size of (\d+)", vm).group(1))
17
+ ram_free = page * sum(int(re.search(rf"{k}:\s+(\d+)", vm).group(1))
18
+ for k in ("Pages free", "Pages inactive", "Pages speculative"))
19
+ else: # Linux: MemAvailable
20
+ ram_free = next(int(line.split()[1]) * 1024 for line in open("/proc/meminfo")
21
+ if line.startswith("MemAvailable:"))
18
22
  # row estimate without loading (DuckDB streams the scan):
19
23
  # duckdb.sql("SELECT count(*) FROM 'data.csv'")
20
24
  ```
@@ -6,10 +6,10 @@ This skill's uv lane (kernel-less harnesses, isolated one-shots) runs through `u
6
6
 
7
7
  | Platform | Command |
8
8
  |---|---|
9
- | macOS / Linux / WSL / Git Bash | `bash scripts/setup-uv.sh` |
10
- | Windows (PowerShell) | `powershell -ExecutionPolicy Bypass -File scripts/setup-uv.ps1` |
9
+ | macOS / Linux / WSL | `bash scripts/setup-uv.sh` |
10
+ | Windows (PowerShell; also from Git Bash, where `setup-uv.sh` exits) | `powershell -ExecutionPolicy Bypass -File scripts/setup-uv.ps1` |
11
11
 
12
- Both scripts: detect OS + architecture → install uv to the latest release when missing → upgrade it when present (`uv self update`) → make it resolvable for the current shell → verify with `uv --version`. They are idempotent — safe to re-run any time.
12
+ Both scripts: detect OS + architecture → install uv to the latest release when missing → upgrade it when present (`uv self update`) → make it resolvable for the script's own `uv --version` check (an already-open shell still needs the PATH line below) → verify with `uv --version`. They are idempotent — safe to re-run any time.
13
13
 
14
14
  ## Manual install per platform
15
15
 
@@ -1,7 +1,11 @@
1
1
  # Visualization
2
2
 
3
- A chart exists to answer a question at a glance. Render it with matplotlib (resident in most
4
- Python kernels; `uv run --with matplotlib` otherwise), then look at it before delivering —
3
+ A chart exists to answer a question at a glance. A chart shown inline beside a reply
4
+ (`show_html_page`, `html_preview`, `html_render`) is drawn in HTML, never as a matplotlib PNG:
5
+ an image ignores the reader's theme and width. When the `visualize` skill is available, it builds
6
+ that page. There this file's chart-type table, Figures and Quality bar apply, and the matplotlib
7
+ calls do not. Everywhere else (a kernel, a file, a document) render it with matplotlib (resident
8
+ in most Python kernels; `uv run --with matplotlib` otherwise). Either way, look at it before delivering —
5
9
  a chart nobody inspected is not evidence.
6
10
 
7
11
  ## When to chart
@@ -22,6 +26,15 @@ question — decoration dilutes the answer.
22
26
  | Composition of a whole? | stacked or 100% bar — pie only for four or fewer slices |
23
27
  | Many series over time? | small multiples over one spaghetti chart |
24
28
 
29
+ ## Figures — every chart
30
+
31
+ - **Days start at the reader's midnight.** Cut daily, weekly and monthly buckets in the
32
+ reader's time zone, not UTC, and name the zone in the axis label or caption. A bucket still
33
+ filling (today, this week) is marked partial on its own bar, or it reads as a drop.
34
+ - **Cross-check one figure.** Recompute a headline number from a second source (another
35
+ table, the system's own dashboard, a raw count) and say beside the chart whether it
36
+ matched, and by how much it differed if not.
37
+
25
38
  ## Quality bar — every chart
26
39
 
27
40
  - Title states the finding ("Seoul overtook Busan in March"), not the dataset name.
@@ -51,8 +64,10 @@ matplotlib.rcParams["axes.unicode_minus"] = False # keeps the minus sign rende
51
64
 
52
65
  ## Output contract
53
66
 
54
- 1. Save a PNG next to the work: `plt.savefig(path, dpi=150, bbox_inches="tight")`.
55
- 2. Also render inline when the surface displays rich output (kernels usually do).
67
+ 1. Inline page beside a reply: no PNG. Draw the computed figures in HTML and preview them in
68
+ both themes, following the `visualize` skill when it is available.
69
+ 2. Otherwise save a PNG next to the work: `plt.savefig(path, dpi=150, bbox_inches="tight")`,
70
+ and also render it inline when the surface displays rich output (kernels usually do).
56
71
  3. Report the file path together with the answer.
57
72
 
58
73
  ## Visual QA — mandatory
@@ -26,7 +26,7 @@ The rest of this file is a map. **The knowledge is in `references/`.** This file
26
26
 
27
27
  ## Runtime Setup — MANDATORY READING BEFORE ATTACHING
28
28
 
29
- The methodology is language-agnostic. The commands to launch, attach, breakpoint, and inspect are not. **Open the matching reference before Phase 0. Not during. Not after.**
29
+ The methodology is language-agnostic. The commands to launch, attach, breakpoint, and inspect are not. **Open the matching reference the moment you know the runtime (Phase 0, step 2) and before you attach anything. Not after.**
30
30
 
31
31
  | Your runtime is… | Open this before attaching anything | Non-negotiable because… |
32
32
  |---|---|---|
@@ -39,7 +39,7 @@ The methodology is language-agnostic. The commands to launch, attach, breakpoint
39
39
 
40
40
  **If you cannot honestly say you just opened the reference for your runtime, open it now.**
41
41
 
42
- > 🚨 **Native binary vs bundled binary — check before committing**: `file ./target` calls them both Mach-O / ELF. The 30-second discriminator is `du -h ./target` (50 MB+ suspect bundled) plus `strings -n 12 ./target | rg -iE 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|tauri'`. If hits → bundled-js-binary.md. If clean → native-binary.md.
42
+ > 🚨 **Native binary vs bundled binary — check before committing**: `file ./target` calls them both Mach-O / ELF. The 30-second discriminator is `du -h ./target` (50 MB+ suspect bundled) plus `strings -n 12 ./target | rg -i 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|tauri'`. If hits → bundled-js-binary.md. If clean → native-binary.md.
43
43
 
44
44
  ---
45
45
 
@@ -56,7 +56,7 @@ These are not "optional extras". They are the correct tool in their domain, and
56
56
  | **Frida** | Any running process you must instrument live without source or symbols — hook a function and print real argument values, trace calls, stub a return. Complements Ghidra: Ghidra reads the bytes, Frida watches them execute. **If Ghidra's static decompile has hit its limit, reach for Frida.** | 📖 **[references/tools/frida.md](references/tools/frida.md)** |
57
57
  | **DAP client (`dap.mjs`)** | Any time you would drive a debugger through a PTY and screen-scrape its text. Debuggers already speak the machine-readable Debug Adapter Protocol (debugpy, `dlv dap`, lldb-dap, js-debug); this bundled script drives it with bounded, monitorable output. **Prefer it over scraping `gdb`/`pdb` whenever the debugger speaks DAP.** Design modeled on oh-my-pi's `debug` tool (github.com/can1357/oh-my-pi). | 📖 **[references/tools/dap.md](references/tools/dap.md)** |
58
58
 
59
- **Failing to use these tools in their domain is a process failure, not a stylistic choice.** If the bug is in a browser and you did Phase 8 without Playwright, you are doing it wrong. If the bug is in a stripped binary and you read hex with `xxd`, you are doing it wrong. The references tell you how. Read them.
59
+ **Failing to use these tools in their domain is a process failure, not a stylistic choice.** If the bug is in a browser and you did Phase 8 without omowright, you are doing it wrong. If the bug is in a stripped binary and you read hex with `xxd`, you are doing it wrong. The references tell you how. Read them.
60
60
 
61
61
  ---
62
62
 
@@ -74,8 +74,8 @@ Each phase has exactly one reference. Read it as you enter the phase — not in
74
74
  | 5 | **User decision escalation** — only when evidence exhausted and the call has policy implications | [references/methodology/05-escalate.md](references/methodology/05-escalate.md) |
75
75
  | 6 | **Root cause confirmation** — confirmed only when toggling the suspected cause toggles the bug | [references/methodology/06-fix.md](references/methodology/06-fix.md) |
76
76
  | 7 | **Fix locked by a failing proof** — reuse the owner test that already fails or add one regression that fails on the pre-fix code, minimal green, no scope expansion | [references/methodology/06-fix.md](references/methodology/06-fix.md) |
77
- | 8 | **Manual QA** — actually use the system (tmux for CLI, Playwright for browser, real curl for API, real repro for binary) | [references/methodology/08-qa.md](references/methodology/08-qa.md) |
78
- | 9 | **Cleanup** — walk the journal, revert every artifact, verify `git diff` shows only fix + test | [references/methodology/09-cleanup.md](references/methodology/09-cleanup.md) |
77
+ | 8 | **Manual QA** — actually use the system (tmux for CLI, omowright for browser, real curl for API, real repro for binary) | [references/methodology/08-qa.md](references/methodology/08-qa.md) |
78
+ | 9 | **Cleanup** — walk the journal, revert every artifact, verify `git diff` shows only fix + test (plus any Phase 7 oversized-file split) | [references/methodology/09-cleanup.md](references/methodology/09-cleanup.md) |
79
79
  | 10 | **Final verification** — four evidence gates before declaring done | [references/methodology/09-cleanup.md](references/methodology/09-cleanup.md) |
80
80
 
81
81
  **Phase references are short by design.** Reading one takes a minute. Skipping one costs an hour.
@@ -66,7 +66,7 @@ Branch depending on what's available.
66
66
 
67
67
  When the `team_*` tools are present, create a **debug-squad** team and split investigation across members working on different evidence sources. This is the right default whenever you have ≥3 hypotheses and any of them would take >10 minutes to investigate single-threaded.
68
68
 
69
- **Team spec** — write to `~/.omo/teams/debug-squad/config.json`:
69
+ **Team spec** — write to `.omo/teams/debug-squad/config.json` under the project root (the project-scoped spec location the team loader reads):
70
70
 
71
71
  ```json
72
72
  {
@@ -86,7 +86,7 @@ When the `team_*` tools are present, create a **debug-squad** team and split inv
86
86
  {
87
87
  "kind": "category",
88
88
  "category": "deep-low",
89
- "prompt": "You are the Reproduction Engineer. Your job: build the smallest reliable repro — a curl command, a vitest/pytest/go test, a tmux script, a Playwright script for browser bugs, a pwntools script for binary targets. It must reproduce on first try and be copy-pasteable by the Lead. Document exact input, expected output, observed output. Save repro artifacts under /tmp/ and tell the Lead to journal them. If the bug is browser-based you MUST use Playwright CLI — do not simulate with curl."
89
+ "prompt": "You are the Reproduction Engineer. Your job: build the smallest reliable repro — a curl command, a vitest/pytest/go test, a tmux script, an omowright script for browser bugs, a pwntools script for binary targets. It must reproduce on first try and be copy-pasteable by the Lead. Document exact input, expected output, observed output. Save repro artifacts under /tmp/ and tell the Lead to journal them. If the bug is browser-based you MUST drive a real browser through omowright (references/tools/browser-qa.md) — do not simulate with curl."
90
90
  },
91
91
  {
92
92
  "kind": "category",
@@ -100,6 +100,8 @@ Only cleanup directly related to the fix. Do not re-architect.
100
100
 
101
101
  If the code around the fix is rough, note it in the journal as a follow-up for the user; do not expand scope here. Refactoring during a bugfix is how one-line fixes turn into hundred-line diffs nobody can review.
102
102
 
103
+ **The one carve-out, and it runs before step 2, not after green:** if the fix must add lines to a file that already exceeds the `programming` skill's 250 pure-LOC ceiling (its DEFECT row forbids new lines in that file), first extract the unit you are touching into its own file as a separate, behavior-preserving move (the red test still fails for the same reason, every other test still passes), journal it, then make the minimal fix in the extracted file. The `programming` skill's SIZE_OK and pure-data-table exceptions still apply. That split ships with the fix; any other rough code stays a follow-up.
104
+
103
105
  ### 4. Regression — full suite green
104
106
 
105
107
  Run the full test suite for the affected package (not just the one new test). Existing tests must still pass.
@@ -108,13 +108,13 @@ Last gate before reporting done. All four gates must be true, and all four must
108
108
 
109
109
  ### The four gates
110
110
 
111
- 1. **Red→green toggle confirmed** — show the failing test output from before the fix and passing output after. Both outputs visible in the reply or the journal.
111
+ 1. **Red→green toggle confirmed** — show the failing test output from before the fix and passing output after. Both outputs visible in the final message (the journal was removed in Phase 9).
112
112
 
113
113
  2. **Full test suite green** — show the suite's final pass line (e.g. `42 passed in 3.14s`). Not just the new test.
114
114
 
115
115
  3. **Manual QA reproduced the fix** — show the command or scenario that originally failed and its now-correct output. Verbatim, not paraphrased.
116
116
 
117
- 4. **Working tree clean of debug artifacts** — show `git diff --stat` output containing only fix + test, plus `git status` clean of untracked debug files.
117
+ 4. **Working tree clean of debug artifacts** — show `git diff --stat` output containing only fix + test (plus the Phase 7 oversized-file split, if one was required), plus `git status` clean of untracked debug files.
118
118
 
119
119
  If any of the four lacks evidence, you have not finished — return to the appropriate phase.
120
120
 
@@ -59,7 +59,7 @@ HTTPS_PROXY=http://127.0.0.1:8888 SSL_CERT_FILE=~/.mitmproxy/mitmproxy-ca-cert.p
59
59
  ```bash
60
60
  # DYLD_INSERT_LIBRARIES / LD_PRELOAD shim approach
61
61
  # Wrap the network call to log payload, return a fake 200
62
- # See pwntools.md for shim examples
62
+ # See ../runtimes/native-binary.md (DYLD_INSERT_LIBRARIES interception; "Option C: Wrap / shim") for shim examples
63
63
  ```
64
64
 
65
65
  **Strength**: Wire-level ground truth, but requires the target to honor your proxy / preload.
@@ -41,7 +41,7 @@ Step 3 is the unlock — once you have plaintext source on disk, the rest is nor
41
41
 
42
42
  ```bash
43
43
  # Look for runtime-specific markers in plaintext strings
44
- strings -n 12 ./target 2>/dev/null | rg -iE 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|NODE_SEA_BLOB|tauri|ESZIP_V2|denort' | head -20
44
+ strings -n 12 ./target 2>/dev/null | rg -i 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|NODE_SEA_BLOB|tauri|ESZIP_V2|denort' | head -20
45
45
  ```
46
46
 
47
47
  | Marker pattern | Bundler | Source format |
@@ -20,7 +20,7 @@ Quick check:
20
20
  ```bash
21
21
  file ./target # Mach-O / ELF / PE - inconclusive
22
22
  du -h ./target # 50 MB+ for a "simple CLI" → suspect bundled
23
- strings -n 12 ./target | rg -iE 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|tauri' | head -5
23
+ strings -n 12 ./target | rg -i 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|tauri' | head -5
24
24
  ```
25
25
 
26
26
  **If any hits** → close this file, open [bundled-js-binary.md](bundled-js-binary.md) instead. Following the Ghidra/pwndbg path on a bundled-app binary wastes hours decompiling the runtime VM while the app-level bundle is recoverable with the right per-bundler tool (plaintext for Bun/pkg/nexe/Electron-asar; eszip / V8-cache / `.pyc` for Deno / Node SEA / PyInstaller).
@@ -25,8 +25,6 @@ const profile = mkdtempSync(join(tmpdir(), "debug-repro-"))
25
25
  const browser = await omowright.connectPipe({ browserPath, browserArgs: ["--headless", `--user-data-dir=${profile}`], storageRoot: profile })
26
26
  const page = await browser.newTab("about:blank")
27
27
  const trace = omowright.createTrace(page, { dir: traceDir }) // trace.jsonl + trace.har + before/after screenshots
28
- const consoleErrors = []
29
- page.on("console", (entry) => { if (entry.type === "error") consoleErrors.push(entry.text) })
30
28
  try {
31
29
  await trace.step("open", () => page.goto(url, { waitUntil: "load" }))
32
30
  await trace.step("submit", async () => {
@@ -36,6 +34,7 @@ try {
36
34
  await page.waitForURL(/\/done/, { timeout: 10_000 })
37
35
  })
38
36
  await Bun.write(pngPath, await page.screenshot())
37
+ const consoleErrors = (await page.console.logs({ levels: ["error"] })).map((entry) => entry.message)
39
38
  } finally {
40
39
  await trace.stop()
41
40
  await browser.close()
@@ -5,7 +5,7 @@ description: "Builds, styles, and polishes anything drawn with HTML, CSS, or SVG
5
5
 
6
6
  # Frontend
7
7
 
8
- This file is a router over `references/`; the rules live there. The flow is ground -> brief -> build -> subtract -> verify. The bar is restraint with a visible hierarchy: one primary action, the important thing first, nothing on the screen without a job. A quiet, correct screen that holds its hierarchy at 390 and 1440 in both themes is a finish. Atmosphere, motion, and award-grade surface work are opt-in: build them when the brief asks (a named brand, "premium", "make it stunning", a marketing page), never by default for an internal tool, dashboard, admin screen, report, or figure.
8
+ This file is a router over `references/`; the rules live there. The flow is ground -> brief -> build -> subtract -> verify. The bar is restraint with a visible hierarchy: one primary action, the important thing first, nothing on the screen without a job. A quiet, correct screen that holds its hierarchy at 390 and 1440 in both themes is a finish. Atmosphere, motion, and award-grade surface work are opt-in: build them when the brief asks (a named brand, "premium", "make it stunning", a marketing page), never by default for an internal tool, dashboard, admin screen, report, or figure. An inline page shown beside a reply (a chart, table, or diagram for `show_html_page`, `html_preview`, or `html_render`) follows the `visualize` skill when it is available; either way it is exempt from the `DESIGN.md` gate, the Lighthouse audit, and the research lanes, and keeps the build rules, the Draft guard, and the lint.
9
9
 
10
10
  ## Route: name the references, read exactly those
11
11
 
@@ -131,7 +131,7 @@ uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000
131
131
 
132
132
  ```bash
133
133
  python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --design-system -p "Project" # design-system generation
134
- python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --domain <domain> # product style typography color landing chart ux react web prompt
134
+ python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --domain <domain> # product style typography color landing chart ux react web icons google-fonts
135
135
  python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --stack <stack> # html-tailwind react nextjs vue svelte astro swiftui react-native flutter shadcn jetpack-compose
136
136
  ```
137
137
 
@@ -60,7 +60,7 @@ rather than borders, creating layers you feel more than see."
60
60
  | Status/info | --status-info | #2563EB | #3B82F6 | Informational |
61
61
 
62
62
  ### Rules
63
- - Accent marks the one or two most likely actions on a screen, on the control's background rather than its glyph or label. Peer choices differ by style, never by size. Nothing decorative carries accent.
63
+ - Accent marks the screen's one primary action, on the control's background rather than its glyph or label; a second likely action takes a quieter style. Peer choices differ by style, never by size. Nothing decorative carries accent.
64
64
  - Never introduce a color not in this table. Extend the table first.
65
65
 
66
66
  ## 3. Typography
@@ -73,4 +73,4 @@ pdftoppm -png -r 150 report.pdf out/page # one PNG per page
73
73
 
74
74
  Read every page image for: blank or near-empty pages, a block stranded alone after a keep-together push, a table or figure split mid-exhibit, a heading orphaned at a page foot, clipped or overflowing text, and a running header or footer that drifted or vanished.
75
75
 
76
- Extracting the text proves the words are present. It cannot see any defect in this list - layout is exactly the information that extraction discards. Fix, re-render, and look again until the pages are clean; the same standard governs the `ulw-research` delivery gate and the `mass-ulw` verification wave.
76
+ Extracting the text proves the words are present. It cannot see any defect in this list - layout is exactly the information that extraction discards. Fix, re-render, and look again until the pages are clean. The `ulw-research` delivery gate and the `mass-ulw` verification wave hold the same page-by-page inspection standard; `ulw-research` bounds its repair loop (its `repair decide` stop rules) and ships any residual defect listed in its manifest.
@@ -90,7 +90,6 @@ Quick audit via the cross-platform Python CLI (macOS, Linux, Windows):
90
90
 
91
91
  ```bash
92
92
  uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000
93
- uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000 --threshold 95
94
93
  uv run $SKILL_DIR/scripts/perfection/lighthouse-audit.py https://localhost:3000 --desktop-only
95
94
  bun $SKILL_DIR/scripts/perfection/check-draft-guard.ts src/ # exit 1 = accent stripe or outline, promo copy, emoji icon, hype badge, or vanity stat
96
95
  ```
@@ -20,17 +20,38 @@ If the project does not yet have react-scan and react-doctor wired into its dev
20
20
  import { chromium } from "playwright";
21
21
  import { playAudit } from "playwright-lighthouse";
22
22
 
23
+ declare global {
24
+ interface Window {
25
+ __renderEvents: unknown[];
26
+ }
27
+ }
28
+
29
+ // Narrow only the fields this gate reads from a react-scan commit event.
30
+ function hasUnnecessaryRender(event: unknown): boolean {
31
+ if (typeof event !== "object" || event === null || !("tree" in event) || !Array.isArray(event.tree)) return false;
32
+ return event.tree.some(
33
+ (node: unknown) =>
34
+ typeof node === "object" &&
35
+ node !== null &&
36
+ "changeDescription" in node &&
37
+ typeof node.changeDescription === "object" &&
38
+ node.changeDescription !== null &&
39
+ "kind" in node.changeDescription &&
40
+ node.changeDescription.kind === "unnecessary",
41
+ );
42
+ }
43
+
23
44
  const browser = await chromium.launch({ channel: "chrome" });
24
45
  const context = await browser.newContext();
25
46
 
26
47
  // Inject react-scan/lite BEFORE the app boots
27
48
  await context.addInitScript(() => {
28
- // @ts-ignore — pulled from the project's node_modules or a self-hosted bundle
49
+ // react-scan is a dev dependency of the project (see ../design/react-dev-tooling-skill.md), so its types resolve
29
50
  import("react-scan/lite").then(({ instrument }) => {
30
- (window as any).__renderEvents = [];
51
+ window.__renderEvents = [];
31
52
  instrument({
32
- onEvent: (event: any) => {
33
- if (event.kind === "commit") (window as any).__renderEvents.push(event);
53
+ onEvent: (event) => {
54
+ if (event.kind === "commit") window.__renderEvents.push(event);
34
55
  },
35
56
  recordChangeDescriptions: true,
36
57
  includeFiberSource: true,
@@ -51,10 +72,8 @@ await playAudit({
51
72
  });
52
73
 
53
74
  // Pull render events and assert on render quality
54
- const events = await page.evaluate(() => (window as any).__renderEvents);
55
- const unnecessary = events.filter((e: any) =>
56
- e.tree?.some((node: any) => node.changeDescription?.kind === "unnecessary"),
57
- );
75
+ const events = await page.evaluate(() => window.__renderEvents);
76
+ const unnecessary = events.filter(hasUnnecessaryRender);
58
77
 
59
78
  if (unnecessary.length > 0) {
60
79
  console.error(`FAIL: ${unnecessary.length} unnecessary renders detected during audit`);
@@ -16,7 +16,6 @@
16
16
  # 3. Run:
17
17
  # uv run lighthouse-audit.py https://example.com
18
18
  # uv run lighthouse-audit.py https://example.com --desktop-only
19
- # uv run lighthouse-audit.py https://example.com --threshold 95
20
19
  # ──────────────────
21
20
 
22
21
  """Lighthouse audit via real Playwright Chrome.
@@ -16,7 +16,7 @@ Classify the request first:
16
16
  - `HISTORY`: answer when, where, who, why, or which commit changed something.
17
17
  - `STATUS`: inspect branch, diff, or working-tree state without changing it.
18
18
 
19
- Do not commit, rebase, push, force-push, reset, stash-pop, or delete anything unless the user explicitly asked for that operation. If the request is only investigative, report findings and stop.
19
+ Do not commit, rebase, push, force-push, reset, stash-pop, or delete anything unless the user explicitly asked for that operation. When a workflow the user started mandates one of them (ulw-loop commits each verified unit, ulw-execute lands its branches), that workflow's instruction is the ask. If the request is only investigative, report findings and stop.
20
20
 
21
21
  ## Ground Truth
22
22
 
@@ -38,7 +38,17 @@ Missing upstream or missing `main`/`master` is normal. Fall back to the best ava
38
38
 
39
39
  ## PR Body Evidence Attachments
40
40
 
41
- When a PR body needs screenshots or terminal PNGs, use the repo reference at `docs/reference/github-attachment-upload.md`. The allowed hosting path is GitHub user attachments from the authenticated web attachment flow; never commit temporary images, never use GitHub Releases for PR evidence, and never use external image hosts. Do not log browser cookies, CSRF tokens, S3 form fields, or upload headers.
41
+ When a PR body needs screenshots or terminal PNGs, the allowed hosting path is GitHub user attachments from the authenticated web attachment flow; never commit temporary images, never use GitHub Releases for PR evidence, and never use external image hosts. Do not log browser cookies, CSRF tokens, S3 form fields, or upload headers.
42
+
43
+ The flow needs an authenticated GitHub web session (a `gh` API token alone is not enough):
44
+
45
+ 1. Open the target PR or issue page in that session and read its file-attachment CSRF token and repository id.
46
+ 2. `POST https://github.com/upload/policies/assets` with `repository_id`, `name`, `size`, `content_type`, and that token as `authenticity_token`.
47
+ 3. Upload the bytes to the returned S3 URL with the returned form fields exactly as given.
48
+ 4. `PUT https://github.com/upload/assets/:id` with the returned `asset_upload_authenticity_token`.
49
+ 5. Put only the final `https://github.com/user-attachments/assets/<uuid>` URL in the PR body (write the body to a temp file and pass it with `gh pr edit --body-file`).
50
+
51
+ If no authenticated browser session is available, leave the local evidence paths in the PR body and state the blocker.
42
52
 
43
53
  ## Commit Mode
44
54
 
@@ -171,7 +171,7 @@ for each background task ID (`bg_...`): background_output(task_id="bg_...")
171
171
  ```
172
172
  AGENTS_LOCATIONS = [
173
173
  { path: ".", type: "root" },
174
- { path: "src/hooks", score: 18, reason: "high complexity" },
174
+ { path: "src/hooks", score: 16, reason: "high complexity" },
175
175
  { path: "src/api", score: 12, reason: "distinct domain" }
176
176
  ]
177
177
  ```
@@ -27,11 +27,11 @@ reference before installing or configuring anything**.
27
27
  | `.py .pyi` | `references/python/README.md` |
28
28
  | `.go` | `references/go/README.md` |
29
29
  | `.rs` | `references/rust/README.md` |
30
- | `.c .cpp .cc .cxx .h .hpp .hh .hxx` | `references/c-cpp/README.md` |
30
+ | `.c .cpp .cc .cxx .c++ .h .hpp .hh .hxx .h++` | `references/c-cpp/README.md` |
31
31
  | `.java` | `references/java/README.md` |
32
32
  | `.kt .kts` | `references/kotlin/README.md` |
33
33
  | `.cs .razor .cshtml` | `references/csharp/README.md` |
34
- | `.swift` | `references/swift/README.md` |
34
+ | `.swift .m .mm` | `references/swift/README.md` |
35
35
  | `.rb .rake .gemspec .ru` | `references/ruby/README.md` |
36
36
  | `.php` | `references/php/README.md` |
37
37
  | `.dart` | `references/dart/README.md` |
@@ -75,13 +75,20 @@ command -v <server-executable> # e.g. typescript-language-server, gopls, rust-
75
75
 
76
76
  Most builtin servers need **no config** — they are resolved automatically by
77
77
  file extension. Write config only to: pick between competing servers, set a
78
- `priority`, pass `initialization` options, override `extensions`, set `env`, or
79
- `disable` a server.
78
+ `priority`, pass `initialization` options, override `extensions`, set `env`
79
+ (user config only), or `disable` a server.
80
80
 
81
- Two project-scoped config files, **identical JSON shape**:
81
+ Config files per harness, **identical JSON shape**. Each harness reads the
82
+ first project file that exists, plus one user file:
82
83
 
83
- - Codex harness → `.codex/lsp-client.json` (user: `~/.codex/lsp-client.json`)
84
- - OpenCode/omo harness → `.opencode/lsp.json` (also `.omo/lsp.json`)
84
+ | Harness | Project config | User config |
85
+ |---|---|---|
86
+ | Codex | `.codex/lsp-client.json` | `$CODEX_HOME/lsp-client.json` (default `~/.codex/lsp-client.json`) |
87
+ | OpenCode | `.opencode/lsp.json`, then `.omo/lsp.json`, then `.omo/lsp-client.json` | `lsp.json` in the OpenCode config dir (default `~/.config/opencode/lsp.json`) |
88
+ | OmO native | `.omo/lsp-client.json`, then `.pi/lsp-client.json` | `~/.omo/lsp-client.json` (`~/.pi/lsp-client.json` when only that one exists) |
89
+
90
+ A standalone `lsp-tools-mcp` launch reads the paths in
91
+ `LSP_TOOLS_MCP_PROJECT_CONFIG` / `LSP_TOOLS_MCP_USER_CONFIG` instead.
85
92
 
86
93
  ```jsonc
87
94
  {
@@ -100,14 +107,16 @@ Two project-scoped config files, **identical JSON shape**:
100
107
 
101
108
  Rules enforced by `config-loader.ts`:
102
109
 
103
- - In a **project** config (`.codex/lsp-client.json`, `.opencode/lsp.json`) an
104
- entry whose id is a **builtin** server inherits `command` automatically — you
105
- only override `extensions` / `priority` / `initialization`. A non-builtin id
106
- in a project config is **ignored**.
107
- - To define a **fully custom** (non-builtin) server with its own `command`, put
108
- it in the **user** config (`~/.codex/lsp-client.json`, or the path set by
109
- `LSP_TOOLS_MCP_USER_CONFIG`), where `command` + `extensions` are honored.
110
- - Project entries win over user entries; both win over builtin defaults.
110
+ - In a **project** config an entry whose id is a **builtin** server inherits
111
+ `command` automatically — you only override `extensions` / `priority` /
112
+ `initialization` / `disabled`. Its `env` is dropped, and a non-builtin id in
113
+ a project config is **ignored**.
114
+ - To set `env`, or to define a **fully custom** (non-builtin) server with its
115
+ own `command`, put it in the **user** config from the table above, where
116
+ `command` + `extensions` + `env` are honored.
117
+ - Project entries win over user entries; both win over builtin defaults. A user
118
+ entry is skipped when an enabled project entry has the same id, so keep an id
119
+ that needs `env` out of the project config.
111
120
 
112
121
  Each language reference gives a ready-to-paste snippet.
113
122
 
@@ -27,17 +27,17 @@ command -v shellcheck
27
27
 
28
28
  ## Configure
29
29
 
30
- Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in `.codex/lsp-client.json` (Codex) AND `.opencode/lsp.json` (OpenCode/omo):
30
+ Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in every harness's project config (per-harness paths: the Configure step in `SKILL.md`):
31
31
 
32
32
  ```json
33
33
  { "lsp": { "bash": { "priority": 100 } } }
34
34
  ```
35
35
 
36
- For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled`/`env`. A fully custom (non-builtin) server with its own `command` must go in the USER config (`~/.codex/lsp-client.json`).
36
+ For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled` (a project entry drops `env`). `env`, and a fully custom (non-builtin) server with its own `command`, must go in your harness's USER config (see the Configure step in `SKILL.md`).
37
37
 
38
38
  ### Initialization options (only if commonly needed)
39
39
 
40
- None commonly required. `bash-language-server` discovers `shellcheck` on PATH automatically. To point at a non-PATH binary, export `SHELLCHECK_PATH` via `env`:
40
+ None commonly required. `bash-language-server` discovers `shellcheck` on PATH automatically. To point at a non-PATH binary, export `SHELLCHECK_PATH` via `env` (USER config only; a project entry drops `env`):
41
41
 
42
42
  ```json
43
43
  { "lsp": { "bash": { "env": { "SHELLCHECK_PATH": "/opt/bin/shellcheck" } } } }
@@ -20,13 +20,13 @@ command -v clangd
20
20
 
21
21
  ## Configure
22
22
 
23
- Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in `.codex/lsp-client.json` (Codex) AND `.opencode/lsp.json` (OpenCode/omo):
23
+ Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in every harness's project config (per-harness paths: the Configure step in `SKILL.md`):
24
24
 
25
25
  ```json
26
26
  { "lsp": { "clangd": { "priority": 100 } } }
27
27
  ```
28
28
 
29
- For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled`/`env`. A fully custom (non-builtin) server with its own `command` must go in the USER config (`~/.codex/lsp-client.json`).
29
+ For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled` (a project entry drops `env`). `env`, and a fully custom (non-builtin) server with its own `command`, must go in your harness's USER config (see the Configure step in `SKILL.md`).
30
30
 
31
31
  ### Initialization options (only if commonly needed)
32
32
 
@@ -22,13 +22,13 @@ command -v csharp-ls
22
22
 
23
23
  ## Configure
24
24
 
25
- Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in `.codex/lsp-client.json` (Codex) AND `.opencode/lsp.json` (OpenCode/omo):
25
+ Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in every harness's project config (per-harness paths: the Configure step in `SKILL.md`):
26
26
 
27
27
  ```json
28
28
  { "lsp": { "csharp": { "priority": 100 } } }
29
29
  ```
30
30
 
31
- For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled`/`env`. A fully custom (non-builtin) server with its own `command` must go in the USER config (`~/.codex/lsp-client.json`).
31
+ For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled` (a project entry drops `env`). `env`, and a fully custom (non-builtin) server with its own `command`, must go in your harness's USER config (see the Configure step in `SKILL.md`).
32
32
 
33
33
  ### Initialization options (only if commonly needed)
34
34
 
@@ -20,13 +20,13 @@ command -v dart
20
20
 
21
21
  ## Configure
22
22
 
23
- Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in `.codex/lsp-client.json` (Codex) AND `.opencode/lsp.json` (OpenCode/omo):
23
+ Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in every harness's project config (per-harness paths: the Configure step in `SKILL.md`):
24
24
 
25
25
  ```json
26
26
  { "lsp": { "dart": { "priority": 100 } } }
27
27
  ```
28
28
 
29
- For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled`/`env`. A fully custom (non-builtin) server with its own `command` must go in the USER config (`~/.codex/lsp-client.json`).
29
+ For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled` (a project entry drops `env`). `env`, and a fully custom (non-builtin) server with its own `command`, must go in your harness's USER config (see the Configure step in `SKILL.md`).
30
30
 
31
31
  ### Initialization options (only if commonly needed)
32
32
 
@@ -21,13 +21,13 @@ command -v elixir-ls
21
21
 
22
22
  ## Configure
23
23
 
24
- Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in `.codex/lsp-client.json` (Codex) AND `.opencode/lsp.json` (OpenCode/omo):
24
+ Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in every harness's project config (per-harness paths: the Configure step in `SKILL.md`):
25
25
 
26
26
  ```json
27
27
  { "lsp": { "elixir-ls": { "priority": 100 } } }
28
28
  ```
29
29
 
30
- For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled`/`env`. A fully custom (non-builtin) server with its own `command` must go in the USER config (`~/.codex/lsp-client.json`).
30
+ For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled` (a project entry drops `env`). `env`, and a fully custom (non-builtin) server with its own `command`, must go in your harness's USER config (see the Configure step in `SKILL.md`).
31
31
 
32
32
  ### Initialization options (only if commonly needed)
33
33
 
@@ -25,13 +25,13 @@ command -v gopls
25
25
 
26
26
  ## Configure
27
27
 
28
- Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in `.codex/lsp-client.json` (Codex) AND `.opencode/lsp.json` (OpenCode/omo):
28
+ Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in every harness's project config (per-harness paths: the Configure step in `SKILL.md`):
29
29
 
30
30
  ```json
31
31
  { "lsp": { "gopls": { "priority": 100 } } }
32
32
  ```
33
33
 
34
- For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled`/`env`. A fully custom (non-builtin) server with its own `command` must go in the USER config (`~/.codex/lsp-client.json`).
34
+ For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled` (a project entry drops `env`). `env`, and a fully custom (non-builtin) server with its own `command`, must go in your harness's USER config (see the Configure step in `SKILL.md`).
35
35
 
36
36
  ### Initialization options (only if commonly needed)
37
37
 
@@ -27,13 +27,13 @@ command -v haskell-language-server-wrapper
27
27
 
28
28
  ## Configure
29
29
 
30
- Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in `.codex/lsp-client.json` (Codex) AND `.opencode/lsp.json` (OpenCode/omo):
30
+ Builtin — usually NO config needed (auto-resolved by extension). Configure only to set priority, init options, override extensions, or disable. Same JSON shape in every harness's project config (per-harness paths: the Configure step in `SKILL.md`):
31
31
 
32
32
  ```json
33
33
  { "lsp": { "haskell-language-server": { "priority": 100 } } }
34
34
  ```
35
35
 
36
- For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled`/`env`. A fully custom (non-builtin) server with its own `command` must go in the USER config (`~/.codex/lsp-client.json`).
36
+ For builtin ids in a PROJECT config, `command` is supplied automatically — only set `priority`/`initialization`/`extensions`/`disabled` (a project entry drops `env`). `env`, and a fully custom (non-builtin) server with its own `command`, must go in your harness's USER config (see the Configure step in `SKILL.md`).
37
37
 
38
38
  ### Initialization options (only if commonly needed)
39
39