oh-my-opencode 4.13.0 → 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/codex-qa/SKILL.md +15 -0
- package/.agents/skills/codex-qa/references/logging-debug.md +12 -0
- package/.agents/skills/opencode-qa/SKILL.md +17 -0
- package/.agents/skills/opencode-qa/references/tui-tmux.md +17 -0
- package/.agents/skills/work-with-pr/SKILL.md +18 -10
- package/.opencode/skills/work-with-pr/SKILL.md +18 -10
- package/README.md +2 -2
- package/dist/cli/doctor/checks/telemetry.d.ts +2 -0
- package/dist/cli/doctor/framework/constants.d.ts +1 -0
- package/dist/cli/doctor/framework/doctor-target.d.ts +1 -1
- package/dist/cli/index.js +24651 -16452
- package/dist/cli-node/index.js +24651 -16452
- package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
- package/dist/features/team-mode/test-support/async-test-helpers.d.ts +19 -0
- package/dist/hooks/atlas/final-wave-approval-gate.d.ts +1 -0
- package/dist/hooks/atlas/subagent-completion-reminder.d.ts +30 -0
- package/dist/hooks/atlas/types.d.ts +2 -0
- package/dist/hooks/atlas/verification-reminders.d.ts +3 -0
- package/dist/hooks/team-session-events/team-idle-wake-hint.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +33232 -19559
- package/dist/mcp/context7.d.ts +9 -8
- package/dist/oh-my-opencode.schema.json +4 -0
- package/dist/shared/posthog.d.ts +17 -10
- package/dist/shared/telemetry-product-identity.d.ts +2 -0
- package/dist/skills/coding-agent-sessions/SKILL.md +128 -0
- package/dist/skills/coding-agent-sessions/agents/openai.yaml +4 -0
- package/dist/skills/coding-agent-sessions/references/all-platforms.md +71 -0
- package/dist/skills/coding-agent-sessions/references/claude.md +32 -0
- package/dist/skills/coding-agent-sessions/references/codex.md +30 -0
- package/dist/skills/coding-agent-sessions/references/opencode.md +43 -0
- package/dist/skills/coding-agent-sessions/references/senpi.md +17 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
- package/dist/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
- package/dist/skills/frontend/ATTRIBUTION.md +52 -8
- package/dist/skills/frontend/SKILL.md +29 -8
- package/dist/skills/frontend/references/design/README.md +29 -12
- package/dist/skills/frontend/references/design/_INDEX.md +3 -3
- package/dist/skills/frontend/references/design/design-system-architecture.md +22 -19
- package/dist/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
- package/dist/skills/frontend/references/designpowers/README.md +48 -0
- package/dist/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
- package/dist/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
- package/dist/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
- package/dist/skills/frontend/references/designpowers/lane-c-review.md +65 -0
- package/dist/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
- package/dist/skills/frontend/references/designpowers/orchestration.md +80 -0
- package/dist/skills/frontend/references/designpowers/routing.md +79 -0
- package/dist/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/dist/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
- package/dist/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
- package/dist/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
- package/dist/skills/git-master/SKILL.md +4 -0
- package/dist/skills/review-work/SKILL.md +3 -3
- package/dist/skills/start-work/SKILL.md +7 -5
- package/dist/skills/ultraresearch/SKILL.md +4 -252
- package/dist/skills/ulw-plan/SKILL.md +8 -6
- package/dist/skills/ulw-plan/references/full-workflow.md +11 -6
- package/dist/skills/ulw-plan/references/intent-clear.md +3 -3
- package/dist/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/dist/skills/{ultraresearch → ulw-research}/ATTRIBUTION.md +1 -1
- package/dist/skills/ulw-research/SKILL.md +260 -0
- package/dist/skills/visual-qa/SKILL.md +105 -14
- package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +120 -1
- package/dist/testing/create-plugin-module.d.ts +2 -0
- package/dist/tui.js +23917 -16117
- package/docs/reference/github-attachment-upload.md +51 -0
- package/docs/reference/web-terminal-visual-qa.md +81 -0
- package/package.json +20 -14
- package/packages/lsp-core/src/lsp/process.ts +4 -1
- package/packages/lsp-core/src/mcp.ts +1 -0
- package/packages/lsp-daemon/dist/cli.js +5 -1
- package/packages/lsp-daemon/dist/index.js +5 -1
- package/packages/lsp-daemon/dist/proxy.js +1 -0
- package/packages/lsp-tools-mcp/dist/cli.js +5 -1
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +4 -1
- package/packages/lsp-tools-mcp/dist/mcp.js +5 -1
- package/packages/lsp-tools-mcp/dist/tools.js +4 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +323 -62
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/scripts/bootstrap.ps1 +37 -68
- package/packages/omo-codex/plugin/components/bootstrap/scripts/node-dispatch.ps1 +75 -0
- package/packages/omo-codex/plugin/components/bootstrap/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +2 -18
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +575 -334
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +204 -39
- package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +7 -1
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +103 -3
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +114 -0
- package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +29 -0
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +31 -57
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +7 -4
- package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +43 -9
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +146 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +12 -7
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +71 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +4 -1
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +2 -2
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +2 -2
- package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +11 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +6 -6
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +23 -0
- package/packages/omo-codex/plugin/components/teammode/dist/cli.js +22 -4
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +40 -2
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +32 -5
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +7 -3
- package/packages/omo-codex/plugin/components/teammode/src/codex-hook.ts +19 -4
- package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +32 -2
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +23 -7
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -4
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +11 -6
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +3 -3
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +24 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +25 -21
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +381 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +14 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +145 -14
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.d.ts +6 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +16 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.d.ts +5 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.js +104 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +19 -11
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +14 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +28 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/ultrawork-directive.ts +113 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +33 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +31 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +36 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +64 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +2 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +2 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +2 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +2 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +2 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +2 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +2 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +2 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +2 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +2 -1
- package/packages/omo-codex/plugin/package-lock.json +13 -13
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +9 -5
- package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +1 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/context7-placeholder-guard.mjs +131 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-mode-guard.mjs +60 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +3 -10
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/root-settings.mjs +31 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +73 -0
- package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +20 -3
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +30 -8
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +128 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/agents/openai.yaml +4 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +71 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/claude.md +32 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/codex.md +30 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/opencode.md +43 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +17 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
- package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +52 -8
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +29 -8
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +29 -12
- package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +3 -3
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +22 -19
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +48 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-c-review.md +65 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +80 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +79 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
- package/packages/omo-codex/plugin/skills/git-master/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -0
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +12 -4
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +14 -8
- package/packages/omo-codex/plugin/skills/teammode/SKILL.md +40 -2
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +32 -5
- package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +7 -3
- package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +4 -250
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +19 -11
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -4
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +11 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +3 -3
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/packages/{shared-skills/skills/ultraresearch → omo-codex/plugin/skills/ulw-research}/ATTRIBUTION.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +262 -0
- package/packages/omo-codex/plugin/skills/ulw-research/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +109 -14
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -0
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -0
- package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +1 -0
- package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +24 -1
- package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +23 -5
- package/packages/omo-codex/plugin/test/bootstrap-hooks.test.mjs +38 -0
- package/packages/omo-codex/plugin/test/bootstrap-ps-guard.test.mjs +25 -0
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +1 -7
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +206 -6
- package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +44 -0
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +50 -1
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +10 -7
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +28 -2
- package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +20 -0
- package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +117 -0
- package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +5 -2
- package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +285 -0
- package/packages/omo-codex/scripts/install-bin-links.test.mjs +6 -1
- package/packages/omo-codex/scripts/install-cache-copy.test.mjs +51 -0
- package/packages/omo-codex/scripts/install-config.test.mjs +198 -17
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +701 -282
- package/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +24 -15
- package/packages/omo-codex/scripts/install-local.test.mjs +5 -1
- package/packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs +84 -0
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +128 -0
- package/packages/shared-skills/skills/coding-agent-sessions/agents/openai.yaml +4 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +71 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/claude.md +32 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/codex.md +30 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/opencode.md +43 -0
- package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +17 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
- package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +52 -8
- package/packages/shared-skills/skills/frontend/SKILL.md +29 -8
- package/packages/shared-skills/skills/frontend/references/design/README.md +29 -12
- package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +3 -3
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +22 -19
- package/packages/shared-skills/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/README.md +48 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-c-review.md +65 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +80 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +79 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
- package/packages/shared-skills/skills/git-master/SKILL.md +4 -0
- package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
- package/packages/shared-skills/skills/start-work/SKILL.md +7 -5
- package/packages/shared-skills/skills/ultraresearch/SKILL.md +4 -252
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +8 -6
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +11 -6
- package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +3 -3
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +1 -1
- package/packages/{omo-codex/plugin/skills/ultraresearch → shared-skills/skills/ulw-research}/ATTRIBUTION.md +1 -1
- package/packages/shared-skills/skills/ulw-research/SKILL.md +260 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +105 -14
- package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +120 -1
- package/script/qa/web-terminal-redaction.d.mts +13 -0
- package/script/qa/web-terminal-redaction.mjs +43 -0
- package/script/qa/web-terminal-renderer.mjs +218 -0
- package/script/qa/web-terminal-visual-qa.mjs +264 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +0 -110
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +0 -245
- package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +0 -204
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: voice-and-tone
|
|
3
|
+
description: "Use when establishing or applying brand voice — defining voice attributes, tone adaptation across contexts, vocabulary lists, writing examples, and ensuring consistent personality across the interface"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Voice and Tone
|
|
7
|
+
|
|
8
|
+
Voice is who you are. Tone is how you say it right now. Voice stays constant. Tone adapts to context. This skill defines both so every word sounds like the same person wrote it.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- At the start of a project, during or after `design-strategy`
|
|
13
|
+
- When the content-writer agent needs voice guardrails
|
|
14
|
+
- When interface copy sounds inconsistent across screens
|
|
15
|
+
|
|
16
|
+
## Step 1: Define Voice Attributes
|
|
17
|
+
|
|
18
|
+
Choose 3-5. For each, define "this, not that":
|
|
19
|
+
|
|
20
|
+
| Attribute | This | Not that |
|
|
21
|
+
|-----------|------|----------|
|
|
22
|
+
| Warm | Friendly, approachable | Sycophantic, emoji-heavy |
|
|
23
|
+
| Knowledgeable | Confident, precise | Academic, condescending |
|
|
24
|
+
| Direct | Clear, action-oriented | Blunt, cold, robotic |
|
|
25
|
+
| Encouraging | Celebrates effort | Patronising, fake-cheerful |
|
|
26
|
+
|
|
27
|
+
The "not that" column prevents drift.
|
|
28
|
+
|
|
29
|
+
## Step 2: Define Tone by Context
|
|
30
|
+
|
|
31
|
+
| Context | Feel | Example |
|
|
32
|
+
|---------|------|---------|
|
|
33
|
+
| Success | Celebration, warmth | "Your monstera is happy. Next water Thursday." |
|
|
34
|
+
| Error | Calm, helpful, no blame | "We couldn't save that. Check your connection and try again." |
|
|
35
|
+
| Onboarding | Welcoming, confidence-building | "Let's get to know your plants. About 30 seconds." |
|
|
36
|
+
| Empty state | Inviting, action-oriented | "Your windowsill is empty. Add your first plant." |
|
|
37
|
+
| Loading | Reassuring, brief | "Checking your plants..." |
|
|
38
|
+
| Destructive | Clear, calm, reversible | "Remove this plant? You can undo this." |
|
|
39
|
+
|
|
40
|
+
## Step 3: Build the Vocabulary
|
|
41
|
+
|
|
42
|
+
| Always use | Never use |
|
|
43
|
+
|-----------|----------|
|
|
44
|
+
| water | irrigate |
|
|
45
|
+
| happy | optimal |
|
|
46
|
+
| check it out | investigate |
|
|
47
|
+
| you | the user |
|
|
48
|
+
|
|
49
|
+
The content-writer agent uses this as a constraint.
|
|
50
|
+
|
|
51
|
+
## Step 4: Set Reading Level
|
|
52
|
+
|
|
53
|
+
| Audience | Target |
|
|
54
|
+
|----------|--------|
|
|
55
|
+
| General consumer | Grade 6-8 |
|
|
56
|
+
| Professional tool | Grade 8-10 |
|
|
57
|
+
| Technical docs | Grade 10-12 |
|
|
58
|
+
|
|
59
|
+
## Voice Audit Checklist
|
|
60
|
+
|
|
61
|
+
- [ ] Every screen sounds like the same person wrote it
|
|
62
|
+
- [ ] Voice attributes are present in the copy
|
|
63
|
+
- [ ] Tone matches the context
|
|
64
|
+
- [ ] Vocabulary list words used consistently
|
|
65
|
+
- [ ] Reading level at or below target
|
|
66
|
+
- [ ] Copy works read aloud by a screen reader
|
|
67
|
+
|
|
68
|
+
## What You Deliver
|
|
69
|
+
|
|
70
|
+
- Voice attributes table (3-5, with "this not that")
|
|
71
|
+
- Tone guide by context with examples
|
|
72
|
+
- Vocabulary list
|
|
73
|
+
- Reading level target
|
|
74
|
+
- 3-5 before/after examples
|
|
75
|
+
|
|
76
|
+
## Integration
|
|
77
|
+
|
|
78
|
+
- **Informed by:** `design-strategy`, `design-discovery`
|
|
79
|
+
- **Feeds into:** `content-writer` agent, `accessible-content`, `design-critic`
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writing-design-plans
|
|
3
|
+
description: "Use when you have a design brief or strategy and need to break implementation into reviewable chunks — creates step-by-step plans with verification criteria for each task"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Writing Design Plans
|
|
7
|
+
|
|
8
|
+
A design plan breaks an approved design direction into discrete, reviewable tasks. Each task is small enough to evaluate clearly and specific enough that the result is predictable.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- After design-discovery and/or design-strategy have produced an approved direction
|
|
13
|
+
- Before any implementation work begins
|
|
14
|
+
- When a design task is too large to complete and review in one step
|
|
15
|
+
|
|
16
|
+
## Process
|
|
17
|
+
|
|
18
|
+
### Step 1: Review Inputs
|
|
19
|
+
|
|
20
|
+
Gather:
|
|
21
|
+
- Design brief (from design-discovery)
|
|
22
|
+
- Strategy document (from design-strategy, if applicable)
|
|
23
|
+
- Personas (from inclusive-personas)
|
|
24
|
+
- Existing design system inventory
|
|
25
|
+
|
|
26
|
+
### Step 2: Identify Design Tasks
|
|
27
|
+
|
|
28
|
+
Break the work into categories:
|
|
29
|
+
|
|
30
|
+
1. **Structure tasks** — information architecture, page hierarchy, navigation
|
|
31
|
+
2. **Component tasks** — individual UI components that need designing
|
|
32
|
+
3. **Layout tasks** — how components compose into screens
|
|
33
|
+
4. **Interaction tasks** — states, transitions, feedback patterns
|
|
34
|
+
5. **Content tasks** — copy, labels, error messages, help text
|
|
35
|
+
6. **Accessibility tasks** — specific inclusive design requirements per component
|
|
36
|
+
|
|
37
|
+
### Step 3: Order the Work
|
|
38
|
+
|
|
39
|
+
Design work has natural dependencies:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
Structure → Layout → Components → Interactions → Content → Review
|
|
43
|
+
↑ accessibility woven through each step, not a final phase ↑
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Order tasks so that:
|
|
47
|
+
- Foundation work (structure, layout) comes before detail work (interactions, content)
|
|
48
|
+
- Each task can be reviewed independently
|
|
49
|
+
- Accessibility is addressed within each task, not deferred
|
|
50
|
+
|
|
51
|
+
### Step 4: Write the Plan
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
# Design Plan: [Feature/Project Name]
|
|
55
|
+
|
|
56
|
+
> **For agentic workers:** REQUIRED: Use designpowers:designpowers-critique to review completed work against this plan.
|
|
57
|
+
|
|
58
|
+
**Goal:** [One sentence — what this plan delivers]
|
|
59
|
+
|
|
60
|
+
**Design Direction:** [Reference to the design brief or strategy]
|
|
61
|
+
|
|
62
|
+
**Personas:** [Reference to personas this plan serves]
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Task 1: [Task Name]
|
|
67
|
+
|
|
68
|
+
**Files:** [Which files will be created or modified]
|
|
69
|
+
|
|
70
|
+
- [ ] Step 1: [Specific action]
|
|
71
|
+
- [ ] Step 2: [Specific action]
|
|
72
|
+
- [ ] Step 3: [Specific action]
|
|
73
|
+
|
|
74
|
+
**Accessibility check:** [What inclusive design criteria this task must meet]
|
|
75
|
+
|
|
76
|
+
**Verification:** [How to confirm this task is complete and correct]
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Task 2: [Task Name]
|
|
81
|
+
...
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Step 5: Task Sizing
|
|
85
|
+
|
|
86
|
+
Each task should be:
|
|
87
|
+
- **2-5 minutes of focused work** — small enough to hold in your head
|
|
88
|
+
- **Independently reviewable** — someone can evaluate it without seeing everything else
|
|
89
|
+
- **Specifically described** — exact files, exact components, exact acceptance criteria
|
|
90
|
+
- **Accessibility-inclusive** — each task addresses its own inclusive design requirements
|
|
91
|
+
|
|
92
|
+
If a task takes longer than 5 minutes, break it down further.
|
|
93
|
+
|
|
94
|
+
### Step 6: Save and Review
|
|
95
|
+
|
|
96
|
+
Save to: `docs/designpowers/plans/YYYY-MM-DD-<feature>-plan.md`
|
|
97
|
+
|
|
98
|
+
Present the plan to the user. Walk through:
|
|
99
|
+
- Does the task order make sense?
|
|
100
|
+
- Are any tasks missing?
|
|
101
|
+
- Are the accessibility checks appropriate for each task?
|
|
102
|
+
- Is the scope right, or should anything be deferred?
|
|
103
|
+
|
|
104
|
+
User must approve the plan before execution begins.
|
|
105
|
+
|
|
106
|
+
## Integration
|
|
107
|
+
|
|
108
|
+
- **Called by:** `design-discovery`, `design-strategy`
|
|
109
|
+
- **Calls:** Implementation begins via the relevant design skills (`ui-composition`, `interaction-design`, etc.)
|
|
110
|
+
- **Pairs with:** `designpowers-critique` (reviews work against the plan)
|
|
111
|
+
|
|
112
|
+
## Anti-Patterns
|
|
113
|
+
|
|
114
|
+
| Pattern | Problem |
|
|
115
|
+
|---------|---------|
|
|
116
|
+
| Tasks without accessibility checks | Every task affects the user experience. Every task has accessibility implications |
|
|
117
|
+
| Tasks that say "make it look good" | Vague tasks produce vague results. Be specific about what "good" means |
|
|
118
|
+
| Accessibility as the final task | By then it is too late. Accessibility is in every task |
|
|
119
|
+
| Plan without persona references | If you do not know who you are designing for, you cannot verify the design works |
|
|
File without changes
|
|
@@ -36,6 +36,10 @@ git merge-base HEAD origin/master
|
|
|
36
36
|
|
|
37
37
|
Missing upstream or missing `main`/`master` is normal. Fall back to the best available branch or report the missing fact. Never treat a failed lookup as proof.
|
|
38
38
|
|
|
39
|
+
## PR Body Evidence Attachments
|
|
40
|
+
|
|
41
|
+
When a PR body needs screenshots or terminal PNGs, use the repo reference at `docs/reference/github-attachment-upload.md`. The allowed hosting path is GitHub user attachments from the authenticated web attachment flow; never commit temporary images, never use GitHub Releases for PR evidence, and never use external image hosts. Do not log browser cookies, CSRF tokens, S3 form fields, or upload headers.
|
|
42
|
+
|
|
39
43
|
## Commit Mode
|
|
40
44
|
|
|
41
45
|
Commit only the user's requested changes. Preserve unrelated dirty work.
|
|
@@ -18,6 +18,10 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
18
18
|
|
|
19
19
|
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` - pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
20
20
|
|
|
21
|
+
On `multi_agent_v2` sessions the same `agent_type` applies (the OMO installer exposes it) with `fork_turns` instead of `fork_context`. If a code block below conflicts with this section, this section wins.
|
|
22
|
+
|
|
23
|
+
When translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.
|
|
24
|
+
|
|
21
25
|
For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.
|
|
22
26
|
|
|
23
27
|
# /init-deep
|
|
@@ -19,6 +19,10 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
19
19
|
|
|
20
20
|
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` - pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
21
21
|
|
|
22
|
+
On `multi_agent_v2` sessions the same `agent_type` applies (the OMO installer exposes it) with `fork_turns` instead of `fork_context`. If a code block below conflicts with this section, this section wins.
|
|
23
|
+
|
|
24
|
+
When translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.
|
|
25
|
+
|
|
22
26
|
For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.
|
|
23
27
|
|
|
24
28
|
export const REFACTOR_TEMPLATE = `# Intelligent Refactor Command
|
|
@@ -19,6 +19,10 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
19
19
|
|
|
20
20
|
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` - pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
21
21
|
|
|
22
|
+
On `multi_agent_v2` sessions the same `agent_type` applies (the OMO installer exposes it) with `fork_turns` instead of `fork_context`. If a code block below conflicts with this section, this section wins.
|
|
23
|
+
|
|
24
|
+
When translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.
|
|
25
|
+
|
|
22
26
|
For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.
|
|
23
27
|
|
|
24
28
|
# Remove AI Slops Skill
|
|
@@ -18,6 +18,10 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
18
18
|
|
|
19
19
|
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` - pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
20
20
|
|
|
21
|
+
On `multi_agent_v2` sessions the same `agent_type` applies (the OMO installer exposes it) with `fork_turns` instead of `fork_context`. If a code block below conflicts with this section, this section wins.
|
|
22
|
+
|
|
23
|
+
When translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.
|
|
24
|
+
|
|
21
25
|
For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.
|
|
22
26
|
|
|
23
27
|
## Codex Subagent Reliability
|
|
@@ -58,7 +62,11 @@ gate, it is blocking. A timeout, missing deliverable, ack-only response,
|
|
|
58
62
|
explicit `BLOCKED:`, or inconclusive lane is not a pass. Treat that lane as
|
|
59
63
|
failed, investigate the underlying uncertainty with the `debugging` skill when
|
|
60
64
|
runtime behavior may be wrong, fix with evidence, and rerun the affected lane
|
|
61
|
-
before claiming completion or handing off a PR.
|
|
65
|
+
before claiming completion, creating or handing off a PR, or merging.
|
|
66
|
+
|
|
67
|
+
When reviewing a PR or branch, collect diff, file contents, and verification
|
|
68
|
+
results from a dedicated review worktree attached to that branch. Never
|
|
69
|
+
checkout, test, or edit the review branch in the main worktree.
|
|
62
70
|
|
|
63
71
|
Review evidence must be safe to share. Redact or mask secrets and sensitive
|
|
64
72
|
user data before including evidence in logs, PR bodies, or handoffs. Never
|
|
@@ -95,7 +103,7 @@ Before launching agents, collect these inputs. Extract from conversation history
|
|
|
95
103
|
</required_inputs>
|
|
96
104
|
|
|
97
105
|
|
|
98
|
-
|
|
106
|
+
Review PRs and branches from a dedicated review worktree only: create or attach one with `git worktree add <path> <branch>` before collecting changed files, diff, file contents, or running checks. The main worktree is read-only context; never checkout, test, or edit the review branch there.
|
|
99
107
|
|
|
100
108
|
**Auto-collection sequence:**
|
|
101
109
|
|
|
@@ -213,7 +221,7 @@ The QA agent follows a structured process: brainstorm scenarios exhaustively fir
|
|
|
213
221
|
task(
|
|
214
222
|
category="unspecified-high",
|
|
215
223
|
run_in_background=true,
|
|
216
|
-
load_skills=["playwright", "dev-browser"],
|
|
224
|
+
load_skills=["browser:control-in-app-browser", "playwright", "dev-browser"],
|
|
217
225
|
description="QA by actually running and using the application",
|
|
218
226
|
prompt="""
|
|
219
227
|
<review_type>QA - HANDS-ON APP EXECUTION</review_type>
|
|
@@ -281,7 +289,7 @@ Work through the task list in priority order (P0 first). For each test:
|
|
|
281
289
|
6. Mark the task complete
|
|
282
290
|
|
|
283
291
|
**Execution guidance by app type:**
|
|
284
|
-
- **Web app**:
|
|
292
|
+
- **Web app**: In Codex, use `browser:control-in-app-browser` first for browser work that does not need an authenticated user session. Fall back to playwright/dev-browser when the Browser plugin is unavailable, lacks the needed action, or the test specifically needs a persistent/authenticated browser profile. Navigate, click, fill forms, and verify visual output through the chosen browser surface.
|
|
285
293
|
- **CLI tool**: Run commands with various arguments, pipe inputs, check exit codes and output.
|
|
286
294
|
- **Library/SDK**: Write and execute a test script that imports and exercises the public API.
|
|
287
295
|
- **Backend API**: Use curl/httpie to hit endpoints with various payloads, verify response codes and bodies.
|
|
@@ -19,6 +19,10 @@ This skill may include examples copied from the OpenCode harness. In Codex, do n
|
|
|
19
19
|
|
|
20
20
|
Role-specific behavior must be described in a self-contained `message`. Use `fork_context: false` to start the child with only the initial prompt (no parent history); use `fork_context: true` only when full parent history is truly required. Include any required conversation context, files, diffs, constraints, and requested skill names directly in the spawned agent's `message`. OMO installs these selectable agent roles into `~/.codex/agents/`: `explorer`, `librarian`, `plan`, `momus`, `metis`, `lazycodex-code-reviewer`, `lazycodex-qa-executor`, and `lazycodex-gate-reviewer` - pass the matching name as `agent_type` so the child gets that role's model and instructions. If the spawn tool exposes no `agent_type` parameter, omit it and describe the role inside `message`. If a code block below conflicts with this section, this section wins.
|
|
21
21
|
|
|
22
|
+
On `multi_agent_v2` sessions the same `agent_type` applies (the OMO installer exposes it) with `fork_turns` instead of `fork_context`. If a code block below conflicts with this section, this section wins.
|
|
23
|
+
|
|
24
|
+
When translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`. If a code block below conflicts with this section, this section wins.
|
|
25
|
+
|
|
22
26
|
For work likely to exceed one wait cycle, require the child to send `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. A `multi_agent_v1.wait_agent` timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running.
|
|
23
27
|
|
|
24
28
|
## ABSOLUTE RULE: YOU ARE AN ORCHESTRATOR — NEVER THE IMPLEMENTER
|
|
@@ -42,7 +46,7 @@ $start-work [plan-name] [--worktree <absolute-path>]
|
|
|
42
46
|
```
|
|
43
47
|
|
|
44
48
|
- `plan-name` (optional): a full or partial file stem under `.omo/plans/`.
|
|
45
|
-
- `--worktree` (
|
|
49
|
+
- `--worktree` (required for PR/branch work; otherwise optional): the task-owned git worktree path.
|
|
46
50
|
|
|
47
51
|
## Phase 1: Select the plan
|
|
48
52
|
|
|
@@ -85,7 +89,7 @@ Write `.omo/boulder.json` before implementation starts. Prefix session ids with
|
|
|
85
89
|
}
|
|
86
90
|
```
|
|
87
91
|
|
|
88
|
-
|
|
92
|
+
For PR/branch work, `--worktree` is mandatory before implementation starts. Verify the path with `git worktree list --porcelain` or create it with `git worktree add <path> <branch-or-HEAD>`, then store the absolute path as `worktree_path`. All edits, commands, tests, and evidence capture must run inside that worktree.
|
|
89
93
|
|
|
90
94
|
## Phase 3: Execute the next checkbox
|
|
91
95
|
|
|
@@ -102,11 +106,12 @@ Each sub-task message must include:
|
|
|
102
106
|
2. When the task touches existing behavior: a baseline characterization test, written first, that pins current observable behavior and passes on the unchanged code (exact inputs, exact observable, exact assertion). Then the failing-first proof for the new behavior before production changes — a unit test where a seam exists, otherwise the sub-task's Manual-QA scenario captured failing. A test that mirrors its implementation (mock-call assertions, pinned constants) is not evidence.
|
|
103
107
|
3. Implementation constraints from the plan and project rules.
|
|
104
108
|
4. Automated verification commands to run.
|
|
105
|
-
5. One Manual-QA channel, named with the exact tool and exact invocation (the literal `curl`, `send-keys`, `page.click`, payload, selectors, and the binary observable that decides PASS/FAIL), not "verify it works". A LIGHT checkbox needs one real-surface proof of its deliverable, and auxiliary surfaces (CLI stdout, DB state diff, parsed config dump) are first-class when the surface is CLI- or data-shaped:
|
|
109
|
+
5. One Manual-QA channel, named with the exact tool and exact invocation (the literal `curl`, `send-keys`, `browser:control-in-app-browser` action, `page.click`, payload, selectors, and the binary observable that decides PASS/FAIL), not "verify it works". A LIGHT checkbox needs one real-surface proof of its deliverable, and auxiliary surfaces (CLI stdout, DB state diff, parsed config dump) are first-class when the surface is CLI- or data-shaped:
|
|
106
110
|
- HTTP call: `curl -i` against the live endpoint.
|
|
107
111
|
- tmux: a `tmux` session driven with `send-keys`, dumped via `capture-pane`.
|
|
108
|
-
- Browser use: drive the real page with Chrome, or agent-browser (https://github.com/vercel-labs/agent-browser) when Chrome is unavailable.
|
|
112
|
+
- Browser use: in Codex, use `browser:control-in-app-browser` first when available and the scenario does not need an authenticated or persistent user browser profile; otherwise drive the real page with Chrome, or agent-browser (https://github.com/vercel-labs/agent-browser) when Chrome is unavailable.
|
|
109
113
|
- Computer use: OS-level GUI automation against the running desktop app when the surface is not a page.
|
|
114
|
+
- TUI visual evidence: when a tmux/TUI claim needs visual QA or PR proof, run `node script/qa/web-terminal-visual-qa.mjs --from-file <capture.txt> --evidence-dir <dir>` and attach `terminal.png` plus `metadata.json`.
|
|
110
115
|
6. The adversarial classes that apply to this sub-task (from the 9 ultraqa classes) and how each is probed.
|
|
111
116
|
7. Required artifact path and cleanup receipt.
|
|
112
117
|
|
|
@@ -168,13 +173,13 @@ Only after verification passes:
|
|
|
168
173
|
When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are complete:
|
|
169
174
|
|
|
170
175
|
1. Run the plan's final verification commands.
|
|
171
|
-
2. Complete the **Global Review and Debugging Gate** before any completion claim, PR handoff,
|
|
176
|
+
2. Complete the **Global Review and Debugging Gate** before any completion claim, PR creation, PR handoff, branch handoff, or merge:
|
|
172
177
|
- Invoke the `review-work` skill with the final diff, changed files, user goal, constraints, run command, and verification evidence. All five review lanes must return PASS. A timeout, missing deliverable, ack-only child, `BLOCKED:`, or inconclusive lane is a gate failure, not approval.
|
|
173
178
|
- Run a debugging-oriented runtime audit even when the review passes: name at least three plausible failure hypotheses for the changed surface, run the distinguishing checks against the actual artifact, and append the ruled-out or confirmed result to `.omo/start-work/ledger.jsonl`.
|
|
174
179
|
- If any review lane or debugging hypothesis fails, invoke the `debugging` skill, confirm root cause with runtime evidence, add the minimal failing test or reproduction, fix it, rerun the affected verification, then rerun the Global Review and Debugging Gate.
|
|
175
180
|
- Evidence hygiene is mandatory: redact or mask secrets and sensitive user data before writing `.omo/start-work/ledger.jsonl`, a PR body, or a handoff. Never include raw tokens, credentials, auth headers, cookies, API keys, env dumps, private logs, or PII; use concise summaries, lengths, hashes, or short non-sensitive prefixes instead.
|
|
176
|
-
- If the work includes creating, updating, or handing off a PR, refresh `git status` and the PR/branch state after the gate, and include only redacted review/debugging evidence in the PR body or handoff.
|
|
177
|
-
3.
|
|
181
|
+
- If the work includes creating, updating, or handing off a PR, refresh `git status` and the PR/branch state from the task-owned worktree after the gate, and include only redacted review/debugging evidence in the PR body or handoff.
|
|
182
|
+
3. Finish the PR/branch lifecycle from its task-owned worktree: sync `.omo/` state back to the main repo, create or update the PR when requested, wait for CI/review/Cubic gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
|
|
178
183
|
4. Remove or mark the Boulder work as completed.
|
|
179
184
|
5. Print an `ORCHESTRATION COMPLETE` block with the plan path, verification commands, Global Review and Debugging Gate verdict, artifacts, and cleanup receipts.
|
|
180
185
|
|
|
@@ -185,6 +190,7 @@ When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are
|
|
|
185
190
|
- No tests-only completion claim. A Manual-QA artifact is required.
|
|
186
191
|
- **NO DIRECT IMPLEMENTATION BY THE ORCHESTRATOR.** Root NEVER edits product files, writes tests, or runs QA itself — a spawned worker does.
|
|
187
192
|
- No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.
|
|
188
|
-
- No `ORCHESTRATION COMPLETE`, final response, PR creation,
|
|
193
|
+
- No `ORCHESTRATION COMPLETE`, final response, PR creation, PR handoff, or merge before the Global Review and Debugging Gate passes with recorded evidence.
|
|
194
|
+
- No PR/branch implementation or review in the main worktree; create or use a task-owned git worktree first.
|
|
189
195
|
- No unprefixed session ids in Boulder state. Codex sessions are always `codex:<session_id>`.
|
|
190
196
|
- No stale-memory execution. The plan and ledger are the durable source of truth.
|
|
@@ -89,10 +89,18 @@ subcommand rewrites `guide.md`, so the manual always matches the current team.
|
|
|
89
89
|
exact title to use. If `codex_app.create_thread` accepts a working directory / cwd argument,
|
|
90
90
|
set it to that member's worktree; otherwise the member's manual tells it to `cd` there first.
|
|
91
91
|
Use `codex_app.set_thread_title` if the title did not land at creation.
|
|
92
|
+
If Codex returns only `pendingWorktreeId`, the worktree-backed thread is not ready yet: do not
|
|
93
|
+
`bind-thread` and do not send the member bootstrap. Wait until Codex surfaces a real `threadId`
|
|
94
|
+
or the thread appears in the thread list, then set the title, bind that real id with the cwd,
|
|
95
|
+
and only then send the bootstrap.
|
|
92
96
|
3. `bind-thread` to record each thread id (and `--cwd`), then send that member's bootstrap
|
|
93
97
|
trigger (printed by `add-member` / `member-prompt`) as the thread's first message. The trigger
|
|
94
98
|
is short on purpose: it tells the new thread to READ its `guide.md` and `team.json` rather than
|
|
95
99
|
carrying the whole protocol inline.
|
|
100
|
+
4. Whenever you report, audit, reopen, or hand off a member thread, include the app deep link
|
|
101
|
+
`codex://threads/<thread_id>` next to the raw id. For example:
|
|
102
|
+
`codex://threads/019ef350-ee78-72a3-bd5e-e40cebc3d814`. Worktree-backed threads are easy to
|
|
103
|
+
lose in the sidebar without this link.
|
|
96
104
|
|
|
97
105
|
Every team member is a real Codex thread created with `codex_app.create_thread` - this is strict,
|
|
98
106
|
not a preference. NEVER substitute `multi_agent_v1.spawn_agent`, or any other in-process subagent,
|
|
@@ -113,8 +121,28 @@ members to the hard rules, so you mainly keep the channel open: expect frequent
|
|
|
113
121
|
from each member - findings, `WORKING:`/`BLOCKED:` markers, peer digests - rather than one final
|
|
114
122
|
dump, and act on them as they arrive. All member-to-member and member-to-leader traffic is in English;
|
|
115
123
|
when the END user addresses a member, that member replies in the user's own language. Members hand off
|
|
116
|
-
files and memos through the team `artifacts/` directory and reference them by path.
|
|
117
|
-
|
|
124
|
+
files and memos through the team `artifacts/` directory and reference them by path.
|
|
125
|
+
|
|
126
|
+
## Let members work - do not rush them
|
|
127
|
+
|
|
128
|
+
Members heartbeat every few tool calls and message you on every finding, blocker, and finished
|
|
129
|
+
slice (their manual binds them to this). So a member that is quiet between heartbeats is **working,
|
|
130
|
+
not stalled** - a stretch of silence is the normal sound of focused work, not a problem to chase.
|
|
131
|
+
Re-reading `codex_app.read_thread` to check on a calm member, or sending "any update?" / "are you
|
|
132
|
+
done?" / "hurry up" pings, interrupts that member and slows the whole team. Trust the heartbeat and
|
|
133
|
+
let them cook.
|
|
134
|
+
|
|
135
|
+
Message a member only when one of these is true:
|
|
136
|
+
- you have new information, context, or a correction it needs to do its slice right;
|
|
137
|
+
- you are reassigning, narrowing, or unblocking its scope;
|
|
138
|
+
- a peer's result changes what it should do; or
|
|
139
|
+
- it has gone fully silent well past its heartbeat cadence AND that stall is blocking the team -
|
|
140
|
+
then send one specific question, not a barrage.
|
|
141
|
+
|
|
142
|
+
Otherwise stay calm and keep the channel open: read inbound updates as they arrive and act on them.
|
|
143
|
+
A long-running member is alive; a heartbeat you have not received yet is not a failure. Wait for
|
|
144
|
+
every required member's final report before you declare the team done - rushing toward "done" while
|
|
145
|
+
members are still mid-slice just produces half-built work you will have to redo.
|
|
118
146
|
|
|
119
147
|
## Worktrees - isolate members who would touch the same files
|
|
120
148
|
|
|
@@ -127,6 +155,16 @@ its own worktree. To land the work, `integrate --team <id>` merges every member
|
|
|
127
155
|
current branch with a merge commit (never a squash or rebase); resolve any conflict it reports, then
|
|
128
156
|
`worktree-remove` each worktree at cleanup.
|
|
129
157
|
|
|
158
|
+
After `worktree-add`, immediately send the member a follow-up that includes both its assigned
|
|
159
|
+
worktree path and its `codex://threads/<thread_id>` link. Use `bind-thread --cwd <worktree>` or
|
|
160
|
+
`--worktree-path <worktree>` after the thread exists so `team.json`, `guide.md`, `status`, and
|
|
161
|
+
`member-prompt` all point at the same worktree-backed thread.
|
|
162
|
+
|
|
163
|
+
When the member starts inside a worktree, it must verify the assigned cwd exists and contains the
|
|
164
|
+
repository checkout before editing. If the directory is missing, empty, or does not look like a git
|
|
165
|
+
worktree/repository yet, the member reports `BLOCKED: worktree not ready` to the leader and waits
|
|
166
|
+
instead of editing a parent checkout or an empty directory.
|
|
167
|
+
|
|
130
168
|
## Run a ulw-plan in parallel
|
|
131
169
|
|
|
132
170
|
When a decision-complete plan already exists at `.omo/plans/<slug>.md` (from ulw-plan), execute its
|
|
@@ -5,8 +5,12 @@
|
|
|
5
5
|
// writes it once at team creation, and every member thread is told to READ it instead of
|
|
6
6
|
// receiving the rules inline each turn.
|
|
7
7
|
|
|
8
|
+
export function codexThreadLink(threadId) {
|
|
9
|
+
return `codex://threads/${threadId}`;
|
|
10
|
+
}
|
|
11
|
+
|
|
8
12
|
function memberLine(member) {
|
|
9
|
-
const thread = member.threadId ? ` | thread ${member.threadId}` : " | thread not created yet";
|
|
13
|
+
const thread = member.threadId ? ` | thread ${member.threadId} (${codexThreadLink(member.threadId)})` : " | thread not created yet";
|
|
10
14
|
const wt = member.worktree?.path ? ` | worktree ${member.worktree.path}` : "";
|
|
11
15
|
const name = member.name ? ` "${member.name}"` : "";
|
|
12
16
|
const title = member.threadTitle ? ` | thread title \`${member.threadTitle}\`` : "";
|
|
@@ -23,13 +27,23 @@ that is a coordination signal: mark yourself \`blocked\` and tell the leader at
|
|
|
23
27
|
}
|
|
24
28
|
const lines = team.members
|
|
25
29
|
.filter((m) => m.worktree?.path || m.worktree?.branch)
|
|
26
|
-
.map((m) =>
|
|
30
|
+
.map((m) => {
|
|
31
|
+
const thread = m.threadId ? `; thread ${codexThreadLink(m.threadId)}` : "";
|
|
32
|
+
return `- **${m.id}**: worktree \`${m.worktree.path ?? "(assign with bind-thread --cwd)"}\` on branch \`${m.worktree.branch ?? team.worktree.baseBranch}\`${thread}`;
|
|
33
|
+
});
|
|
27
34
|
return `## Worktrees (ISOLATION IS ON - this is not optional for you)
|
|
28
35
|
|
|
29
36
|
This team runs each member in its own git worktree branched off \`${team.worktree.baseBranch}\`.
|
|
30
37
|
**You MUST work only inside your own worktree.** The very first thing you do is \`cd\` into it;
|
|
31
38
|
every edit, command, and commit happens there. Never touch another member's worktree, and
|
|
32
39
|
never edit files outside your assigned scope. Commit your work so the leader can integrate it.
|
|
40
|
+
Before editing, verify that your assigned worktree exists and contains repo files. If the path is
|
|
41
|
+
missing, empty, or does not look like a git worktree/repository yet, send \`BLOCKED: worktree not ready\`
|
|
42
|
+
to the leader and wait instead of editing any parent checkout or empty directory.
|
|
43
|
+
|
|
44
|
+
If Codex returns only \`pendingWorktreeId\` while the leader is creating a worktree-backed member
|
|
45
|
+
thread, the thread is not ready yet. The leader must wait until Codex surfaces a real thread id,
|
|
46
|
+
then bind that real id and send the bootstrap.
|
|
33
47
|
|
|
34
48
|
${lines.length ? lines.join("\n") : "- (worktree paths are assigned as threads are bound; read team.json for yours)"}`;
|
|
35
49
|
}
|
|
@@ -71,6 +85,8 @@ coordinate with each other, but the leader owns the final decision and integrati
|
|
|
71
85
|
- **Reach the leader and your peers with \`codex_app.send_message_to_thread\` - not by narrating in
|
|
72
86
|
your own thread, where no one reads it.** The address book is in team.json: the leader thread id
|
|
73
87
|
is \`leader.sessionId\`, and each peer thread id is its \`members[].threadId\`.
|
|
88
|
+
- **When you mention a Codex thread, include its app link too:** \`codex://threads/<threadId>\`.
|
|
89
|
+
These links are the fastest way for the leader to reopen worktree-backed member threads.
|
|
74
90
|
- **Push a short message at each of these moments - never batch them into one report at the end:**
|
|
75
91
|
- to the **leader**: every finding or decision, every file or sub-task you finish, a
|
|
76
92
|
\`WORKING: <focus> - <phase>\` heartbeat every few tool calls so you never look stale, a
|
|
@@ -78,7 +94,9 @@ coordinate with each other, but the leader owns the final decision and integrati
|
|
|
78
94
|
- to a **peer**: the instant you learn anything that touches their slice - a shared finding, a
|
|
79
95
|
changed assumption, an interface they depend on. When unsure who owns it, send it to the leader.
|
|
80
96
|
- **Going quiet is the only failure.** Many small lean messages beat one end-of-work dump; keep
|
|
81
|
-
every message short.
|
|
97
|
+
every message short. Your heartbeats are what let the leader relax and leave you to work: a leader
|
|
98
|
+
who can see your progress has no reason to interrupt you, while silence forces it to break in and
|
|
99
|
+
ask where things stand. Frequent lean updates buy you uninterrupted focus.
|
|
82
100
|
|
|
83
101
|
## Artifacts (how you hand work off)
|
|
84
102
|
|
|
@@ -103,10 +121,19 @@ export function buildMemberPrompt(team, id) {
|
|
|
103
121
|
if (!member) throw new Error(`no member with id "${id}"`);
|
|
104
122
|
const guide = team.paths?.guide ?? ".omo/teams/<session_id>/guide.md";
|
|
105
123
|
const teamJson = team.paths?.team ?? ".omo/teams/<session_id>/team.json";
|
|
106
|
-
const where = member.cwd
|
|
124
|
+
const where = member.cwd
|
|
125
|
+
? `Work inside \`${member.cwd}\`.`
|
|
126
|
+
: team.worktree?.enabled
|
|
127
|
+
? "Wait for the leader to bind your worktree cwd before editing."
|
|
128
|
+
: "Work from the repository root unless your manual assigns a worktree.";
|
|
129
|
+
const threadLink = member.threadId ? `\nYour Codex thread link is ${codexThreadLink(member.threadId)}. Include it when reporting handoffs or worktree status.` : "";
|
|
130
|
+
const readiness =
|
|
131
|
+
team.worktree?.enabled
|
|
132
|
+
? "\nBefore editing, verify that your assigned worktree exists and contains repo files. If this prompt arrived before your Codex worktree checkout is ready, or the path is missing, empty, or not a git worktree/repository yet, report `BLOCKED: worktree not ready` to the leader and wait."
|
|
133
|
+
: "";
|
|
107
134
|
return `You are member ${member.id}${member.name ? ` (${member.name})` : ""} of team ${team.teamName} - owner of: ${member.focus}. Your thread title is \`${member.threadTitle}\`.
|
|
108
135
|
FIRST read your field manual at \`${guide}\`, then the team state at \`${teamJson}\`; they define your scope, deliverable, the leader, the artifacts directory, and the communication rules.
|
|
109
|
-
${where}
|
|
136
|
+
${where}${threadLink}${readiness}
|
|
110
137
|
Communicate with the team and leader in English; reply to the end user in the user's own language.
|
|
111
138
|
Start now. Push updates to the leader and relevant peers with \`codex_app.send_message_to_thread\` as you work - findings, \`WORKING:\` heartbeats, and \`BLOCKED:\` the instant you stall - never just one report at the end.`;
|
|
112
139
|
}
|
|
@@ -20,7 +20,7 @@ import { randomUUID } from "node:crypto";
|
|
|
20
20
|
import { realpathSync } from "node:fs";
|
|
21
21
|
import { rm } from "node:fs/promises";
|
|
22
22
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
23
|
-
import { buildGuide, buildMemberPrompt } from "./team-guide.mjs";
|
|
23
|
+
import { buildGuide, buildMemberPrompt, codexThreadLink } from "./team-guide.mjs";
|
|
24
24
|
import {
|
|
25
25
|
addMember,
|
|
26
26
|
archive,
|
|
@@ -164,8 +164,11 @@ const handlers = {
|
|
|
164
164
|
setMemberWorktree(team, { id: member.id, path: result.path, branch: result.branch });
|
|
165
165
|
await persist(team, dir);
|
|
166
166
|
const note = result.created ? "" : " (already exists)";
|
|
167
|
+
const thread = member.threadId
|
|
168
|
+
? `\nMember thread: ${codexThreadLink(member.threadId)}\nTell that member to: cd "${result.path}"`
|
|
169
|
+
: "\nMember thread is not bound yet; wait for the real Codex thread id, then bind-thread before sending bootstrap. After binding, send the member this worktree path.";
|
|
167
170
|
process.stdout.write(
|
|
168
|
-
`worktree for member ${member.id}${note}: ${result.path} on branch ${result.branch} (off ${result.base})
|
|
171
|
+
`worktree for member ${member.id}${note}: ${result.path} on branch ${result.branch} (off ${result.base}).${thread}\n`,
|
|
169
172
|
);
|
|
170
173
|
},
|
|
171
174
|
|
|
@@ -232,7 +235,8 @@ const handlers = {
|
|
|
232
235
|
const { team } = await loadTeam(cwd, sessionId);
|
|
233
236
|
process.stdout.write(`Team ${team.teamName} [${team.status}] - leader: main session - ${team.members.length} member(s)\n`);
|
|
234
237
|
for (const m of team.members) {
|
|
235
|
-
|
|
238
|
+
const thread = m.threadId ? ` thread=${m.threadId} link=${codexThreadLink(m.threadId)}` : "";
|
|
239
|
+
process.stdout.write(` ${m.id} (${m.lens}) ${m.focus} -> ${m.deliverable || "(no deliverable)"} [${m.status}]${thread}${m.cwd ? ` cwd=${m.cwd}` : ""}\n`);
|
|
236
240
|
}
|
|
237
241
|
if (isUnderstaffed(team)) {
|
|
238
242
|
process.stdout.write(
|