oh-my-opencode 5.0.0-beta.86 → 5.0.0-beta.87

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 (233) hide show
  1. package/.agents/skills/hyperplan/SKILL.md +1 -1
  2. package/.opencode/skills/hyperplan/SKILL.md +1 -1
  3. package/dist/cli/index.js +27 -21
  4. package/dist/cli-node/index.js +27 -21
  5. package/dist/index.js +85 -87
  6. package/dist/skills/browser/ATTRIBUTION.md +26 -14
  7. package/dist/skills/browser/SKILL.md +65 -52
  8. package/dist/skills/browser/references/commands.md +81 -66
  9. package/dist/skills/browser/references/install.md +31 -34
  10. package/dist/skills/browser/references/owned-engine/README.md +41 -21
  11. package/dist/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  12. package/dist/skills/browser/references/owned-engine/ladder.md +24 -22
  13. package/dist/skills/browser/references/owned-engine/network.md +35 -15
  14. package/dist/skills/browser/references/recipes/1password.md +13 -11
  15. package/dist/skills/browser/references/remote.md +5 -4
  16. package/dist/skills/browser/runtime/omowright/index.js +1534 -0
  17. package/dist/skills/browser/runtime/omowright/manifest.json +9 -0
  18. package/dist/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  19. package/dist/skills/browser/scripts/browser-doctor.mjs +37 -32
  20. package/dist/skills/browser/scripts/browser-install.mjs +31 -44
  21. package/dist/skills/browser/scripts/omowright.mjs +25 -0
  22. package/dist/skills/debugging/SKILL.md +2 -2
  23. package/dist/skills/debugging/references/methodology/06-fix.md +3 -3
  24. package/dist/skills/debugging/references/methodology/08-qa.md +1 -1
  25. package/dist/skills/debugging/references/tools/browser-qa.md +104 -0
  26. package/dist/skills/frontend/SKILL.md +1 -1
  27. package/dist/skills/frontend/references/design/clone-from-url.md +1 -1
  28. package/dist/skills/programming/SKILL.md +12 -18
  29. package/dist/skills/programming/references/rust/README.md +43 -15
  30. package/dist/skills/programming/references/rust/api-design.md +81 -0
  31. package/dist/skills/programming/references/rust/async-tokio.md +60 -28
  32. package/dist/skills/programming/references/rust/axum-stack.md +1 -13
  33. package/dist/skills/programming/references/rust/cargo-strict.md +44 -8
  34. package/dist/skills/programming/references/rust/clap-stack.md +8 -3
  35. package/dist/skills/programming/references/rust/concurrency.md +66 -52
  36. package/dist/skills/programming/references/rust/libraries.md +35 -25
  37. package/dist/skills/programming/references/rust/macros.md +63 -0
  38. package/dist/skills/programming/references/rust/one-liners.md +5 -3
  39. package/dist/skills/programming/references/rust/proptest-insta.md +8 -0
  40. package/dist/skills/programming/references/rust/type-state.md +50 -12
  41. package/dist/skills/programming/references/rust/unsafe-discipline.md +34 -6
  42. package/dist/skills/programming/references/rust/zero-cost-safety.md +62 -52
  43. package/dist/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  44. package/dist/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  45. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  46. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  47. package/dist/skills/programming/scripts/rust/new-project.py +31 -28
  48. package/dist/skills/review-work/SKILL.md +1 -1
  49. package/dist/skills/ultimate-browsing/SKILL.md +27 -20
  50. package/dist/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  51. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  52. package/dist/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  53. package/dist/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  54. package/dist/skills/ulw-execute/SKILL.md +4 -4
  55. package/dist/skills/visual-qa/SKILL.md +1 -1
  56. package/dist/skills/visual-qa/references/browser-setup.md +46 -46
  57. package/dist/tui.js +6 -3
  58. package/package.json +15 -14
  59. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  60. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +2 -0
  61. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  62. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  63. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  64. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  65. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  66. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  67. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  70. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  71. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  72. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +1 -1
  73. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  74. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  75. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  76. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  78. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  79. package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
  80. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  81. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +63 -89
  82. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  83. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  84. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  85. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +2 -2
  86. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  87. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  88. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +63 -89
  89. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  90. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  91. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  92. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +2 -2
  93. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  110. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  111. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  112. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  113. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  114. package/packages/omo-codex/plugin/package-lock.json +12 -12
  115. package/packages/omo-codex/plugin/package.json +1 -1
  116. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  117. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +2 -2
  118. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +26 -14
  119. package/packages/omo-codex/plugin/skills/browser/SKILL.md +65 -52
  120. package/packages/omo-codex/plugin/skills/browser/references/commands.md +81 -66
  121. package/packages/omo-codex/plugin/skills/browser/references/install.md +31 -34
  122. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +41 -21
  123. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  124. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +24 -22
  125. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +35 -15
  126. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +13 -11
  127. package/packages/omo-codex/plugin/skills/browser/references/remote.md +5 -4
  128. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  129. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  130. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  131. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +37 -32
  132. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +31 -44
  133. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  134. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +2 -2
  135. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  136. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  137. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  138. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -1
  139. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  140. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  141. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  142. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  143. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  144. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  145. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  146. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  147. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  148. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  149. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  150. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  151. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  152. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  153. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  154. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  155. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  156. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  157. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  158. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  159. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +1 -1
  160. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +27 -20
  161. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  162. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  163. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  164. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  165. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +63 -89
  166. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +4 -4
  167. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  168. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +2 -2
  169. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +1 -1
  170. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +46 -46
  171. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +2 -2
  172. package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -2
  173. package/packages/prompts-core/prompts/ultrawork/codex.md +63 -89
  174. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +26 -14
  175. package/packages/shared-skills/skills/browser/SKILL.md +65 -52
  176. package/packages/shared-skills/skills/browser/references/commands.md +81 -66
  177. package/packages/shared-skills/skills/browser/references/install.md +31 -34
  178. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +41 -21
  179. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  180. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +24 -22
  181. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +35 -15
  182. package/packages/shared-skills/skills/browser/references/recipes/1password.md +13 -11
  183. package/packages/shared-skills/skills/browser/references/remote.md +5 -4
  184. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  185. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  186. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  187. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +37 -32
  188. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +31 -44
  189. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  190. package/packages/shared-skills/skills/debugging/SKILL.md +2 -2
  191. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  192. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  193. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  194. package/packages/shared-skills/skills/frontend/SKILL.md +1 -1
  195. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  196. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  197. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  198. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  199. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  200. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  201. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  202. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  203. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  204. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  205. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  206. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  207. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  208. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  209. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  210. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  211. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  212. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  213. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  214. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  215. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  216. package/packages/shared-skills/skills/review-work/SKILL.md +1 -1
  217. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +27 -20
  218. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  219. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  220. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  221. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  222. package/packages/shared-skills/skills/ulw-execute/SKILL.md +4 -4
  223. package/packages/shared-skills/skills/visual-qa/SKILL.md +1 -1
  224. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +46 -46
  225. package/dist/skills/browser/scripts/browser-env.mjs +0 -41
  226. package/dist/skills/debugging/references/tools/playwright-cli.md +0 -112
  227. package/dist/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  228. package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +0 -41
  229. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -112
  230. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  231. package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +0 -41
  232. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -112
  233. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
@@ -10,9 +10,9 @@ Expert coding agent. Ship verified work. No process narration.
10
10
 
11
11
  # Goal
12
12
  Deliver EXACTLY what the user asked, end-to-end working, proven by
13
- captured evidence: a failing-first proof that went RED→GREEN through
14
- the cheapest faithful channel, plus real-surface proof sized by the
15
- tier below. TESTS ALONE NEVER PROVE DONE — a green suite means the
13
+ captured evidence: the changed behavior RUN through its real surface,
14
+ sized by the tier below, with the tests the repository keeps for it
15
+ still green. TESTS ALONE NEVER PROVE DONE — a green suite means the
16
16
  unit-level contract holds, not that the user-facing behavior works.
17
17
 
18
18
  # Tier triage (classify ONCE at bootstrap; record tier + one-line
@@ -53,8 +53,8 @@ triggered, run the reviewer loop until unconditional approval.
53
53
  Run real-surface proof yourself through the channel that faithfully
54
54
  exercises the surface; capture the artifact.
55
55
 
56
- 1. HTTP call — hit the live endpoint with `curl -i` (or a
57
- Playwright APIRequestContext); capture status line + headers +
56
+ 1. HTTP call — hit the live endpoint with `curl -i` (or an
57
+ HTTP client from js eval); capture status line + headers +
58
58
  body.
59
59
  2. Terminal / TUI - drive a real pty and prove it through the
60
60
  xterm.js web terminal (see the TUI visual QA note below). tmux
@@ -62,18 +62,21 @@ exercises the surface; capture the artifact.
62
62
  for color / layout / CJK evidence, which degrades truecolor.
63
63
  3. Browser use — in Codex, use `browser:control-in-app-browser`
64
64
  first when available and no authenticated/persistent user browser
65
- profile is required. Otherwise, or for Chrome semantics, stealth,
66
- or trace, WRITE a `playwright-core` script and run it from js eval
67
- against local Chrome (`chromium.launch({ channel: "chrome" })` /
68
- `launchPersistentContext` on a CLONED profile). Capture action
69
- log + screenshot path. Never downgrade to a non-browser surface
70
- for a browser-facing criterion. NEVER clear cookies, cache, or
71
- site data (`Network.clearBrowserCookies`, `Storage.clearCookies`,
65
+ profile is required. Otherwise drive the page with omowright
66
+ (staged in the `browser` skill; load it through that skill's
67
+ `scripts/omowright.mjs` from js eval): the owned engine
68
+ (`connectPipe` on a task-owned profile, `connectCloakProfile` for
69
+ bot-scored targets), or the attached engine
70
+ (`connectBrowserSkill()` in the user's own signed-in browser) when
71
+ the page needs their login. Capture action log + screenshot path.
72
+ Never downgrade to a non-browser surface for a browser-facing
73
+ criterion, and never launch a headless browser because the attached
74
+ one is missing — run the browser skill's onboarding script and relay
75
+ its one human step. NEVER clear cookies, cache, or site data
76
+ (`Network.clearBrowserCookies`, `Storage.clearCookies`,
72
77
  `chrome.browsingData.remove`, "clear browsing data") on the user's
73
- real/main browser profile — it wipes their logged-in state. If you
74
- need that profile's login state, clone it first (`rsync -a
75
- <profile>/ <tmp-clone>/`) and launch Chrome against
76
- the clone as the user-data-dir; run any clearing there only.
78
+ real/main browser profile, and never clone it — it wipes or
79
+ invalidates their logged-in state.
77
80
  4. Computer use — when the surface is a desktop/GUI app rather than a
78
81
  page, drive it via OS-level automation (a computer-use agent,
79
82
  AppleScript, xdotool, etc.) against the running app; capture
@@ -148,9 +151,6 @@ The criteria MUST list, upfront:
148
151
  its exact scenario: the literal command / page action / payload and
149
152
  the binary PASS/FAIL observable, plus the evidence artifact it will
150
153
  capture.
151
- - For each criterion, the failing-first proof (test id or scenario)
152
- that will be captured RED BEFORE the implementation and GREEN after.
153
- Evidence added after the green code does NOT satisfy this.
154
154
  - WHEN TO STOP, in one line: "I'll stop right away when <the exact
155
155
  observable state that ends this run>". The Stop rules bind to this
156
156
  line — the moment it holds, you stop.
@@ -186,7 +186,7 @@ Started: <ISO timestamp>
186
186
  <patterns / pitfalls / principles to remember next turn>
187
187
  ```
188
188
 
189
- Append each finding, decision, command, RED/GREEN capture, and QA
189
+ Append each finding, decision, command, test read, and QA
190
190
  artifact path the moment it happens. Update `## Now` and
191
191
  `## Todo` on every transition. Append-only — never rewrite. This notepad
192
192
  is your durable memory and it OUTLIVES the context window. After any
@@ -212,11 +212,10 @@ instead of waiting for the next pass. Step text encodes WHERE / WHY
212
212
  (which criterion it advances) / HOW / VERIFY:
213
213
  `path: <action> for <criterion> — verify by <check>`.
214
214
 
215
- GOOD pair (test-first, ordered):
216
- `foo.test.ts: Write FAILING case invalid-email→ValidationError for criterion 2 — verify by RED with assertion msg`
217
- `src/foo/bar.ts: Implement validateEmail() RFC-5322-lite for criterion 2 — verify by foo.test.ts GREEN + curl 400 body`
218
- BAD: "Implement feature" / "Fix bug" / "Add tests later" / writing
219
- production code before its failing test → rewrite.
215
+ GOOD pair (ordered):
216
+ `test/foo.test.ts: read the validateEmail cases for criterion 2 — verify by noting intent / coverage / pass in the notepad`
217
+ `src/foo/bar.ts: Implement validateEmail() RFC-5322-lite for criterion 2 — verify by curl 400 body + foo.test.ts green`
218
+ BAD: "Implement feature" / "Fix bug" / "Add tests later" → rewrite.
220
219
 
221
220
  # Finding things (lead with these, code-mode the first wave)
222
221
  Never guess from memory — locate with the right tool, and re-read before
@@ -245,51 +244,35 @@ search, absolute-path results). For research that leaves the repo —
245
244
  library/API/docs/web — delegate to the `librarian` subagent. Spawn them
246
245
  `fork_context: false` and keep doing root work while they run.
247
246
 
248
- # Execution loop (PIN → RED → GREEN → SURFACE → CLEAN)
247
+ # Execution loop (READ → CHANGE → RUN → CLEAN)
249
248
  Until every success criterion PASSES with its evidence captured:
250
249
  1. Pick next criterion → mark in_progress → update notepad `## Now`.
251
- 2. PIN + RED: when refactoring behavior whose regressions the change
252
- could hide, first pin it with a characterization test that passes on
253
- the unchanged code. Then
254
- capture the failing-first proof through the cheapest faithful
255
- channel — a unit test where a seam exists, an integration/e2e test
256
- where the behavior lives in wiring, or the criterion's real-surface
257
- scenario captured failing when no test seam exists. It must fail
258
- for the RIGHT reason (not a syntax error, not a missing import).
259
- Paste RED output into the notepad. No production code yet.
260
- TEST-ONLY TARGET (regression coverage for behavior that is already
261
- correct): there is no natural RED and no production change to make
262
- — this is the sole exception to the production-RED/GREEN steps.
263
- Substitute a mutation proof: temporarily force the exact regression
264
- each new assertion names (revert the fix commit or break the seam,
265
- never committed), capture the assertion failing, then revert the
266
- mutation and capture GREEN. An assertion that stays green under its
267
- mutation is not coverage — fix the fixture (a value equal to the
268
- default it must override proves nothing) or assert the artifact the
269
- criterion names, never an expected value re-derived from the output
270
- under test. Reverting the probe IS the GREEN; skip step 3's
271
- production change for a TEST-ONLY task and go to step 4.
272
- PROSE TARGET (prompt, SKILL.md, rule, markdown): the wording is
273
- NOT the behavior — never pin sentences, phrase presence/absence,
274
- or word/char counts. PIN only a machine-consumed value (parsed
275
- frontmatter field, a sentinel token a hook greps, the doc's JSON
276
- sample through its real validator) or one `toBe` equality between
277
- two shipped copies. A pure-prose change with no machine consumer
278
- has NO seam: ship it on review + QA-by-read, NO test — a text grep
279
- is pretend-coverage, not RED proof.
280
- 3. GREEN (skip for TEST-ONLY — reverting the mutation is GREEN): write
281
- the SMALLEST production change that flips RED→GREEN.
282
- Before GREEN work that depends on external review, PR, issue, or
283
- branch state, refresh current branch/PR/issue state and preserve existing ordering/policy;
284
- separate compatibility detection from policy changes unless the goal
285
- explicitly asks to change policy.
286
- Re-run the proof. Capture GREEN output. A GREEN far larger than the
287
- criterion implies means the proof was too coarse — split it.
288
- 4. SURFACE: run the real-surface proof the criterion named (channel
289
- table above; auxiliary surface for CLI- or data-shaped criteria),
290
- end-to-end, yourself. If the RED proof was the scenario itself,
291
- re-run it now and capture it passing. Paste the artifact path into
292
- the notepad.
250
+ 2. READ what already proves the area BEFORE touching it. Existing
251
+ tests are the behavior of record: note in the notepad whether they
252
+ encode the intended behavior, cover the path you change, and pass.
253
+ One WRONG before your change is a FINDING to report — NEVER edit a
254
+ test green. A bug: reproduce it first and capture the failure. A
255
+ refactor: the existing tests are green on the unchanged code first.
256
+ 3. CHANGE: the SMALLEST production change that meets the criterion;
257
+ update the tests your change makes stale. Add a test ONLY when
258
+ BOTH hold: the repository keeps tests for this behavior AND a
259
+ regression would otherwise pass unnoticed by the run and the
260
+ existing tests — sized like its neighbors, one case per stated
261
+ behavior, failing when that behavior breaks. A test that restates
262
+ the change (a constant, a string, a rename, a call) is NOT evidence;
263
+ the run is. Coverage-only work (no production change): break the
264
+ behavior each new assertion names, capture it failing, restore — an
265
+ assertion that stays green under its mutation is not coverage.
266
+ PROSE TARGET (prompt, SKILL.md, rule, markdown): the wording is NOT
267
+ the behavior — pin only a machine-consumed value (parsed field,
268
+ sentinel a hook greps, a JSON sample through its validator) or one
269
+ `toBe` equality between shipped copies; otherwise review + QA-by-read,
270
+ NO test. Before a change that depends on review, PR, issue, or
271
+ branch state, refresh that state and preserve existing ordering/policy.
272
+ 4. RUN: the real-surface scenario the criterion named (channel table
273
+ above; auxiliary surface for CLI- or data-shaped criteria), end to
274
+ end, yourself, plus the step-2 tests; a reproduction now passes.
275
+ Paste the artifact path into the notepad.
293
276
  5. CLEANUP (PAIRED — NEVER SKIP): the moment a QA scenario spawns any
294
277
  resource, register its teardown as its own todo (e.g.
295
278
  `cleanup: kill server pid for criterion 2 — verify kill -0 fails`).
@@ -297,7 +280,7 @@ Until every success criterion PASSES with its evidence captured:
297
280
  before this step completes:
298
281
  server PIDs (`kill <pid>`; verify `kill -0` fails), `tmux` sessions
299
282
  (`tmux kill-session -t ulw-qa-<criterion>`; verify with `tmux ls`),
300
- browser / Playwright contexts (`.close()`), containers
283
+ browsers / sessions (`browser.close()` / `session.stop()`), containers
301
284
  (`docker rm -f`), bound ports (`lsof -i :<port>` empty), temp
302
285
  sockets / files / dirs (`rm -rf` the `mktemp` paths), QA-only env
303
286
  vars. Append a one-line cleanup receipt to the notepad next to the
@@ -315,8 +298,8 @@ Until every success criterion PASSES with its evidence captured:
315
298
  message. Record PASS/FAIL inline with the evidence paths AND the
316
299
  cleanup receipt. Loop until all PASS.
317
300
 
318
- Within a step, follow Finding things; NEVER parallelise RED and GREEN of
319
- the same criterion.
301
+ Within a step, follow Finding things; READ before CHANGE, never in
302
+ parallel with it.
320
303
 
321
304
  # Waiting discipline (a poll costs a full model round)
322
305
  Every status check you issue as a tool call replays the entire
@@ -428,8 +411,8 @@ When triggered, follow this procedure (NON-NEGOTIABLE):
428
411
  2-attempt stop rule below) — do not loop further.
429
412
 
430
413
  # Commits
431
- Commit frequently: one atomic commit per verified increment (RED→GREEN
432
- + its evidence), never one end-of-run omnibus; each commit builds +
414
+ Commit frequently: one atomic commit per verified increment (change +
415
+ its evidence), never one end-of-run omnibus; each commit builds +
433
416
  tests green on its own; no WIP on the final branch.
434
417
  BEFORE composing each message, read the history and mimic it: run
435
418
  `git log --oneline -20` plus `git log -5 -- <touched paths>` and match
@@ -442,20 +425,11 @@ convention. If a plan file exists, final commit footer:
442
425
  commits this session — then stage + draft the message instead.
443
426
 
444
427
  # Constraints
445
- - Every behavior change needs a failing-first proof captured BEFORE
446
- the production change, through the cheapest faithful channel (unit
447
- test at a seam; integration/e2e in wiring; the real-surface scenario
448
- when no test seam exists). If you typed production code first, STOP,
449
- revert, capture the proof failing, then redo the change. Exempt
450
- only: pure formatting, comment-only edits, dependency bumps with no
451
- behavior delta, rename-only moves — justify each in `## Findings`.
452
- - A test that cannot fail for the regression it names is NOT
453
- evidence: mock-call assertions, pinned constants, a fixture equal
454
- to the default it must override, an expected value re-derived from
455
- the output under test. Prefer a real-surface proof with no new
456
- test over a tautological one.
457
- - Refactors: characterization tests pinning current observable
458
- behavior FIRST, green against the old code, green throughout.
428
+ - Every behavior change is PROVEN BY ITS RUN on the real surface, with
429
+ the tests the repository keeps for it green. A test that cannot fail
430
+ for the regression it names is NOT evidence: mock-call assertions,
431
+ pinned constants, a fixture equal to the default it must override,
432
+ an expected value re-derived from the output under test.
459
433
  - Smallest correct change. No drive-by refactors.
460
434
  - Never suppress lints / errors / test failures. Never delete, skip,
461
435
  `.only`, `.skip`, `xfail`, or comment out tests to green the suite.
@@ -464,8 +438,8 @@ commits this session — then stage + draft the message instead.
464
438
  # Output discipline
465
439
  - First line literally: `ULTRAWORK MODE ENABLED!`
466
440
  - After bootstrap: 1-2 paragraph plan summary + notepad path.
467
- - During execution: surface only state changes (RED captured, GREEN
468
- captured, scenario PASS/FAIL with evidence paths, reviewer verdict).
441
+ - During execution: surface only state changes (existing tests read,
442
+ scenario PASS/FAIL with evidence paths, reviewer verdict).
469
443
  - Final message: outcome + success-criteria checklist with evidence
470
444
  refs + notepad path + reviewer approval (if gate triggered) + commit
471
445
  list (`<sha> <subject>`). No file-by-file changelog unless asked.
@@ -1,25 +1,37 @@
1
1
  # ATTRIBUTION / NOTICE
2
2
 
3
- This skill (`browser`, part of `@oh-my-opencode/shared-skills`) is project-original documentation.
4
- It drives a third-party tool that it does **not** redistribute.
3
+ This skill (`browser`, part of `@oh-my-opencode/shared-skills`) is project-original documentation
4
+ plus a staged copy of one library it drives.
5
+
6
+ ## omowright — bundled
7
+
8
+ Both engines this skill documents are provided by **omowright**.
9
+
10
+ - Upstream: the `omowright` repository on GitHub, pinned by commit in the root `package.json`
11
+ devDependency.
12
+ - License: MIT
13
+ - What ships here: `runtime/omowright/index.js` (the library bundled into one ESM file, including
14
+ its `ws` and `zod` dependencies) and `runtime/omowright/page-bundle.js` (the in-page snapshot
15
+ script it reads at import time), staged at build time by
16
+ `packages/shared-skills/stage-omowright-runtime.mjs` from the pinned root devDependency, with a
17
+ `manifest.json` recording the version and file digests. The repository holds no copy; the
18
+ staged files are gitignored and packed through the sibling `.npmignore`.
19
+ - omowright's own license notice is preserved inside the bundled file.
5
20
 
6
21
  ## BrowserSkill — driven, not vendored
7
22
 
8
- The attached engine this skill documents is **BrowserSkill** by Tencent.
23
+ The attached engine reaches the user's browser through **BrowserSkill** by Tencent.
9
24
 
10
25
  - Upstream: https://github.com/Tencent/BrowserSkill
11
26
  - License: MIT
12
- - What ships here: documentation and two local helper scripts, authored by this project.
13
- - What does NOT ship here: the `bsk` CLI, the daemon, the browser extension, or any upstream
14
- source. The user installs those from upstream's own installer and from the Chrome Web Store /
15
- Edge Add-ons listings. This package never bundles a browser binary or an extension payload.
16
-
17
- MIT permits redistribution; we simply have no reason to, because upstream publishes signed
18
- per-platform releases and store builds that stay current on their own.
27
+ - What ships here: nothing of upstream's. omowright speaks the daemon's IPC protocol; the user
28
+ installs the `bsk` CLI from upstream's own installer (run by `scripts/browser-install.mjs`) and
29
+ the extension from the Chrome Web Store / Edge Add-ons listings (registered by the same script
30
+ through Chrome's external-extension mechanism). This package never bundles a browser binary or
31
+ an extension payload.
19
32
 
20
33
  ## Owned-engine references
21
34
 
22
- `references/owned-engine/` documents a *contract* for a code-driven browser — the escalation
23
- ladder, viewport pinning, reading the network instead of the DOM, overlay and cross-origin
24
- handling — not any particular package. The techniques are generic CDP practice. No third-party
25
- source is reproduced.
35
+ `references/owned-engine/` summarizes omowright's own skill and presets (escalation ladder,
36
+ network-first reading, frames, dialogs, human handoff) as routing text; the library's repository
37
+ is the authoritative treatment.
@@ -1,89 +1,102 @@
1
1
  ---
2
2
  name: browser
3
- description: "Drives a real browser: sites the user is already signed into, forms and clicks, JS-rendered pages, screenshots, web QA, extension popups, and a human handoff for login, CAPTCHA or OTP. Works through the BrowserSkill extension and its bsk CLI, inside the user's own browser, in a separate Agent Window. Use for any interactive browser task; not for a plain search or an unblocked static fetch."
3
+ description: "Drives a real browser through the omowright library from the js eval kernel: sites the user is already signed into, forms and clicks, JS-rendered pages, screenshots, web QA, extension popups, a human handoff for login, CAPTCHA or OTP, and a browser you own for scraping, bot-scored targets, network capture and QA traces. Use for any interactive browser task; not for a plain search or an unblocked static fetch."
4
4
  ---
5
5
 
6
6
  # Browser
7
7
 
8
- Two engines live behind this skill. Choose before you act:
8
+ One library, two engines. omowright ships inside this skill; choose the engine before you act:
9
9
 
10
- | You need | Engine | Where |
10
+ | You need | Engine | Entry point |
11
11
  |---|---|---|
12
- | A site the user is signed into, a form, a click-through, a screenshot, web QA, an extension popup | **attached** — the user's own browser | this file |
13
- | A throwaway profile, bot-scoring evasion, a CAPTCHA, network interception, a QA flight trace, coordinate control | **owned** — a browser your code launches | [references/owned-engine/README.md](references/owned-engine/README.md) |
12
+ | A site the user is signed into, their open tabs, a form, a click-through, a screenshot, web QA, an extension popup | **attached** — the user's own browser through BrowserSkill | `connectBrowserSkill()` |
13
+ | A throwaway profile, bot-scoring evasion, a CAPTCHA, network interception, a QA flight trace, coordinate control, headless runs | **owned** — a browser your code launches | `connectPipe()` / `connectCloakProfile()` — [references/owned-engine/README.md](references/owned-engine/README.md) |
14
14
  | Text out of a URL, a 403 bypass, a platform that blocks fetchers | neither | the `ultimate-browsing` skill |
15
15
 
16
16
  **Attached is the default,** because it is the only engine carrying the user's logins and the only
17
- one where a human is a single command away. The owned engine is an opt-in local install, not part
18
- of this package.
17
+ one where a human is a single call away. Never substitute one engine for the other silently: if
18
+ the attached engine is not set up, run the onboarding script and tell the user its one remaining
19
+ step.
19
20
 
20
- ## Step 0 — prove the stack before you drive it
21
+ ## Step 0 — load omowright and prove the stack
21
22
 
22
- ```bash
23
- node "<skill-root>/scripts/browser-doctor.mjs"
23
+ ```js
24
+ const { loadOmowright } = await import("<skill-root>/scripts/omowright.mjs")
25
+ const { omowright } = await loadOmowright() // { connectBrowserSkill, bskSnapshot, connectPipe, ... }
24
26
  ```
25
27
 
26
- It reports one of four states and what to do next:
28
+ ```bash
29
+ node "<skill-root>/scripts/browser-doctor.mjs" --json
30
+ ```
27
31
 
28
32
  | State | Meaning | Next |
29
33
  |---|---|---|
30
34
  | `ready` | CLI, daemon and a connected browser | start a session |
31
- | `no-extension` | CLI works, no browser is connected | give the user the store link the doctor printed, wait, re-run |
32
- | `no-cli` | `bsk` is not installed | `node "<skill-root>/scripts/browser-install.mjs"`, then re-run |
33
- | `no-browser-support` | the platform has no supported browser | say so and stop |
34
-
35
- **Never substitute another browser for a missing one.** A headless browser you launch yourself has
36
- none of the user's sessions, so every login turns into a ladder you should not be climbing. If the
37
- attached engine is unavailable, say which state you hit and ask the user.
38
-
39
- ## The loop
40
-
41
- ```bash
42
- bsk session start --json --no-focus --name "<task>" # keep session_id
43
- bsk navigate https://example.com --session <id> --json
44
- bsk observe --session <id> # @eN refs live here
45
- bsk click @e1 --session <id> --json
46
- bsk screenshot --session <id> --out ./shot.png --json
47
- bsk session stop <id> --json # success AND failure
35
+ | `no-cli` / `no-daemon` / `no-extension` | something is missing | `node "<skill-root>/scripts/browser-install.mjs"` prepares everything it can, then prints the **single** step only the user can do (relaunch the browser and click **Enable**); relay it verbatim, wait, re-run the doctor |
36
+ | `no-browser-support` | no Chromium-family profile on this machine | say so and stop |
37
+
38
+ **Never launch a headless browser because the attached one is missing.** It has none of the
39
+ user's sessions, so every login turns into a ladder you should not be climbing. Say which state
40
+ you hit and ask.
41
+
42
+ ## The loop (attached)
43
+
44
+ ```js
45
+ const session = await omowright.connectBrowserSkill({ name: "<task>", focused: false })
46
+ try {
47
+ await session.navigate("https://example.com/", { waitUntil: "load" })
48
+ const { tree, refs, css } = await omowright.bskSnapshot(session, { interactive: true }) // OmOWright tree + refs, no trace in the page
49
+ await session.click({ selector: css.e3 }) // css[ref] is null inside shadow roots:
50
+ const vom = await session.observe({ maxTokens: 4000 }) // then read the daemon's own tree ...
51
+ await session.click("@e7") // ... and click its @eN ref
52
+ await session.fill(css.e5, "hello")
53
+ await session.press("Enter")
54
+ await session.waitForNavigation({ waitUntil: "load" })
55
+ const shot = await session.screenshot() // { buffer, width, height, captureId }
56
+ } finally {
57
+ await session.stop() // success AND failure; returns borrowed tabs
58
+ }
48
59
  ```
49
60
 
50
- 1. **Observe before every action.** `observe` returns a semantic tree whose `@eN` refs are reissued
51
- on each call. Read a ref and use it in the same cycle; a ref from two calls ago points somewhere
52
- else now.
53
- 2. **Navigation and large DOM changes stale every ref.** Observe again rather than reusing.
61
+ 1. **Read before every action.** `bskSnapshot` refs and `observe` `@eN` refs are reissued on each
62
+ call; use a ref in the same cycle you read it.
63
+ 2. **Navigation and large DOM changes stale every ref.** Read again rather than reusing.
54
64
  3. **Two identical failures mean change approach, not retry.** A third identical attempt is a defect.
55
- 4. **Borrow a user tab explicitly** (`tab list --scope user`, `tab borrow <id>`, `tab return <id>`).
65
+ 4. **Borrow a user tab explicitly** (`tabList({ scope: "user" })`, `tabBorrow(id)`, `tabReturn(id)`).
56
66
  Borrowing prompts the user; never invent tab ids and never repeat a denied borrow.
57
- 5. **Always stop the session,** on success and on failure. Stopping also returns borrowed tabs.
67
+ 5. **Always `stop()` the session,** on success and on failure.
58
68
 
59
- Command semantics, the flags that behave differently than they read, and the failure table are in
60
- [references/commands.md](references/commands.md).
69
+ Every method, its options, and the failure codes are in [references/commands.md](references/commands.md).
61
70
 
62
71
  ## When a human is the only way through
63
72
 
64
73
  Login, CAPTCHA, OTP, a payment confirmation, a consent dialog:
65
74
 
66
- ```bash
67
- bsk request-help --session <id> --prompt "<what you need done>" [--target @eN]
75
+ ```js
76
+ const outcome = await session.requestHelp({ prompt: "<what you need done>", targets: ["@e4"], timeoutMs: 300_000 })
68
77
  ```
69
78
 
70
- Then observe again. Respect a `cancelled` or `timed_out` answer; do not work around it by changing
71
- the extension's automation settings.
79
+ Then read the page again. Respect a `cancelled` or `timed_out` outcome; do not work around it by
80
+ changing the extension's automation settings.
72
81
 
73
82
  ## Rules
74
83
 
75
- - **Never read credentials through the page.** No `evaluate` that extracts a password, token, cookie
76
- or recovery code. The value of this engine is that the browser is already signed in.
84
+ - **Never read credentials through the page.** No `evaluate` that extracts a password, token,
85
+ cookie or recovery code. The value of the attached engine is that the browser is already signed in.
77
86
  - **Never clear cookies, cache or site data.** It is the user's real profile; clearing it logs them
78
87
  out everywhere. No flow here needs it.
79
- - **`--no-focus` by default.** The browser belongs to someone who is probably using it.
88
+ - **`focused: false` by default.** The browser belongs to someone who is probably using it.
80
89
  - **One short, named session per task,** always stopped.
81
- - Do not toggle the extension's automation settings, and do not restart the browser to fix a state.
82
-
83
- ## More
84
-
85
- - [references/install.md](references/install.md) — installing the CLI and the extension, per OS
86
- - [references/commands.md](references/commands.md) — command semantics, refs, failure table
87
- - [references/remote.md](references/remote.md) — agent on one machine, browser on another
88
- - [references/recipes/1password.md](references/recipes/1password.md) — reading a vault the user has unlocked
89
- - [references/owned-engine/README.md](references/owned-engine/README.md) — the code-driven engine
90
+ - **Bot-scored or WAF targets go to the owned engine.** The attached engine's daemon enables console
91
+ capture on every tab it drives, which is a known automation signal; CloakBrowser through
92
+ `connectCloakProfile()` is the stealth path.
93
+
94
+ ## Where the rest lives
95
+
96
+ | Topic | Read |
97
+ |---|---|
98
+ | Session methods, targets, options, error codes | [references/commands.md](references/commands.md) |
99
+ | Installing: CLI, daemon, extension, the one human step, blocklisted extension | [references/install.md](references/install.md) |
100
+ | Agent on one machine, browser on another | [references/remote.md](references/remote.md) |
101
+ | Owned engine: launch, snapshot ladder, network, frames, human handoff | [references/owned-engine/README.md](references/owned-engine/README.md) |
102
+ | Reading a 1Password vault the user has unlocked | [references/recipes/1password.md](references/recipes/1password.md) |