oh-my-opencode 5.1.61 → 5.1.62
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.
- package/.agents/command/remove-deadcode.md +1 -1
- package/.agents/skills/remove-deadcode/SKILL.md +1 -1
- package/.opencode/command/remove-deadcode.md +1 -1
- package/dist/cli/index.js +154 -27
- package/dist/cli/service-auth/index.d.ts +2 -1
- package/dist/cli/service-auth/session.d.ts +27 -0
- package/dist/cli/service-auth/sync-pin-retire.d.ts +7 -0
- package/dist/cli-node/index.js +154 -27
- package/dist/config/schema/agent-names.d.ts +1 -0
- package/dist/index.js +645 -189
- package/dist/skills/browser/references/owned-engine/README.md +1 -1
- package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/skills/frontend/SKILL.md +2 -2
- package/dist/skills/frontend/references/design/README.md +2 -2
- package/dist/skills/frontend/references/design/component-catalogs.md +1 -1
- package/dist/skills/frontend/references/design/design-system-architecture.md +1 -1
- package/dist/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
- package/dist/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
- package/dist/skills/frontend/references/designpowers/routing.md +2 -2
- package/dist/skills/frontend/references/perfection/README.md +1 -1
- package/dist/skills/programming/references/python/libraries.md +3 -3
- package/dist/skills/programming/references/python/one-liners.md +1 -1
- package/dist/skills/programming/references/python/pyproject-strict.md +1 -1
- package/dist/skills/programming/references/rust/libraries.md +2 -2
- package/dist/skills/refactor/SKILL.md +1 -1
- package/dist/skills/ultimate-browsing/SKILL.md +1 -1
- package/dist/skills/ultimate-browsing/references/insane-search/README.md +1 -1
- package/dist/skills/ulw-execute/SKILL.md +1 -1
- package/dist/skills/ulw-research/SKILL.md +2 -2
- package/dist/tui.js +15 -14
- package/package.json +14 -14
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/component-catalogs.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +2 -2
- package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -1
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/python/libraries.md +3 -3
- package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/python/pyproject-strict.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +2 -2
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
- package/packages/shared-skills/skills/browser/references/owned-engine/README.md +1 -1
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/frontend/SKILL.md +2 -2
- package/packages/shared-skills/skills/frontend/references/design/README.md +2 -2
- package/packages/shared-skills/skills/frontend/references/design/component-catalogs.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/react-dev-tooling-skill.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +5 -5
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +2 -2
- package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -1
- package/packages/shared-skills/skills/programming/references/python/libraries.md +3 -3
- package/packages/shared-skills/skills/programming/references/python/one-liners.md +1 -1
- package/packages/shared-skills/skills/programming/references/python/pyproject-strict.md +1 -1
- package/packages/shared-skills/skills/programming/references/rust/libraries.md +2 -2
- package/packages/shared-skills/skills/refactor/SKILL.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +1 -1
- package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
- package/packages/shared-skills/skills/ulw-research/SKILL.md +2 -2
- package/.opencode/skills/hyperplan/SKILL.md +0 -450
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
## Planning Through `/ulw-plan`
|
|
16
16
|
|
|
17
|
-
When planning is needed, `designpowers` supplies design-specific context and lets `/ulw-plan` own the plan artifact. Do not write a separate design plan. The
|
|
17
|
+
When planning is needed, `designpowers` supplies design-specific context and lets `/ulw-plan` own the plan artifact. Do not write a separate design plan. The `ulw-plan` plan should receive:
|
|
18
18
|
|
|
19
19
|
- product or page goal;
|
|
20
20
|
- primary tasks and user journeys;
|
|
@@ -35,7 +35,7 @@ When a plan is approved or selected, `/ulw-execute` remains the orchestrator. `d
|
|
|
35
35
|
- required `/visual-qa` loading for rendered visual proof;
|
|
36
36
|
- the design debt rule: unresolved accessibility debt cannot disappear into a summary.
|
|
37
37
|
|
|
38
|
-
Direct implementation outside `/ulw-execute` is not part of this routing contract when a
|
|
38
|
+
Direct implementation outside `/ulw-execute` is not part of this routing contract when a `ulw-plan` plan is active.
|
|
39
39
|
|
|
40
40
|
## UI Build Through Frontend `design` And `perfection`
|
|
41
41
|
|
|
@@ -16,7 +16,7 @@ The correct path:
|
|
|
16
16
|
3. Run Lighthouse against the Playwright-controlled page via `playwright-lighthouse` OR via `chrome-launcher` + the `lighthouse` Node API, attaching to the Playwright CDP endpoint so cookies, auth state, and warmed caches mirror what a real returning user sees.
|
|
17
17
|
4. Use the **mobile** preset (4x CPU throttle, Fast 3G) for the primary number, AND the **desktop** preset for the secondary number. Report both.
|
|
18
18
|
|
|
19
|
-
If
|
|
19
|
+
If no browser-automation skill is loaded in this session, load the `browser` skill now (read its `SKILL.md`).
|
|
20
20
|
|
|
21
21
|
### 2. 100 IN EVERY CATEGORY IS THE FLOOR.
|
|
22
22
|
|
|
@@ -67,7 +67,7 @@ sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-sou
|
|
|
67
67
|
- Latest LazyCodex version from `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` (release tags or the version stamped in the repo) and latest Codex release (`gh release view --repo openai/codex`).
|
|
68
68
|
- OS, install method, and `lazycodex` / `lazycodex-ai` bin links resolving (`command -v`).
|
|
69
69
|
- Astra readiness. The LazyCodex catalog default is `gpt-6-astra`, which Codex only knows from codex-cli 0.153.1 onward. First release tag containing the `models.json` change: `rust-v0.153.1` (backport commit `5cc1c94b8e`). Reproduce on a full clone with tags: `git -C <codex-clone> log --format='%h %d' -S gpt-6-astra -- codex-rs/models-manager/models.json`, then `git -C <codex-clone> tag --contains 5cc1c94b8e | sort -V | head -1`; a shallow clone or one without tags returns nothing. Record the installed version from `codex --version`, the root `model` in `$CODEX_HOME/config.toml` (informational only, it doesn't change the verdict), and, when `$CODEX_HOME/models_cache.json` exists, whether it contains `gpt-6-astra` (`grep -c gpt-6-astra "${CODEX_HOME:-$HOME/.codex}/models_cache.json"`). Verdict: PASS when `codex --version` is 0.153.1 or newer and `models_cache.json` is either absent or lists `gpt-6-astra`. WARN when the version is older than 0.153.1, or the cache exists but lacks `gpt-6-astra`; remediation is upgrading Codex (`npm install -g @openai/codex@latest`, or the package manager that installed `codex`), then starting Codex once so `models_cache.json` refreshes.
|
|
70
|
-
3. Check config and wiring against the latest installer, not against assumptions. Read what the current installer under `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` writes (
|
|
70
|
+
3. Check config and wiring against the latest installer, not against assumptions. Read what the current installer under `$LAZYCODEX_SOURCE_ROOT/lazycodex-source` writes (in that checkout, `plugins/omo/scripts/migrate-codex-config.mjs` and its `migrate-codex-config/` helpers produce the LazyCodex-managed `config.toml` entries, and `plugins/omo/.codex-plugin/plugin.json` declares the payload), then verify the local equivalents:
|
|
71
71
|
- `$CODEX_HOME/config.toml` exists and parses; LazyCodex-managed entries match what the latest installer would write.
|
|
72
72
|
- Plugin payload present and non-empty: read `.codex-plugin/plugin.json`; when that manifest declares a `hooks` array, validate every direct hook path declared by the manifest; require `hooks/hooks.json` only when the manifest declares it; do not require retired paths such as `components/workflow-selector` or `hooks/user-prompt-submit-selecting-lazycodex-workflow.json` unless the current manifest declares them.
|
|
73
73
|
- Verify the manifest-declared runtime payload, not a remembered source tree. Current payload includes `skills/`, `.mcp.json`, root CLI runtimes such as `dist/cli/index.js` and `dist/cli-node/index.js`, and every hook/MCP `components/*/dist/*.js` target referenced by installed manifests.
|
|
@@ -52,7 +52,7 @@ Next-generation HTTP client under Pydantic stewardship. Sync and async in one li
|
|
|
52
52
|
|
|
53
53
|
**Install**: `httpx2[http2,brotli,zstd]` — always include all three extras, no exceptions.
|
|
54
54
|
|
|
55
|
-
**A bare `httpx2.AsyncClient()` / `httpx2.Client()` is a bug.** Always use the factory pattern from `references/httpx2-optimization.md` with ALL optimizations enabled by default:
|
|
55
|
+
**A bare `httpx2.AsyncClient()` / `httpx2.Client()` is a bug.** Always use the factory pattern from `references/python/httpx2-optimization.md` with ALL optimizations enabled by default:
|
|
56
56
|
|
|
57
57
|
```python
|
|
58
58
|
import socket
|
|
@@ -78,7 +78,7 @@ with httpx2.Client(transport=transport, timeout=_TIMEOUT, follow_redirects=True)
|
|
|
78
78
|
users = response.json()
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
See `references/httpx2-optimization.md` for the full factory functions (`create_client()` / `create_async_client()`), event hooks, and the rationale behind every setting. **Load that reference whenever you write ANY network code.**
|
|
81
|
+
See `references/python/httpx2-optimization.md` for the full factory functions (`create_client()` / `create_async_client()`), event hooks, and the rationale behind every setting. **Load that reference whenever you write ANY network code.**
|
|
82
82
|
|
|
83
83
|
## JSON — stdlib `json` (default) or `orjson` (hot paths)
|
|
84
84
|
|
|
@@ -98,7 +98,7 @@ raw: bytes = orjson.dumps(
|
|
|
98
98
|
|
|
99
99
|
For FastAPI: `app = FastAPI(default_response_class=ORJSONResponse)`. Pydantic-typed responses bypass it (and that's correct — Pydantic's path is faster). Raw `dict`/`list` returns go through orjson.
|
|
100
100
|
|
|
101
|
-
See `references/orjson-stack.md` for the full decision tree, option flag reference, FastAPI integration, Redis/queue/logging patterns, and the `model_dump_json()` vs orjson benchmark.
|
|
101
|
+
See `references/python/orjson-stack.md` for the full decision tree, option flag reference, FastAPI integration, Redis/queue/logging patterns, and the `model_dump_json()` vs orjson benchmark.
|
|
102
102
|
|
|
103
103
|
## Validation — pydantic v2
|
|
104
104
|
|
|
@@ -258,7 +258,7 @@ if __name__ == "__main__":
|
|
|
258
258
|
| `python -m venv .venv && ...` | `uv run --script` handles it |
|
|
259
259
|
| Script without usage comment | Always include the "How to run" block |
|
|
260
260
|
| `import asyncio; asyncio.run(main())` | `import anyio; anyio.run(main)` |
|
|
261
|
-
| Bare `httpx2.AsyncClient()` | Full production defaults (see `references/httpx2-optimization.md`) |
|
|
261
|
+
| Bare `httpx2.AsyncClient()` | Full production defaults (see `references/python/httpx2-optimization.md`) |
|
|
262
262
|
|
|
263
263
|
## Sources
|
|
264
264
|
|
|
@@ -209,7 +209,7 @@ A single `make ci` target combining the four works fine.
|
|
|
209
209
|
|
|
210
210
|
## Enforcement summary
|
|
211
211
|
|
|
212
|
-
The config above, combined with `scripts/check-no-excuse-rules.py`, enforces:
|
|
212
|
+
The config above, combined with `scripts/python/check-no-excuse-rules.py`, enforces:
|
|
213
213
|
|
|
214
214
|
| What | How |
|
|
215
215
|
|---|---|
|
|
@@ -321,7 +321,7 @@ let player: WorldPoint = Point2D::new(3.5, 1.2);
|
|
|
321
321
|
// let mistake = cursor + player; // compile error: different coordinate spaces
|
|
322
322
|
```
|
|
323
323
|
|
|
324
|
-
Generalize the pattern to your own domains (see `references/type-state.md`).
|
|
324
|
+
Generalize the pattern to your own domains (see `references/rust/type-state.md`).
|
|
325
325
|
|
|
326
326
|
## Property tests — `proptest`
|
|
327
327
|
|
|
@@ -380,7 +380,7 @@ Run with `cargo bench`. HTML reports under `target/criterion/`. Pair with `cargo
|
|
|
380
380
|
|
|
381
381
|
## Concurrency model — `loom`
|
|
382
382
|
|
|
383
|
-
For lock-free or atomic-heavy code (channels, refcounts, hazard pointers). See `references/concurrency.md` for the full pattern.
|
|
383
|
+
For lock-free or atomic-heavy code (channels, refcounts, hazard pointers). See `references/rust/concurrency.md` for the full pattern.
|
|
384
384
|
|
|
385
385
|
## Arena allocator — `bumpalo`
|
|
386
386
|
|
|
@@ -680,7 +680,7 @@ Record the chosen path in the TodoWrite list.
|
|
|
680
680
|
|
|
681
681
|
**Precondition checks** (fail hard if any step fails):
|
|
682
682
|
|
|
683
|
-
1.
|
|
683
|
+
1. When the session lists the \`team-mode\` skill, load it for lifecycle, message protocol, and limits.
|
|
684
684
|
2. Call \`team_list\` and verify no active \`refactor-squad\` run exists; if one does, shutdown + delete the orphan before proceeding.
|
|
685
685
|
3. If \`~/.omo/teams/refactor-squad/config.json\` is missing, write it using the spec below.
|
|
686
686
|
|
|
@@ -15,7 +15,7 @@ Web access for the hosts the user's browser cannot open (WAF / 403 / Cloudflare
|
|
|
15
15
|
User request
|
|
16
16
|
|
|
|
17
17
|
+- a page the user's browser can open (read, click, screenshot, QA, login) NOT this skill (browser skill, attached engine)
|
|
18
|
-
+- simple search query ------------------------------ NOT this skill (use web
|
|
18
|
+
+- simple search query ------------------------------ NOT this skill (use web search)
|
|
19
19
|
|
|
|
20
20
|
+- URL blocked / 403 / Cloudflare / WAF ------------- TIER 1 insane-search
|
|
21
21
|
+- YouTube/Vimeo/TikTok subtitles or metadata ------- TIER 1 insane-search (yt-dlp)
|
package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
- Claude는 그 사이 foreground에서 MCP Playwright 정찰 루트를 진행
|
|
47
47
|
- engine이 먼저 성공해도 좋고, MCP 정찰로 얻은 API가 먼저 성공해도 좋음. 빠른 쪽 결과 채택
|
|
48
48
|
|
|
49
|
-
**MCP 정찰
|
|
49
|
+
**MCP 정찰 루트** (Playwright MCP가 로드된 세션 전용. 없으면 the `browser` skill's `references/owned-engine/network.md` 로 같은 XHR/fetch 목록을 모은다):
|
|
50
50
|
1. `mcp__playwright__browser_navigate` → 대상 페이지 로드 (브라우저 렌더링)
|
|
51
51
|
2. `mcp__playwright__browser_network_requests` → XHR/fetch 호출 목록 수집, `/api/`·`/graphql`·`\.json` 필터로 내부 엔드포인트 식별
|
|
52
52
|
3. 식별된 JSON API URL을 `python3 -B -m engine <API_URL>`로 재호출 (백그라운드 engine과는 별개 호출). 대부분 API 레이어는 페이지 HTML보다 WAF 보호가 얕아 curl_cffi로 바로 수집됨
|
|
@@ -112,7 +112,7 @@ Every phase (plan wave) runs in its own task-owned worktree with its own goal: b
|
|
|
112
112
|
Solo orchestration with parallel background workers is the default topology. Decide once, when the wave's lanes are known, and record the verdict in the ledger:
|
|
113
113
|
|
|
114
114
|
- **Independent lanes -> parallel workers.** Separate files, no shared contract: one parallel spawn burst; no team.
|
|
115
|
-
- **Dependency-ordered lanes -> one `workflow` run per wave.** Sub-tasks with real ordering between them (C needs A and B finished first) and a harness with a native `workflow` tool: dispatch the wave as ONE run (one producer node per lane plus a verification node); recover inside it with `retry`/`amend`/`send`; let the run's settle wake you instead of arming per-lane watchers; the next wave is a NEW run (or `amend` when only the definition changed) — never one graph for the whole plan.
|
|
115
|
+
- **Dependency-ordered lanes -> one `workflow` run per wave.** Sub-tasks with real ordering between them (C needs A and B finished first) and a harness with a native `workflow` tool: dispatch the wave as ONE run (one producer node per lane plus a verification node); recover inside it with `retry`/`amend`/`send`; let the run's settle wake you instead of arming per-lane watchers; the next wave is a NEW run (or `amend` when only the definition changed) — never one graph for the whole plan. When the harness lists the `mass-ulw` skill, read its `SKILL.md` and `references/planning.md` IN FULL before defining any graph.
|
|
116
116
|
- **Overlapping lanes -> a team.** The lanes touch the same module or contract AND running them concurrently actually finishes sooner: stand up a team (where the harness has one) so one lane's discoveries relay through you mid-flight.
|
|
117
117
|
- **PR-mode independent lanes -> a worktree per lane.** Under `--make-pr`/`--ship`, when a wave holds independent checkboxes, give each lane its own branch and task-owned worktree, delivered as its own PR.
|
|
118
118
|
|
|
@@ -78,7 +78,7 @@ Observation candidates and claim candidates travel back from workers as message
|
|
|
78
78
|
|
|
79
79
|
## Run the swarm as a cooperating team
|
|
80
80
|
|
|
81
|
-
Saturation research defaults to teammode, not isolated fire-and-forget workers: a lead one worker surfaces almost always reshapes what another should search next. When your harness gives you real cooperating members — Codex: the `teammode` skill (MultiAgentV2 agents, or `codex_app` threads as its fallback); OpenCode: `team_mode` — run this swarm as a team. Fall back to the background-worker swarm below only when team mode is unavailable, or the axes are genuinely independent with no cross-pollination expected.
|
|
81
|
+
Saturation research defaults to teammode, not isolated fire-and-forget workers: a lead one worker surfaces almost always reshapes what another should search next. When your harness gives you real cooperating members — Codex: the `teammode` skill when it is listed (MultiAgentV2 agents, or `codex_app` threads as its fallback); OpenCode: `team_mode` — run this swarm as a team. Fall back to the background-worker swarm below only when team mode is unavailable, or the axes are genuinely independent with no cross-pollination expected.
|
|
82
82
|
|
|
83
83
|
- **One member per axis — by part, ownership, or perspective, never a job title.** Each Phase 0 axis is one member owning one concrete slice: a codebase part, a source territory, or a question lens. No two members share an angle. "Backend researcher" or "the web person" gives no real boundary and invites overlap — name what the member owns.
|
|
84
84
|
- **Always the maximum roster.** The team is not sized by taste: fill every member slot your harness allows (OpenCode `team_mode` caps members at 8; Codex teammode has its own ceiling) on every run. If you can only name five axes, split the broadest one — by source territory, by time window, by perspective — until the roster is full. A half-empty team is a half-covered topic.
|
|
@@ -153,7 +153,7 @@ Asset workers (background, parallel, each fed `design-spec.md`) — visuals are
|
|
|
153
153
|
|
|
154
154
|
**Verify the asset manifest before rendering.** List every asset the document references, assert each file exists and is non-empty on disk, and re-render whatever is missing. A document that renders with three broken diagrams is a document you will publish twice.
|
|
155
155
|
|
|
156
|
-
Assembly worker — `task(category="deep-low", load_skills=["frontend", "visual-qa", "
|
|
156
|
+
Assembly worker — `task(category="deep-low", load_skills=["frontend", "visual-qa", "data-scientist"], run_in_background=true, ...)`; when the session lists the `imagegen` skill or the `ulw-loop` skill, add each one it lists to `load_skills`. Before writing, read every available design and visualization skill and apply it — the report is a designed artifact, not a text dump; the worker's prompt carries `design-spec.md`. Use the template the user approved; absent a stronger house style the default skeleton is executive summary → key findings by theme → detailed analysis (quotes under 20 words with attribution, charts, Mermaid graphs, generated visuals, SHA-pinned permalinks, verification results) → comparative analysis when options compete → numbered sources with access dates → methodology appendix (workers, waves, searches, verifications, debate rounds) → correction log naming what verification overturned. Write it long and specific: every claim cites `[Source N]`, and the sources section lists every source the run actually used rather than a curated few. The assembly worker writes `report.src.html` with placeholders, never typed values; the orchestrator runs `node "$SKILL_DIR/scripts/report-tools.mjs" fact fill "$SESSION_DIR/report.src.html" --out "$SESSION_DIR/report.html" --session-dir "$SESSION_DIR"` and gates the filled file. The inline edition for a PDF, DOCX, or oversized HTML deliverable comes from the same source (`fact fill "$SESSION_DIR/report.src.html" --inline --out "$SESSION_DIR/report.inline.html"`, which inlines local stylesheets and makes image paths absolute on the filled output), never from a hand copy.
|
|
157
157
|
|
|
158
158
|
### The delivery gates — every gate for the QA tier must PASS, in order
|
|
159
159
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// omo-codex-install:
|
|
2
|
+
// omo-codex-install:b837866f052aeaebdb29434aa060c717e1588680ac2d27dd6470c3aa46bf6ce0:339b2606b7d2b32746534d242fc03fa67d973e14ef9d15e8669dbf08c420dba7
|
|
3
3
|
var __esm = (fn, res, err) => () => {
|
|
4
4
|
if (fn)
|
|
5
5
|
try {
|
|
@@ -10205,7 +10205,7 @@ var package_default;
|
|
|
10205
10205
|
var init_package = __esm(() => {
|
|
10206
10206
|
package_default = {
|
|
10207
10207
|
name: "@oh-my-opencode/omo-codex",
|
|
10208
|
-
version: "5.1.
|
|
10208
|
+
version: "5.1.62",
|
|
10209
10209
|
type: "module",
|
|
10210
10210
|
private: true,
|
|
10211
10211
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -58,5 +58,5 @@ or text), not a timer; `goto(url, { waitUntil: "commit" })` is the escape hatch
|
|
|
58
58
|
- [network.md](network.md) — `createNetworkSnoop`, `collectWhileScrolling`, `createTrace`, `createRoutes`
|
|
59
59
|
- [frames-and-humans.md](frames-and-humans.md) — `snapshotWithFrames`, `describeLayers`, dialog policy, `emulate`, `requestHuman`
|
|
60
60
|
|
|
61
|
-
The
|
|
61
|
+
The omowright repository's own agent guide and its `presets/*`
|
|
62
62
|
is the authoritative, longer treatment of each; these pages are the routing summary.
|
|
@@ -119,7 +119,7 @@ Layer A (pick AT MOST ONE style skill; they encode opposing philosophies):
|
|
|
119
119
|
| `layout-skill.md` / `interaction-skill.md` / `ambience-skill.md` | Stack on any style skill; mechanics only, no visual direction. |
|
|
120
120
|
| `imagegen-frontend-web.md` / `imagegen-frontend-mobile.md` / `imagegen-brandkit.md` | Image-only output; never code. |
|
|
121
121
|
|
|
122
|
-
Layer B: when the user names a brand or site ("Linear-style", "like Stripe's landing", "Aside-style browser agent"), load `references/design/<brand>.md` as the token source of truth: `aside` `apple` `stripe` `linear.app` `notion` `vercel` `claude` `figma` `airbnb` `nike` `tesla` `spotify` `raycast` `revolut` and ~56 more in `_INDEX.md`. Extract the tokens and apply them to the project's own content; never copy logos or trademarked imagery. A missing brand falls back to a Layer A mood match or the
|
|
122
|
+
Layer B: when the user names a brand or site ("Linear-style", "like Stripe's landing", "Aside-style browser agent"), load `references/design/<brand>.md` as the token source of truth: `aside` `apple` `stripe` `linear.app` `notion` `vercel` `claude` `figma` `airbnb` `nike` `tesla` `spotify` `raycast` `revolut` and ~56 more in `_INDEX.md`. Extract the tokens and apply them to the project's own content; never copy logos or trademarked imagery. A missing brand falls back to a Layer A mood match or to the nexu-io/open-design library (https://github.com/nexu-io/open-design).
|
|
123
123
|
|
|
124
124
|
`perfection/`: `README.md` (the seven tenets: real-browser audits only, 100 in every category, fix at the architecture, never weaken UX for points, design-system compliance, the audit report format) and `react-perf-tooling.md` (Playwright + `playwright-lighthouse` + `react-scan/lite` injection, per-route render budgets). Audit CLI, production build only, mobile and desktop presets, 3-5 runs, take the median:
|
|
125
125
|
|
|
@@ -141,7 +141,7 @@ python3 -B $SKILL_DIR/references/ui-ux-db/scripts/search.py "<query>" --stack <s
|
|
|
141
141
|
|
|
142
142
|
| Situation | Load |
|
|
143
143
|
|---|---|
|
|
144
|
-
| Brand/style not among the 70 in `references/design/`, or the user says "Open Design" |
|
|
144
|
+
| Brand/style not among the 70 in `references/design/`, or the user says "Open Design" | The nexu-io/open-design library (https://github.com/nexu-io/open-design; 137+ design skills, 150+ design systems) |
|
|
145
145
|
| Driving a browser for captures | `visual-qa` skill: omowright from js eval (owned engine for renders, attached engine for signed-in pages) |
|
|
146
146
|
| Pure TypeScript/logic work with zero visual surface | `programming` skill alone; this skill adds nothing there |
|
|
147
147
|
|
|
@@ -12,7 +12,7 @@ Restraint with a visible hierarchy. The brief's primary action is the one promin
|
|
|
12
12
|
- **Layer A, taste skills (12 files, named `-skill.md` or `imagegen-`):** how to execute. Discipline, spacing, motion physics, anti-slop guardrails, output completeness.
|
|
13
13
|
- **Layer B, design systems (70 brand files):** what it looks like. Concrete colour, type, and component tokens for one brand.
|
|
14
14
|
|
|
15
|
-
`_INDEX.md` lists all 83 with mood-to-brand mappings and stacking rules; read it when routing is not obvious. Most non-trivial tasks load one from each layer. For a brand or style outside the curated set, or when the user says "Open Design",
|
|
15
|
+
`_INDEX.md` lists all 83 with mood-to-brand mappings and stacking rules; read it when routing is not obvious. Most non-trivial tasks load one from each layer. For a brand or style outside the curated set, or when the user says "Open Design", use the nexu-io/open-design library (https://github.com/nexu-io/open-design), 150+ design systems, as the expanded library; this file keeps routing discipline, the `DESIGN.md` gate, and execution quality.
|
|
16
16
|
|
|
17
17
|
## Phase 0: Design System Gate (before routing, before any UI code)
|
|
18
18
|
|
|
@@ -23,7 +23,7 @@ Look for `DESIGN.md`, `design-system.md`, or `design-tokens.md` at the project r
|
|
|
23
23
|
**It does not exist: read `design-system-architecture.md` for the structure, then take the branch:**
|
|
24
24
|
|
|
25
25
|
1. **Greenfield, no concrete reference.** Research is a build step with named deliverables, not exploration to budget: run the lanes in parallel and open `DESIGN.md` with `## 0. Research Log`, one line per lane. A lane with no line did not run; skip a lane only when its tool or network is unavailable, and name the skip there.
|
|
26
|
-
- *Embedded references:* shortlist 2-3 plausible Layer B candidates from `_INDEX.md`, then read ONE Layer A style skill and ONE Layer B reference in full, every line (they are 200-500 lines; a sliced read produces the flattened token set this gate exists to prevent). Log the shortlist, the pick, and why.
|
|
26
|
+
- *Embedded references:* shortlist 2-3 plausible Layer B candidates from `_INDEX.md`, then read ONE Layer A style skill and ONE Layer B reference in full, every line (they are 200-500 lines; a sliced read produces the flattened token set this gate exists to prevent). Log the shortlist, the pick, and why. The open-design library only when the curated set has no fit; `ui-ux-db` lookups for palette, type, and domain questions that come up here.
|
|
27
27
|
- *Lazyweb real-product screens:* read `lazyweb.md` FIRST and run its recipe verbatim; it mints its own anonymous token, so never improvise curl calls against the host. Log the queries, how many screens you actually viewed, and the layout grammar taken, never pixel copies. When the harness has the user's own Mobbin MCP connected, run its `search_screens`, `search_flows`, or `search_sections` in this lane too; never reach Mobbin any other way (`component-catalogs.md` section 2). For every reference keep the product name and URL, write what you saw apart from what you recommend, and treat a recurring pattern as a convention, not proof. If the findings lean on one product, widen the set before you build.
|
|
28
28
|
- *StyleGallery:* read `stylegallery.md`, fetch the pattern whose primary spatial problem matches the screen, and write the `Layout:` line.
|
|
29
29
|
- *Imagen concept drafts:* generate 2-3 drafts, each seeded with the loaded Layer A + Layer B tokens (palette, type, material); pick the strongest and treat it as the reference-fidelity contract. Log the paths and the pick.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
| Tailwind-only, no React, server-rendered HTML | daisyUI class components | - | Motion is CSS transitions on `DESIGN.md` section 6 tokens. |
|
|
16
16
|
| Charts and data viz | `ui-ux-db` `--domain chart` for the chart type | bklit for animated chart source; MUI X Charts on Material projects | Section 4. |
|
|
17
17
|
| Landing sections: header, pricing, FAQ, logo cloud, stats, testimonials, footer | smoothui blocks, cult-ui blocks | the section galleries in section 2 (navbar, pricing, CTA, hero, footer) | Take structure only; copy and imagery stay the project's. |
|
|
18
|
-
| A brand outside the 70 Layer B files |
|
|
18
|
+
| A brand outside the 70 Layer B files | The nexu-io/open-design library | designmd.ai: community `DESIGN.md` files, MCP; read each file's licence first (its uploader picks MIT, CC0, CC-BY, CC-BY-SA, or a custom one) | Never refero styles (section 2). |
|
|
19
19
|
|
|
20
20
|
## 2. Catalogs (measured 2026-10-06; microkit, motion-primitives, uiverse, and 21st.dev on 2026-10-25)
|
|
21
21
|
|
package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md
CHANGED
|
@@ -229,7 +229,7 @@ Both paths start with `grounding.md`: the guideline source read in full, the ide
|
|
|
229
229
|
|
|
230
230
|
### For New Projects
|
|
231
231
|
|
|
232
|
-
1. **Select references before taste** — no visual reference means `_INDEX.md` shortlist of 2-3 Layer B candidates, then exactly one Layer A style skill and one Layer B brand/design-system reference. Use
|
|
232
|
+
1. **Select references before taste** — no visual reference means `_INDEX.md` shortlist of 2-3 Layer B candidates, then exactly one Layer A style skill and one Layer B brand/design-system reference. Use the open-design library only when the curated set has no fit.
|
|
233
233
|
2. **Assemble from references** — extract tokens, layout grammar, component anatomy, states, motion, and taste decisions, then recombine them into project-specific primitives. Customize for the user's product; never copy logos, trademarked assets, or brand-specific copy.
|
|
234
234
|
3. **Define the system** — colour roles first (both themes), then atmosphere, typography, spacing, and one depth strategy, grounded in the selected references and product semantics. Sanity-check the palette and type pairing with one `ui-ux-db` domain search (CLI in `references/ui-ux-db/README.md`).
|
|
235
235
|
4. **Document initial primitives** — only components you are about to build, including variants and states, starting from shadcn/ui anatomy (or the project's own kit) restyled with the tokens.
|
|
@@ -222,7 +222,7 @@ If any of those leak into production, the dev gate is broken. Fix the gate befor
|
|
|
222
222
|
## Cross-skill references
|
|
223
223
|
|
|
224
224
|
- For **render performance / Lighthouse 100** work, see `../perfection/react-perf-tooling.md` — Playwright + `react-scan/lite` integration used during automated audits.
|
|
225
|
-
- For **
|
|
225
|
+
- For **browser runtime inspection during an in-flight React bug** (rendered state, console, network), load the `debugging` skill and follow its `references/tools/browser-qa.md`; React-specific inspection uses the React dev tooling this file sets up.
|
|
226
226
|
- The Phase 0 Design System Gate (in `README.md`) and this React Dev Tooling Gate are both pre-implementation gates. Run Phase 0 first (design system must exist), then this gate (dev tooling must be installed).
|
|
227
227
|
|
|
228
228
|
## Mantra
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# Lane A: Direction & Discovery
|
|
2
2
|
|
|
3
|
-
Lane A feeds `ulw-plan`. It does not replace
|
|
3
|
+
Lane A feeds `ulw-plan`. It does not replace the `ulw-plan` planner, write a parallel plan, or start implementation. Its job is to translate designpowers discovery, research, persona, taste, debate, and state capabilities into prompt context that lets `ulw-plan` produce a decision-complete work plan with design-specific acceptance criteria.
|
|
4
4
|
|
|
5
5
|
## Phase Owner
|
|
6
6
|
|
|
7
7
|
| Capability | Source boundary | owner | Mapping |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| Discover the human problem, constraints, audience, success criteria, and early taste signals | Authored concept preserved from excluded raw `design-discovery` | `ulw-plan` | Inject a compact design brief request before
|
|
9
|
+
| Discover the human problem, constraints, audience, success criteria, and early taste signals | Authored concept preserved from excluded raw `design-discovery` | `ulw-plan` | Inject a compact design brief request before the planner drafts tasks. The planner still decides the plan structure and asks only unresolved owner decisions. |
|
|
10
10
|
| Identify research gaps and inclusion-aware research methods | `research-planning` | `ulw-plan` | Convert research questions into plan discovery tasks or explicit assumptions with evidence requirements. |
|
|
11
11
|
| Define principles, experience map, positioning, and success metrics | Authored concept preserved from excluded raw `design-strategy` | `ulw-plan` | Add strategy constraints and design principles to the plan's acceptance criteria. |
|
|
12
12
|
| Represent the full ability spectrum | `inclusive-personas` | `ulw-plan` | Require personas and stress cases in plan inputs, including permanent, temporary, and situational contexts. |
|
|
13
13
|
| Calibrate current-project taste and quality bar | Authored concept preserved from excluded raw `design-taste` | `ulw-plan` | Add live taste constraints for this project only; do not import cross-project memory as a design rule. |
|
|
14
|
-
| Surface competing directions and trade-offs | `design-debate` | `ulw-plan` | When direction is ambiguous, ask
|
|
14
|
+
| Surface competing directions and trade-offs | `design-debate` | `ulw-plan` | When direction is ambiguous, ask the planner to present 2-3 options with accessibility and usability trade-offs before choosing defaults. |
|
|
15
15
|
| Curate references and inspiration without copying | `inspiration-scouting` | `ulw-plan` | Add evidence-backed inspiration notes as optional plan context, with "what to take" and "what to leave." |
|
|
16
16
|
| Maintain shared design state | Authored concept preserved from excluded raw `design-state` | `ulw-plan` | Read and update `.omo/frontend-design/state.md` as the OpenAgent-native state ledger. |
|
|
17
17
|
|
|
@@ -33,7 +33,7 @@ Before planning, extract or infer:
|
|
|
33
33
|
- competing directions and trade-offs when direction is not settled
|
|
34
34
|
- existing `.omo/frontend-design/state.md` decisions, debt, and open questions
|
|
35
35
|
|
|
36
|
-
Add design-specific acceptance criteria to the
|
|
36
|
+
Add design-specific acceptance criteria to the `ulw-plan` plan:
|
|
37
37
|
- each UI task names the persona or journey it serves
|
|
38
38
|
- each task has accessibility and cognitive-accessibility checks where relevant
|
|
39
39
|
- each visual decision traces to a design principle, taste signal, or design-system token
|
|
@@ -52,7 +52,7 @@ Lane A passes only when the plan has inspectable design context, not vague inten
|
|
|
52
52
|
## Guardrails
|
|
53
53
|
|
|
54
54
|
- `ulw-plan` owns the final plan. Lane A may enrich prompts, but it must not create a second planning lane or standalone design plan.
|
|
55
|
-
- `writing-design-plans` content is used only as task-quality guidance;
|
|
55
|
+
- `writing-design-plans` content is used only as task-quality guidance; the `ulw-plan` plan remains the source of executable TODOs.
|
|
56
56
|
- Cross-project memory is descriptive only and must not steer this project's direction unless the user states the preference now.
|
|
57
57
|
- Direction debates pause for user decision when the trade-off is product-shaping, accessibility-critical, or hard to reverse.
|
|
58
58
|
- No new scheduler, background automation, or project root design-state convention is introduced; state stays at `.omo/frontend-design/state.md`.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
## Planning Through `/ulw-plan`
|
|
16
16
|
|
|
17
|
-
When planning is needed, `designpowers` supplies design-specific context and lets `/ulw-plan` own the plan artifact. Do not write a separate design plan. The
|
|
17
|
+
When planning is needed, `designpowers` supplies design-specific context and lets `/ulw-plan` own the plan artifact. Do not write a separate design plan. The `ulw-plan` plan should receive:
|
|
18
18
|
|
|
19
19
|
- product or page goal;
|
|
20
20
|
- primary tasks and user journeys;
|
|
@@ -35,7 +35,7 @@ When a plan is approved or selected, `/ulw-execute` remains the orchestrator. `d
|
|
|
35
35
|
- required `/visual-qa` loading for rendered visual proof;
|
|
36
36
|
- the design debt rule: unresolved accessibility debt cannot disappear into a summary.
|
|
37
37
|
|
|
38
|
-
Direct implementation outside `/ulw-execute` is not part of this routing contract when a
|
|
38
|
+
Direct implementation outside `/ulw-execute` is not part of this routing contract when a `ulw-plan` plan is active.
|
|
39
39
|
|
|
40
40
|
## UI Build Through Frontend `design` And `perfection`
|
|
41
41
|
|
|
@@ -16,7 +16,7 @@ The correct path:
|
|
|
16
16
|
3. Run Lighthouse against the Playwright-controlled page via `playwright-lighthouse` OR via `chrome-launcher` + the `lighthouse` Node API, attaching to the Playwright CDP endpoint so cookies, auth state, and warmed caches mirror what a real returning user sees.
|
|
17
17
|
4. Use the **mobile** preset (4x CPU throttle, Fast 3G) for the primary number, AND the **desktop** preset for the secondary number. Report both.
|
|
18
18
|
|
|
19
|
-
If
|
|
19
|
+
If no browser-automation skill is loaded in this session, load the `browser` skill now (read its `SKILL.md`).
|
|
20
20
|
|
|
21
21
|
### 2. 100 IN EVERY CATEGORY IS THE FLOOR.
|
|
22
22
|
|
|
@@ -52,7 +52,7 @@ Next-generation HTTP client under Pydantic stewardship. Sync and async in one li
|
|
|
52
52
|
|
|
53
53
|
**Install**: `httpx2[http2,brotli,zstd]` — always include all three extras, no exceptions.
|
|
54
54
|
|
|
55
|
-
**A bare `httpx2.AsyncClient()` / `httpx2.Client()` is a bug.** Always use the factory pattern from `references/httpx2-optimization.md` with ALL optimizations enabled by default:
|
|
55
|
+
**A bare `httpx2.AsyncClient()` / `httpx2.Client()` is a bug.** Always use the factory pattern from `references/python/httpx2-optimization.md` with ALL optimizations enabled by default:
|
|
56
56
|
|
|
57
57
|
```python
|
|
58
58
|
import socket
|
|
@@ -78,7 +78,7 @@ with httpx2.Client(transport=transport, timeout=_TIMEOUT, follow_redirects=True)
|
|
|
78
78
|
users = response.json()
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
See `references/httpx2-optimization.md` for the full factory functions (`create_client()` / `create_async_client()`), event hooks, and the rationale behind every setting. **Load that reference whenever you write ANY network code.**
|
|
81
|
+
See `references/python/httpx2-optimization.md` for the full factory functions (`create_client()` / `create_async_client()`), event hooks, and the rationale behind every setting. **Load that reference whenever you write ANY network code.**
|
|
82
82
|
|
|
83
83
|
## JSON — stdlib `json` (default) or `orjson` (hot paths)
|
|
84
84
|
|
|
@@ -98,7 +98,7 @@ raw: bytes = orjson.dumps(
|
|
|
98
98
|
|
|
99
99
|
For FastAPI: `app = FastAPI(default_response_class=ORJSONResponse)`. Pydantic-typed responses bypass it (and that's correct — Pydantic's path is faster). Raw `dict`/`list` returns go through orjson.
|
|
100
100
|
|
|
101
|
-
See `references/orjson-stack.md` for the full decision tree, option flag reference, FastAPI integration, Redis/queue/logging patterns, and the `model_dump_json()` vs orjson benchmark.
|
|
101
|
+
See `references/python/orjson-stack.md` for the full decision tree, option flag reference, FastAPI integration, Redis/queue/logging patterns, and the `model_dump_json()` vs orjson benchmark.
|
|
102
102
|
|
|
103
103
|
## Validation — pydantic v2
|
|
104
104
|
|
|
@@ -258,7 +258,7 @@ if __name__ == "__main__":
|
|
|
258
258
|
| `python -m venv .venv && ...` | `uv run --script` handles it |
|
|
259
259
|
| Script without usage comment | Always include the "How to run" block |
|
|
260
260
|
| `import asyncio; asyncio.run(main())` | `import anyio; anyio.run(main)` |
|
|
261
|
-
| Bare `httpx2.AsyncClient()` | Full production defaults (see `references/httpx2-optimization.md`) |
|
|
261
|
+
| Bare `httpx2.AsyncClient()` | Full production defaults (see `references/python/httpx2-optimization.md`) |
|
|
262
262
|
|
|
263
263
|
## Sources
|
|
264
264
|
|
|
@@ -209,7 +209,7 @@ A single `make ci` target combining the four works fine.
|
|
|
209
209
|
|
|
210
210
|
## Enforcement summary
|
|
211
211
|
|
|
212
|
-
The config above, combined with `scripts/check-no-excuse-rules.py`, enforces:
|
|
212
|
+
The config above, combined with `scripts/python/check-no-excuse-rules.py`, enforces:
|
|
213
213
|
|
|
214
214
|
| What | How |
|
|
215
215
|
|---|---|
|
|
@@ -321,7 +321,7 @@ let player: WorldPoint = Point2D::new(3.5, 1.2);
|
|
|
321
321
|
// let mistake = cursor + player; // compile error: different coordinate spaces
|
|
322
322
|
```
|
|
323
323
|
|
|
324
|
-
Generalize the pattern to your own domains (see `references/type-state.md`).
|
|
324
|
+
Generalize the pattern to your own domains (see `references/rust/type-state.md`).
|
|
325
325
|
|
|
326
326
|
## Property tests — `proptest`
|
|
327
327
|
|
|
@@ -380,7 +380,7 @@ Run with `cargo bench`. HTML reports under `target/criterion/`. Pair with `cargo
|
|
|
380
380
|
|
|
381
381
|
## Concurrency model — `loom`
|
|
382
382
|
|
|
383
|
-
For lock-free or atomic-heavy code (channels, refcounts, hazard pointers). See `references/concurrency.md` for the full pattern.
|
|
383
|
+
For lock-free or atomic-heavy code (channels, refcounts, hazard pointers). See `references/rust/concurrency.md` for the full pattern.
|
|
384
384
|
|
|
385
385
|
## Arena allocator — `bumpalo`
|
|
386
386
|
|
|
@@ -656,7 +656,7 @@ Record the chosen path in the TodoWrite list.
|
|
|
656
656
|
|
|
657
657
|
**Precondition checks** (fail hard if any step fails):
|
|
658
658
|
|
|
659
|
-
1.
|
|
659
|
+
1. When the session lists the \`team-mode\` skill, load it for lifecycle, message protocol, and limits.
|
|
660
660
|
2. Call \`team_list\` and verify no active \`refactor-squad\` run exists; if one does, shutdown + delete the orphan before proceeding.
|
|
661
661
|
3. If \`~/.omo/teams/refactor-squad/config.json\` is missing, write it using the spec below.
|
|
662
662
|
|
|
@@ -15,7 +15,7 @@ Web access for the hosts the user's browser cannot open (WAF / 403 / Cloudflare
|
|
|
15
15
|
User request
|
|
16
16
|
|
|
|
17
17
|
+- a page the user's browser can open (read, click, screenshot, QA, login) NOT this skill (browser skill, attached engine)
|
|
18
|
-
+- simple search query ------------------------------ NOT this skill (use web
|
|
18
|
+
+- simple search query ------------------------------ NOT this skill (use web search)
|
|
19
19
|
|
|
|
20
20
|
+- URL blocked / 403 / Cloudflare / WAF ------------- TIER 1 insane-search
|
|
21
21
|
+- YouTube/Vimeo/TikTok subtitles or metadata ------- TIER 1 insane-search (yt-dlp)
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
- Claude는 그 사이 foreground에서 MCP Playwright 정찰 루트를 진행
|
|
47
47
|
- engine이 먼저 성공해도 좋고, MCP 정찰로 얻은 API가 먼저 성공해도 좋음. 빠른 쪽 결과 채택
|
|
48
48
|
|
|
49
|
-
**MCP 정찰
|
|
49
|
+
**MCP 정찰 루트** (Playwright MCP가 로드된 세션 전용. 없으면 the `browser` skill's `references/owned-engine/network.md` 로 같은 XHR/fetch 목록을 모은다):
|
|
50
50
|
1. `mcp__playwright__browser_navigate` → 대상 페이지 로드 (브라우저 렌더링)
|
|
51
51
|
2. `mcp__playwright__browser_network_requests` → XHR/fetch 호출 목록 수집, `/api/`·`/graphql`·`\.json` 필터로 내부 엔드포인트 식별
|
|
52
52
|
3. 식별된 JSON API URL을 `python3 -B -m engine <API_URL>`로 재호출 (백그라운드 engine과는 별개 호출). 대부분 API 레이어는 페이지 HTML보다 WAF 보호가 얕아 curl_cffi로 바로 수집됨
|
|
@@ -103,7 +103,7 @@ Every phase (plan wave) runs in its own task-owned worktree with its own goal: b
|
|
|
103
103
|
Solo orchestration with parallel background workers is the default topology. Decide once, when the wave's lanes are known, and record the verdict in the ledger:
|
|
104
104
|
|
|
105
105
|
- **Independent lanes -> parallel workers.** Separate files, no shared contract: one parallel spawn burst; no team.
|
|
106
|
-
- **Dependency-ordered lanes -> one `workflow` run per wave.** Sub-tasks with real ordering between them (C needs A and B finished first) and a harness with a native `workflow` tool: dispatch the wave as ONE run (one producer node per lane plus a verification node); recover inside it with `retry`/`amend`/`send`; let the run's settle wake you instead of arming per-lane watchers; the next wave is a NEW run (or `amend` when only the definition changed) — never one graph for the whole plan.
|
|
106
|
+
- **Dependency-ordered lanes -> one `workflow` run per wave.** Sub-tasks with real ordering between them (C needs A and B finished first) and a harness with a native `workflow` tool: dispatch the wave as ONE run (one producer node per lane plus a verification node); recover inside it with `retry`/`amend`/`send`; let the run's settle wake you instead of arming per-lane watchers; the next wave is a NEW run (or `amend` when only the definition changed) — never one graph for the whole plan. When the harness lists the `mass-ulw` skill, read its `SKILL.md` and `references/planning.md` IN FULL before defining any graph.
|
|
107
107
|
- **Overlapping lanes -> a team.** The lanes touch the same module or contract AND running them concurrently actually finishes sooner: stand up a team (where the harness has one) so one lane's discoveries relay through you mid-flight.
|
|
108
108
|
- **PR-mode independent lanes -> a worktree per lane.** Under `--make-pr`/`--ship`, when a wave holds independent checkboxes, give each lane its own branch and task-owned worktree, delivered as its own PR.
|
|
109
109
|
|
|
@@ -76,7 +76,7 @@ Observation candidates and claim candidates travel back from workers as message
|
|
|
76
76
|
|
|
77
77
|
## Run the swarm as a cooperating team
|
|
78
78
|
|
|
79
|
-
Saturation research defaults to teammode, not isolated fire-and-forget workers: a lead one worker surfaces almost always reshapes what another should search next. When your harness gives you real cooperating members — Codex: the `teammode` skill (MultiAgentV2 agents, or `codex_app` threads as its fallback); OpenCode: `team_mode` — run this swarm as a team. Fall back to the background-worker swarm below only when team mode is unavailable, or the axes are genuinely independent with no cross-pollination expected.
|
|
79
|
+
Saturation research defaults to teammode, not isolated fire-and-forget workers: a lead one worker surfaces almost always reshapes what another should search next. When your harness gives you real cooperating members — Codex: the `teammode` skill when it is listed (MultiAgentV2 agents, or `codex_app` threads as its fallback); OpenCode: `team_mode` — run this swarm as a team. Fall back to the background-worker swarm below only when team mode is unavailable, or the axes are genuinely independent with no cross-pollination expected.
|
|
80
80
|
|
|
81
81
|
- **One member per axis — by part, ownership, or perspective, never a job title.** Each Phase 0 axis is one member owning one concrete slice: a codebase part, a source territory, or a question lens. No two members share an angle. "Backend researcher" or "the web person" gives no real boundary and invites overlap — name what the member owns.
|
|
82
82
|
- **Always the maximum roster.** The team is not sized by taste: fill every member slot your harness allows (OpenCode `team_mode` caps members at 8; Codex teammode has its own ceiling) on every run. If you can only name five axes, split the broadest one — by source territory, by time window, by perspective — until the roster is full. A half-empty team is a half-covered topic.
|
|
@@ -151,7 +151,7 @@ Asset workers (background, parallel, each fed `design-spec.md`) — visuals are
|
|
|
151
151
|
|
|
152
152
|
**Verify the asset manifest before rendering.** List every asset the document references, assert each file exists and is non-empty on disk, and re-render whatever is missing. A document that renders with three broken diagrams is a document you will publish twice.
|
|
153
153
|
|
|
154
|
-
Assembly worker — `task(category="deep-low", load_skills=["frontend", "visual-qa", "
|
|
154
|
+
Assembly worker — `task(category="deep-low", load_skills=["frontend", "visual-qa", "data-scientist"], run_in_background=true, ...)`; when the session lists the `imagegen` skill or the `ulw-loop` skill, add each one it lists to `load_skills`. Before writing, read every available design and visualization skill and apply it — the report is a designed artifact, not a text dump; the worker's prompt carries `design-spec.md`. Use the template the user approved; absent a stronger house style the default skeleton is executive summary → key findings by theme → detailed analysis (quotes under 20 words with attribution, charts, Mermaid graphs, generated visuals, SHA-pinned permalinks, verification results) → comparative analysis when options compete → numbered sources with access dates → methodology appendix (workers, waves, searches, verifications, debate rounds) → correction log naming what verification overturned. Write it long and specific: every claim cites `[Source N]`, and the sources section lists every source the run actually used rather than a curated few. The assembly worker writes `report.src.html` with placeholders, never typed values; the orchestrator runs `node "$SKILL_DIR/scripts/report-tools.mjs" fact fill "$SESSION_DIR/report.src.html" --out "$SESSION_DIR/report.html" --session-dir "$SESSION_DIR"` and gates the filled file. The inline edition for a PDF, DOCX, or oversized HTML deliverable comes from the same source (`fact fill "$SESSION_DIR/report.src.html" --inline --out "$SESSION_DIR/report.inline.html"`, which inlines local stylesheets and makes image paths absolute on the filled output), never from a hand copy.
|
|
155
155
|
|
|
156
156
|
### The delivery gates — every gate for the QA tier must PASS, in order
|
|
157
157
|
|