oh-my-codex 0.6.4 → 0.7.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/README.md +19 -9
- package/bin/omx.js +3 -5
- package/dist/agents/__tests__/definitions.test.d.ts +2 -0
- package/dist/agents/__tests__/definitions.test.d.ts.map +1 -0
- package/dist/agents/__tests__/definitions.test.js +35 -0
- package/dist/agents/__tests__/definitions.test.js.map +1 -0
- package/dist/agents/__tests__/native-config.test.d.ts +2 -0
- package/dist/agents/__tests__/native-config.test.d.ts.map +1 -0
- package/dist/agents/__tests__/native-config.test.js +48 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -0
- package/dist/catalog/__tests__/schema.test.js +15 -0
- package/dist/catalog/__tests__/schema.test.js.map +1 -1
- package/dist/catalog/schema.d.ts.map +1 -1
- package/dist/catalog/schema.js +6 -0
- package/dist/catalog/schema.js.map +1 -1
- package/dist/cli/__tests__/catalog-contract.test.d.ts +2 -0
- package/dist/cli/__tests__/catalog-contract.test.d.ts.map +1 -0
- package/dist/cli/__tests__/catalog-contract.test.js +18 -0
- package/dist/cli/__tests__/catalog-contract.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-team.test.js +3 -2
- package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
- package/dist/cli/__tests__/error-handling-warnings.test.d.ts +2 -0
- package/dist/cli/__tests__/error-handling-warnings.test.d.ts.map +1 -0
- package/dist/cli/__tests__/error-handling-warnings.test.js +35 -0
- package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +81 -8
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +124 -0
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -0
- package/dist/cli/__tests__/setup-scope.test.js +79 -21
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-skills-overwrite.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-skills-overwrite.test.js +32 -0
- package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -0
- package/dist/cli/__tests__/star-prompt.test.js +74 -0
- package/dist/cli/__tests__/star-prompt.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +8 -0
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +75 -18
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +10 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +153 -45
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +104 -60
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/star-prompt.d.ts +21 -1
- package/dist/cli/star-prompt.d.ts.map +1 -1
- package/dist/cli/star-prompt.js +34 -13
- package/dist/cli/star-prompt.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +10 -3
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +16 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/__tests__/models.test.js +9 -1
- package/dist/config/__tests__/models.test.js.map +1 -1
- package/dist/config/generator.js +9 -10
- package/dist/config/generator.js.map +1 -1
- package/dist/config/models.d.ts +8 -1
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +27 -5
- package/dist/config/models.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +24 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts +18 -0
- package/dist/hooks/__tests__/consensus-execution-handoff.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js +204 -0
- package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -0
- package/dist/hooks/__tests__/emulator.test.d.ts +2 -0
- package/dist/hooks/__tests__/emulator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/emulator.test.js +47 -0
- package/dist/hooks/__tests__/emulator.test.js.map +1 -0
- package/dist/hooks/__tests__/keyword-detector.test.js +330 -4
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +101 -0
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +13 -7
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-modules.test.js +61 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +47 -0
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +560 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -0
- package/dist/hooks/__tests__/session.test.d.ts +2 -0
- package/dist/hooks/__tests__/session.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/session.test.js +161 -0
- package/dist/hooks/__tests__/session.test.js.map +1 -0
- package/dist/hooks/__tests__/task-size-detector.test.d.ts +2 -0
- package/dist/hooks/__tests__/task-size-detector.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/task-size-detector.test.js +336 -0
- package/dist/hooks/__tests__/task-size-detector.test.js.map +1 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts +2 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js +24 -0
- package/dist/hooks/__tests__/tmux-hook-engine-types-sync.test.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +46 -2
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/code-simplifier/__tests__/index.test.js +67 -15
- package/dist/hooks/code-simplifier/__tests__/index.test.js.map +1 -1
- package/dist/hooks/code-simplifier/index.d.ts +10 -4
- package/dist/hooks/code-simplifier/index.d.ts.map +1 -1
- package/dist/hooks/code-simplifier/index.js +38 -12
- package/dist/hooks/code-simplifier/index.js.map +1 -1
- package/dist/hooks/codebase-map.d.ts.map +1 -1
- package/dist/hooks/codebase-map.js +5 -32
- package/dist/hooks/codebase-map.js.map +1 -1
- package/dist/hooks/emulator.d.ts.map +1 -1
- package/dist/hooks/emulator.js +11 -18
- package/dist/hooks/emulator.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js +59 -1
- package/dist/hooks/extensibility/__tests__/dispatcher.test.js.map +1 -1
- package/dist/hooks/extensibility/__tests__/loader.test.js +19 -0
- package/dist/hooks/extensibility/__tests__/loader.test.js.map +1 -1
- package/dist/hooks/extensibility/dispatcher.d.ts.map +1 -1
- package/dist/hooks/extensibility/dispatcher.js +51 -39
- package/dist/hooks/extensibility/dispatcher.js.map +1 -1
- package/dist/hooks/extensibility/loader.d.ts.map +1 -1
- package/dist/hooks/extensibility/loader.js +25 -13
- package/dist/hooks/extensibility/loader.js.map +1 -1
- package/dist/hooks/extensibility/logging.d.ts.map +1 -1
- package/dist/hooks/extensibility/logging.js +6 -1
- package/dist/hooks/extensibility/logging.js.map +1 -1
- package/dist/hooks/extensibility/sdk.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +87 -0
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +235 -23
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts +15 -0
- package/dist/hooks/keyword-registry.d.ts.map +1 -0
- package/dist/hooks/keyword-registry.js +41 -0
- package/dist/hooks/keyword-registry.js.map +1 -0
- package/dist/hooks/session.d.ts +18 -2
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +84 -11
- package/dist/hooks/session.js.map +1 -1
- package/dist/hooks/task-size-detector.d.ts +72 -0
- package/dist/hooks/task-size-detector.d.ts.map +1 -0
- package/dist/hooks/task-size-detector.js +204 -0
- package/dist/hooks/task-size-detector.js.map +1 -0
- package/dist/hud/__tests__/colors.test.js +1 -103
- package/dist/hud/__tests__/colors.test.js.map +1 -1
- package/dist/hud/__tests__/index.test.d.ts +2 -0
- package/dist/hud/__tests__/index.test.d.ts.map +1 -0
- package/dist/hud/__tests__/index.test.js +131 -0
- package/dist/hud/__tests__/index.test.js.map +1 -0
- package/dist/hud/__tests__/render.test.js +53 -0
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/watch.test.d.ts +2 -0
- package/dist/hud/__tests__/watch.test.d.ts.map +1 -0
- package/dist/hud/__tests__/watch.test.js +63 -0
- package/dist/hud/__tests__/watch.test.js.map +1 -0
- package/dist/hud/colors.d.ts +2 -9
- package/dist/hud/colors.d.ts.map +1 -1
- package/dist/hud/colors.js +19 -34
- package/dist/hud/colors.js.map +1 -1
- package/dist/hud/constants.d.ts +1 -0
- package/dist/hud/constants.d.ts.map +1 -1
- package/dist/hud/constants.js +1 -0
- package/dist/hud/constants.js.map +1 -1
- package/dist/hud/index.d.ts +27 -0
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +149 -9
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +20 -7
- package/dist/hud/render.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/mcp/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/bootstrap.test.js +25 -0
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -0
- package/dist/mcp/__tests__/code-intel-server.test.d.ts +2 -0
- package/dist/mcp/__tests__/code-intel-server.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/code-intel-server.test.js +43 -0
- package/dist/mcp/__tests__/code-intel-server.test.js.map +1 -0
- package/dist/mcp/__tests__/memory-server.test.d.ts +2 -0
- package/dist/mcp/__tests__/memory-server.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/memory-server.test.js +34 -0
- package/dist/mcp/__tests__/memory-server.test.js.map +1 -0
- package/dist/mcp/__tests__/memory-validation.test.d.ts +2 -0
- package/dist/mcp/__tests__/memory-validation.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/memory-validation.test.js +29 -0
- package/dist/mcp/__tests__/memory-validation.test.js.map +1 -0
- package/dist/mcp/__tests__/path-traversal.test.js +55 -0
- package/dist/mcp/__tests__/path-traversal.test.js.map +1 -1
- package/dist/mcp/__tests__/state-paths.test.js +43 -6
- package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js +50 -0
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server-schema.test.js +3 -7
- package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server.test.js +30 -1
- package/dist/mcp/__tests__/state-server.test.js.map +1 -1
- package/dist/mcp/__tests__/trace-server.test.js +58 -0
- package/dist/mcp/__tests__/trace-server.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +3 -0
- package/dist/mcp/bootstrap.d.ts.map +1 -0
- package/dist/mcp/bootstrap.js +13 -0
- package/dist/mcp/bootstrap.js.map +1 -0
- package/dist/mcp/code-intel-server.d.ts +8 -0
- package/dist/mcp/code-intel-server.d.ts.map +1 -1
- package/dist/mcp/code-intel-server.js +50 -24
- package/dist/mcp/code-intel-server.js.map +1 -1
- package/dist/mcp/memory-server.js +34 -13
- package/dist/mcp/memory-server.js.map +1 -1
- package/dist/mcp/memory-validation.d.ts +9 -0
- package/dist/mcp/memory-validation.d.ts.map +1 -0
- package/dist/mcp/memory-validation.js +11 -0
- package/dist/mcp/memory-validation.js.map +1 -0
- package/dist/mcp/state-paths.d.ts +2 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +83 -12
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +85 -47
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/mcp/trace-server.d.ts +16 -0
- package/dist/mcp/trace-server.d.ts.map +1 -1
- package/dist/mcp/trace-server.js +84 -24
- package/dist/mcp/trace-server.js.map +1 -1
- package/dist/modes/__tests__/base-ralph-contract.test.d.ts +2 -0
- package/dist/modes/__tests__/base-ralph-contract.test.d.ts.map +1 -0
- package/dist/modes/__tests__/base-ralph-contract.test.js +49 -0
- package/dist/modes/__tests__/base-ralph-contract.test.js.map +1 -0
- package/dist/modes/__tests__/base-tmux-pane.test.js +13 -1
- package/dist/modes/__tests__/base-tmux-pane.test.js.map +1 -1
- package/dist/modes/base.d.ts +0 -4
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +31 -11
- package/dist/modes/base.js.map +1 -1
- package/dist/notifications/__tests__/config.test.js +47 -1
- package/dist/notifications/__tests__/config.test.js.map +1 -1
- package/dist/notifications/__tests__/formatter.test.js +54 -2
- package/dist/notifications/__tests__/formatter.test.js.map +1 -1
- package/dist/notifications/__tests__/hook-config.test.d.ts +5 -0
- package/dist/notifications/__tests__/hook-config.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/hook-config.test.js +139 -0
- package/dist/notifications/__tests__/hook-config.test.js.map +1 -0
- package/dist/notifications/__tests__/idle-cooldown.test.d.ts +5 -0
- package/dist/notifications/__tests__/idle-cooldown.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/idle-cooldown.test.js +100 -0
- package/dist/notifications/__tests__/idle-cooldown.test.js.map +1 -0
- package/dist/notifications/__tests__/notifier.test.js +89 -1
- package/dist/notifications/__tests__/notifier.test.js.map +1 -1
- package/dist/notifications/__tests__/reply-config.test.d.ts +2 -0
- package/dist/notifications/__tests__/reply-config.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/reply-config.test.js +79 -0
- package/dist/notifications/__tests__/reply-config.test.js.map +1 -0
- package/dist/notifications/__tests__/reply-listener.test.js +35 -1
- package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
- package/dist/notifications/__tests__/session-registry.test.js +40 -0
- package/dist/notifications/__tests__/session-registry.test.js.map +1 -1
- package/dist/notifications/__tests__/template-engine.test.d.ts +5 -0
- package/dist/notifications/__tests__/template-engine.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/template-engine.test.js +147 -0
- package/dist/notifications/__tests__/template-engine.test.js.map +1 -0
- package/dist/notifications/config.d.ts +8 -0
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +110 -19
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/formatter.d.ts +5 -0
- package/dist/notifications/formatter.d.ts.map +1 -1
- package/dist/notifications/formatter.js +45 -10
- package/dist/notifications/formatter.js.map +1 -1
- package/dist/notifications/hook-config-types.d.ts +43 -0
- package/dist/notifications/hook-config-types.d.ts.map +1 -0
- package/dist/notifications/hook-config-types.js +8 -0
- package/dist/notifications/hook-config-types.js.map +1 -0
- package/dist/notifications/hook-config.d.ts +40 -0
- package/dist/notifications/hook-config.d.ts.map +1 -0
- package/dist/notifications/hook-config.js +127 -0
- package/dist/notifications/hook-config.js.map +1 -0
- package/dist/notifications/idle-cooldown.d.ts +35 -0
- package/dist/notifications/idle-cooldown.d.ts.map +1 -0
- package/dist/notifications/idle-cooldown.js +108 -0
- package/dist/notifications/idle-cooldown.js.map +1 -0
- package/dist/notifications/index.d.ts +3 -0
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +43 -1
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notifier.d.ts +9 -0
- package/dist/notifications/notifier.d.ts.map +1 -1
- package/dist/notifications/notifier.js +36 -30
- package/dist/notifications/notifier.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts +3 -0
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +61 -7
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/session-registry.d.ts +1 -1
- package/dist/notifications/session-registry.d.ts.map +1 -1
- package/dist/notifications/session-registry.js +18 -6
- package/dist/notifications/session-registry.js.map +1 -1
- package/dist/notifications/template-engine.d.ts +34 -0
- package/dist/notifications/template-engine.d.ts.map +1 -0
- package/dist/notifications/template-engine.js +246 -0
- package/dist/notifications/template-engine.js.map +1 -0
- package/dist/notifications/types.d.ts +6 -0
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/openclaw/__tests__/config.test.d.ts +6 -0
- package/dist/openclaw/__tests__/config.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/config.test.js +174 -0
- package/dist/openclaw/__tests__/config.test.js.map +1 -0
- package/dist/openclaw/__tests__/dispatcher.test.d.ts +5 -0
- package/dist/openclaw/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/dispatcher.test.js +104 -0
- package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -0
- package/dist/openclaw/__tests__/index.test.d.ts +6 -0
- package/dist/openclaw/__tests__/index.test.d.ts.map +1 -0
- package/dist/openclaw/__tests__/index.test.js +131 -0
- package/dist/openclaw/__tests__/index.test.js.map +1 -0
- package/dist/openclaw/config.d.ts +37 -0
- package/dist/openclaw/config.d.ts.map +1 -0
- package/dist/openclaw/config.js +106 -0
- package/dist/openclaw/config.js.map +1 -0
- package/dist/openclaw/dispatcher.d.ts +63 -0
- package/dist/openclaw/dispatcher.d.ts.map +1 -0
- package/dist/openclaw/dispatcher.js +223 -0
- package/dist/openclaw/dispatcher.js.map +1 -0
- package/dist/openclaw/index.d.ts +27 -0
- package/dist/openclaw/index.d.ts.map +1 -0
- package/dist/openclaw/index.js +130 -0
- package/dist/openclaw/index.js.map +1 -0
- package/dist/openclaw/types.d.ts +105 -0
- package/dist/openclaw/types.d.ts.map +1 -0
- package/dist/openclaw/types.js +12 -0
- package/dist/openclaw/types.js.map +1 -0
- package/dist/ralph/contract.d.ts.map +1 -1
- package/dist/ralph/contract.js +13 -4
- package/dist/ralph/contract.js.map +1 -1
- package/dist/team/__tests__/phase-controller.test.js +14 -0
- package/dist/team/__tests__/phase-controller.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +328 -1
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/scaling.test.d.ts +2 -0
- package/dist/team/__tests__/scaling.test.d.ts.map +1 -0
- package/dist/team/__tests__/scaling.test.js +295 -0
- package/dist/team/__tests__/scaling.test.js.map +1 -0
- package/dist/team/__tests__/state.test.js +62 -1
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +156 -8
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +4 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/contracts.d.ts +14 -0
- package/dist/team/contracts.d.ts.map +1 -0
- package/dist/team/contracts.js +30 -0
- package/dist/team/contracts.js.map +1 -0
- package/dist/team/model-contract.d.ts +1 -0
- package/dist/team/model-contract.d.ts.map +1 -1
- package/dist/team/model-contract.js +5 -1
- package/dist/team/model-contract.js.map +1 -1
- package/dist/team/phase-controller.d.ts +2 -0
- package/dist/team/phase-controller.d.ts.map +1 -1
- package/dist/team/phase-controller.js +16 -2
- package/dist/team/phase-controller.js.map +1 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +353 -66
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts +58 -0
- package/dist/team/scaling.d.ts.map +1 -0
- package/dist/team/scaling.js +319 -0
- package/dist/team/scaling.js.map +1 -0
- package/dist/team/state.d.ts +10 -2
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +97 -27
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-ops.d.ts +2 -0
- package/dist/team/team-ops.d.ts.map +1 -1
- package/dist/team/team-ops.js +4 -0
- package/dist/team/team-ops.js.map +1 -1
- package/dist/team/tmux-session.d.ts +18 -4
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +110 -32
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +20 -0
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/utils/__tests__/paths.test.js +8 -1
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +14 -6
- package/dist/utils/paths.js.map +1 -1
- package/dist/verification/__tests__/verifier.test.js +20 -1
- package/dist/verification/__tests__/verifier.test.js.map +1 -1
- package/dist/verification/verifier.d.ts +5 -0
- package/dist/verification/verifier.d.ts.map +1 -1
- package/dist/verification/verifier.js +19 -0
- package/dist/verification/verifier.js.map +1 -1
- package/package.json +2 -1
- package/prompts/architect.md +11 -0
- package/prompts/critic.md +14 -1
- package/prompts/planner.md +21 -0
- package/scripts/notify-hook/auto-nudge.js +80 -1
- package/scripts/notify-hook/payload-parser.js +21 -0
- package/scripts/notify-hook/team-worker.js +142 -0
- package/scripts/notify-hook/tmux-injection.js +3 -3
- package/scripts/notify-hook.js +55 -4
- package/skills/configure-notifications/SKILL.md +278 -0
- package/skills/configure-openclaw/SKILL.md +267 -0
- package/skills/configure-slack/SKILL.md +226 -0
- package/skills/omx-setup/SKILL.md +14 -19
- package/skills/plan/SKILL.md +57 -33
- package/skills/ralplan/SKILL.md +107 -21
- package/templates/AGENTS.md +11 -3
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: configure-slack
|
|
3
|
+
description: Configure Slack webhook notifications via natural language
|
|
4
|
+
triggers:
|
|
5
|
+
- "configure slack"
|
|
6
|
+
- "setup slack"
|
|
7
|
+
- "slack notifications"
|
|
8
|
+
- "slack webhook"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Configure Slack Notifications
|
|
12
|
+
|
|
13
|
+
Set up Slack notifications so OMX can ping you when sessions end, need input, or complete background tasks.
|
|
14
|
+
|
|
15
|
+
## How This Skill Works
|
|
16
|
+
|
|
17
|
+
This is an interactive, natural-language configuration skill. Walk the user through setup by asking questions with AskUserQuestion. Write the result to `~/.codex/.omx-config.json`.
|
|
18
|
+
|
|
19
|
+
## Step 1: Detect Existing Configuration
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
CONFIG_FILE="$HOME/.codex/.omx-config.json"
|
|
23
|
+
|
|
24
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
25
|
+
HAS_SLACK=$(jq -r '.notifications.slack.enabled // false' "$CONFIG_FILE" 2>/dev/null)
|
|
26
|
+
WEBHOOK_URL=$(jq -r '.notifications.slack.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
27
|
+
CHANNEL=$(jq -r '.notifications.slack.channel // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
28
|
+
USERNAME=$(jq -r '.notifications.slack.username // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
29
|
+
MENTION=$(jq -r '.notifications.slack.mention // empty' "$CONFIG_FILE" 2>/dev/null)
|
|
30
|
+
|
|
31
|
+
if [ "$HAS_SLACK" = "true" ]; then
|
|
32
|
+
echo "EXISTING_CONFIG=true"
|
|
33
|
+
[ -n "$WEBHOOK_URL" ] && echo "WEBHOOK_URL=$WEBHOOK_URL"
|
|
34
|
+
[ -n "$CHANNEL" ] && echo "CHANNEL=$CHANNEL"
|
|
35
|
+
[ -n "$USERNAME" ] && echo "USERNAME=$USERNAME"
|
|
36
|
+
[ -n "$MENTION" ] && echo "MENTION=$MENTION"
|
|
37
|
+
else
|
|
38
|
+
echo "EXISTING_CONFIG=false"
|
|
39
|
+
fi
|
|
40
|
+
else
|
|
41
|
+
echo "NO_CONFIG_FILE"
|
|
42
|
+
fi
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If existing config is found, show the user what's currently configured and ask if they want to update or reconfigure.
|
|
46
|
+
|
|
47
|
+
## Step 2: Collect Webhook URL
|
|
48
|
+
|
|
49
|
+
Use AskUserQuestion:
|
|
50
|
+
|
|
51
|
+
**Question:** "Paste your Slack Incoming Webhook URL. To create one: Go to api.slack.com/apps > Your App > Incoming Webhooks > Add New Webhook to Workspace > Copy URL"
|
|
52
|
+
|
|
53
|
+
The user will type their webhook URL in the "Other" field.
|
|
54
|
+
|
|
55
|
+
**Validate** the URL:
|
|
56
|
+
- Must start with `https://hooks.slack.com/services/` or `https://hooks.slack.com/workflows/`
|
|
57
|
+
- If invalid, explain the format and ask again
|
|
58
|
+
|
|
59
|
+
## Step 3: Configure Channel (Optional)
|
|
60
|
+
|
|
61
|
+
Use AskUserQuestion:
|
|
62
|
+
|
|
63
|
+
**Question:** "Which Slack channel should receive notifications? (Optional — leave blank to use the webhook's default channel)"
|
|
64
|
+
|
|
65
|
+
**Options:**
|
|
66
|
+
1. **Use webhook default** - The channel configured in the Slack app integration
|
|
67
|
+
2. **Specify a channel** - Enter a channel name (e.g. `#dev-alerts`) or channel ID
|
|
68
|
+
|
|
69
|
+
Note: Overriding the channel requires the webhook to have permission for that channel.
|
|
70
|
+
|
|
71
|
+
## Step 4: Configure Mention (Optional)
|
|
72
|
+
|
|
73
|
+
Use AskUserQuestion:
|
|
74
|
+
|
|
75
|
+
**Question:** "Would you like notifications to mention (ping) someone?"
|
|
76
|
+
|
|
77
|
+
**Options:**
|
|
78
|
+
1. **Yes, mention a user** - Tag a user with `<@UXXXXXXXX>`
|
|
79
|
+
2. **Yes, mention a channel** - Tag everyone with `<!channel>` or `<!here>`
|
|
80
|
+
3. **No mentions** - Just post the message without pinging anyone
|
|
81
|
+
|
|
82
|
+
### If user wants to mention a user:
|
|
83
|
+
|
|
84
|
+
Ask: "What is the Slack member ID to mention? (Click the user's profile > More > Copy member ID)"
|
|
85
|
+
|
|
86
|
+
Format: `<@UXXXXXXXX>` (e.g. `<@U012AB3CD>`)
|
|
87
|
+
|
|
88
|
+
### If user wants a channel mention:
|
|
89
|
+
|
|
90
|
+
Choose between:
|
|
91
|
+
- `<!channel>` — notifies all channel members regardless of online status
|
|
92
|
+
- `<!here>` — notifies only currently active channel members
|
|
93
|
+
|
|
94
|
+
## Step 5: Configure Display Name (Optional)
|
|
95
|
+
|
|
96
|
+
Use AskUserQuestion:
|
|
97
|
+
|
|
98
|
+
**Question:** "Custom bot display name in Slack? (Shows as the message sender)"
|
|
99
|
+
|
|
100
|
+
**Options:**
|
|
101
|
+
1. **OMX (default)** - Display as "OMX"
|
|
102
|
+
2. **Codex CLI** - Display as "Codex CLI"
|
|
103
|
+
3. **Custom** - Enter a custom name
|
|
104
|
+
|
|
105
|
+
## Step 6: Configure Events
|
|
106
|
+
|
|
107
|
+
Use AskUserQuestion with multiSelect:
|
|
108
|
+
|
|
109
|
+
**Question:** "Which events should trigger Slack notifications?"
|
|
110
|
+
|
|
111
|
+
**Options (multiSelect: true):**
|
|
112
|
+
1. **Session end (Recommended)** - When a Codex session finishes
|
|
113
|
+
2. **Input needed** - When Codex is waiting for your response (great for long-running tasks)
|
|
114
|
+
3. **Session start** - When a new session begins
|
|
115
|
+
4. **Session continuing** - When a persistent mode keeps the session alive
|
|
116
|
+
|
|
117
|
+
Default selection: session-end + ask-user-question.
|
|
118
|
+
|
|
119
|
+
## Step 7: Write Configuration
|
|
120
|
+
|
|
121
|
+
Read the existing config, merge the new Slack settings, and write back:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
CONFIG_FILE="$HOME/.codex/.omx-config.json"
|
|
125
|
+
mkdir -p "$(dirname "$CONFIG_FILE")"
|
|
126
|
+
|
|
127
|
+
if [ -f "$CONFIG_FILE" ]; then
|
|
128
|
+
EXISTING=$(cat "$CONFIG_FILE")
|
|
129
|
+
else
|
|
130
|
+
EXISTING='{}'
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# WEBHOOK_URL, CHANNEL, MENTION, USERNAME are collected from user
|
|
134
|
+
echo "$EXISTING" | jq \
|
|
135
|
+
--arg url "$WEBHOOK_URL" \
|
|
136
|
+
--arg channel "$CHANNEL" \
|
|
137
|
+
--arg mention "$MENTION" \
|
|
138
|
+
--arg username "$USERNAME" \
|
|
139
|
+
'.notifications = (.notifications // {enabled: true}) |
|
|
140
|
+
.notifications.enabled = true |
|
|
141
|
+
.notifications.slack = {
|
|
142
|
+
enabled: true,
|
|
143
|
+
webhookUrl: $url,
|
|
144
|
+
channel: (if $channel == "" then null else $channel end),
|
|
145
|
+
mention: (if $mention == "" then null else $mention end),
|
|
146
|
+
username: (if $username == "" then null else $username end)
|
|
147
|
+
}' > "$CONFIG_FILE"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Add event-specific config if user didn't select all events:
|
|
151
|
+
|
|
152
|
+
For each event NOT selected, disable it:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Example: disable session-start if not selected
|
|
156
|
+
echo "$(cat "$CONFIG_FILE")" | jq \
|
|
157
|
+
'.notifications.events = (.notifications.events // {}) |
|
|
158
|
+
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Step 8: Test the Configuration
|
|
162
|
+
|
|
163
|
+
After writing config, offer to send a test notification:
|
|
164
|
+
|
|
165
|
+
Use AskUserQuestion:
|
|
166
|
+
|
|
167
|
+
**Question:** "Send a test notification to verify the setup?"
|
|
168
|
+
|
|
169
|
+
**Options:**
|
|
170
|
+
1. **Yes, test now (Recommended)** - Send a test message to your Slack channel
|
|
171
|
+
2. **No, I'll test later** - Skip testing
|
|
172
|
+
|
|
173
|
+
### If testing:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
|
|
177
|
+
-H "Content-Type: application/json" \
|
|
178
|
+
-d "{\"text\": \"${MENTION:+$MENTION\\n}OMX test notification - Slack is configured!\", \"username\": \"${USERNAME:-OMX}\"}" \
|
|
179
|
+
"$WEBHOOK_URL")
|
|
180
|
+
|
|
181
|
+
if [ "$RESPONSE" = "200" ]; then
|
|
182
|
+
echo "Test notification sent successfully!"
|
|
183
|
+
else
|
|
184
|
+
echo "Failed (HTTP $RESPONSE). Check the webhook URL and channel permissions."
|
|
185
|
+
fi
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Report success or failure. Common issues:
|
|
189
|
+
- **400 Bad Request**: Malformed JSON or invalid channel override
|
|
190
|
+
- **403 Forbidden**: Channel override not permitted by the webhook
|
|
191
|
+
- **404 Not Found**: Webhook URL is invalid or revoked — regenerate it in Slack
|
|
192
|
+
|
|
193
|
+
## Step 9: Confirm
|
|
194
|
+
|
|
195
|
+
Display the final configuration summary:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
Slack Notifications Configured!
|
|
199
|
+
|
|
200
|
+
Webhook: https://hooks.slack.com/services/...
|
|
201
|
+
Channel: #dev-alerts (or "webhook default")
|
|
202
|
+
Mention: <!channel> (or "none")
|
|
203
|
+
Username: OMX
|
|
204
|
+
Events: session-end, ask-user-question
|
|
205
|
+
|
|
206
|
+
Config saved to: ~/.codex/.omx-config.json
|
|
207
|
+
|
|
208
|
+
You can also set these via environment variables:
|
|
209
|
+
OMX_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
|
|
210
|
+
OMX_SLACK_MENTION=<!channel>
|
|
211
|
+
|
|
212
|
+
To reconfigure: /configure-slack
|
|
213
|
+
To configure Discord: /configure-discord
|
|
214
|
+
To configure Telegram: /configure-telegram
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Environment Variable Alternative
|
|
218
|
+
|
|
219
|
+
Users can skip this wizard entirely by setting env vars in their shell profile:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
export OMX_SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."
|
|
223
|
+
export OMX_SLACK_MENTION="<!channel>" # optional
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Env vars are auto-detected by the notification system without needing `.omx-config.json`.
|
|
@@ -10,14 +10,14 @@ Use this skill when users want to install or refresh oh-my-codex for the **curre
|
|
|
10
10
|
## Command
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
omx setup [--force] [--dry-run] [--verbose] [--scope <user|project
|
|
13
|
+
omx setup [--force] [--dry-run] [--verbose] [--scope <user|project>]
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
Supported setup flags (current implementation):
|
|
17
17
|
- `--force`: overwrite/reinstall managed artifacts where applicable
|
|
18
18
|
- `--dry-run`: print actions without mutating files
|
|
19
19
|
- `--verbose`: print per-file/per-step details
|
|
20
|
-
- `--scope`: choose install scope (`user`, `project
|
|
20
|
+
- `--scope`: choose install scope (`user`, `project`)
|
|
21
21
|
|
|
22
22
|
## What this setup actually does
|
|
23
23
|
|
|
@@ -25,31 +25,26 @@ Supported setup flags (current implementation):
|
|
|
25
25
|
|
|
26
26
|
1. Resolve setup scope:
|
|
27
27
|
- `--scope` explicit value
|
|
28
|
-
- else persisted `./.omx/setup-scope.json`
|
|
28
|
+
- else persisted `./.omx/setup-scope.json` (with automatic migration of legacy values)
|
|
29
29
|
- else interactive prompt on TTY (default `user`)
|
|
30
30
|
- else default `user` (safe for CI/tests)
|
|
31
|
-
2. Create
|
|
32
|
-
3.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- install skills
|
|
37
|
-
- merge OMX config.toml
|
|
38
|
-
4. For `project` scope: skip prompt/skill/config/native-agent installs with console messages
|
|
39
|
-
6. Verify required team MCP comm tool exports exist in built `dist/mcp/state-server.js`
|
|
40
|
-
7. Generate project-root `./AGENTS.md` from `templates/AGENTS.md` (or skip when existing and no force)
|
|
41
|
-
8. Configure notify hook references and write `./.omx/hud-config.json`
|
|
31
|
+
2. Create directories and persist effective scope
|
|
32
|
+
3. Install prompts, native agent configs, skills, and merge config.toml (scope determines target directories)
|
|
33
|
+
4. Verify required team MCP comm tool exports exist in built `dist/mcp/state-server.js`
|
|
34
|
+
5. Generate project-root `./AGENTS.md` from `templates/AGENTS.md` (or skip when existing and no force)
|
|
35
|
+
6. Configure notify hook references and write `./.omx/hud-config.json`
|
|
42
36
|
|
|
43
37
|
## Important behavior notes
|
|
44
38
|
|
|
45
39
|
- `omx setup` only prompts for scope when no scope is provided/persisted and stdin/stdout are TTY.
|
|
46
40
|
- Local project orchestration file is `./AGENTS.md` (project root).
|
|
41
|
+
- If `AGENTS.md` exists and `--force` is not used, interactive TTY runs ask whether to overwrite. Non-interactive runs preserve the file.
|
|
47
42
|
- Scope targets:
|
|
48
43
|
- `user`: user directories (`~/.codex`, `~/.agents/skills`, `~/.omx/agents`)
|
|
49
|
-
- `project
|
|
50
|
-
|
|
51
|
-
- If persisted scope is `project-local`, `omx` launch automatically uses `CODEX_HOME=./.codex` unless user explicitly overrides `CODEX_HOME`.
|
|
44
|
+
- `project`: local directories (`./.codex`, `./.agents/skills`, `./.omx/agents`)
|
|
45
|
+
- If persisted scope is `project`, `omx` launch automatically uses `CODEX_HOME=./.codex` unless user explicitly overrides `CODEX_HOME`.
|
|
52
46
|
- With `--force`, AGENTS overwrite may still be skipped if an active OMX session is detected (safety guard).
|
|
47
|
+
- Legacy persisted scope values (`project-local`) are automatically migrated to `project` with a one-time warning.
|
|
53
48
|
|
|
54
49
|
## Recommended workflow
|
|
55
50
|
|
|
@@ -70,8 +65,8 @@ omx doctor
|
|
|
70
65
|
## Expected verification indicators
|
|
71
66
|
|
|
72
67
|
From `omx doctor`, expect:
|
|
73
|
-
- Prompts installed (scope-dependent: user or project
|
|
74
|
-
- Skills installed (scope-dependent: user or project
|
|
68
|
+
- Prompts installed (scope-dependent: user or project)
|
|
69
|
+
- Skills installed (scope-dependent: user or project)
|
|
75
70
|
- AGENTS.md found in project root
|
|
76
71
|
- `.omx/state` exists
|
|
77
72
|
- OMX MCP servers configured in scope target `config.toml` (`~/.codex/config.toml` or `./.codex/config.toml`)
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: Strategic planning with optional interview workflow
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<Purpose>
|
|
7
|
-
Plan creates comprehensive, actionable work plans through intelligent interaction. It auto-detects whether to interview the user (broad requests) or plan directly (detailed requests), and supports consensus mode (iterative Planner/Architect/Critic loop) and review mode (Critic evaluation of existing plans).
|
|
7
|
+
Plan creates comprehensive, actionable work plans through intelligent interaction. It auto-detects whether to interview the user (broad requests) or plan directly (detailed requests), and supports consensus mode (iterative Planner/Architect/Critic loop with RALPLAN-DR structured deliberation) and review mode (Critic evaluation of existing plans).
|
|
8
8
|
</Purpose>
|
|
9
9
|
|
|
10
10
|
<Use_When>
|
|
@@ -31,7 +31,8 @@ Jumping into code without understanding requirements leads to rework, scope cree
|
|
|
31
31
|
- Ask one question at a time during interviews -- never batch multiple questions
|
|
32
32
|
- Gather codebase facts via `explore` agent before asking the user about them
|
|
33
33
|
- Plans must meet quality standards: 80%+ claims cite file/line, 90%+ criteria are testable
|
|
34
|
-
- Consensus mode
|
|
34
|
+
- Consensus mode outputs the final plan by default; add `--interactive` to enable execution handoff
|
|
35
|
+
- Consensus mode uses RALPLAN-DR short mode by default; switch to deliberate mode with `--deliberate` or when the request explicitly signals high risk (auth/security, data migration, destructive/irreversible changes, production incident, compliance/PII, public API breakage)
|
|
35
36
|
</Execution_Policy>
|
|
36
37
|
|
|
37
38
|
<Steps>
|
|
@@ -42,8 +43,8 @@ Jumping into code without understanding requirements leads to rework, scope cree
|
|
|
42
43
|
|------|---------|----------|
|
|
43
44
|
| Interview | Default for broad requests | Interactive requirements gathering |
|
|
44
45
|
| Direct | `--direct`, or detailed request | Skip interview, generate plan directly |
|
|
45
|
-
| Consensus | `--consensus`, "ralplan" | Planner -> Architect -> Critic loop until agreement
|
|
46
|
-
| Consensus Interactive | `--consensus --interactive` | Same as Consensus but pauses for user feedback at draft and approval steps |
|
|
46
|
+
| Consensus | `--consensus`, "ralplan" | Planner -> Architect -> Critic loop until agreement with RALPLAN-DR structured deliberation (short by default, `--deliberate` for high-risk); outputs plan by default |
|
|
47
|
+
| Consensus Interactive | `--consensus --interactive` | Same as Consensus but pauses for user feedback at draft and approval steps, then hands off to execution |
|
|
47
48
|
| Review | `--review`, "review this plan" | Critic evaluation of existing plan |
|
|
48
49
|
|
|
49
50
|
### Interview Mode (broad/vague requests)
|
|
@@ -63,31 +64,48 @@ Jumping into code without understanding requirements leads to rework, scope cree
|
|
|
63
64
|
|
|
64
65
|
### Consensus Mode (`--consensus` / "ralplan")
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
1. **Planner** creates initial plan
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
67
|
+
**RALPLAN-DR modes**: **Short** (default, bounded structure) and **Deliberate** (for `--deliberate` or explicit high-risk requests). Both modes keep the same Planner -> Architect -> Critic sequence. The workflow auto-proceeds through planning steps (Planner/Architect/Critic) but outputs the final plan without executing.
|
|
68
|
+
|
|
69
|
+
1. **Planner** creates initial plan and a compact **RALPLAN-DR summary** before any Architect review. The summary **MUST** include:
|
|
70
|
+
- **Principles** (3-5)
|
|
71
|
+
- **Decision Drivers** (top 3)
|
|
72
|
+
- **Viable Options** (>=2) with bounded pros/cons for each option
|
|
73
|
+
- If only one viable option remains, an explicit **invalidation rationale** for the alternatives that were rejected
|
|
74
|
+
- In **deliberate mode**: a **pre-mortem** (3 failure scenarios) and an **expanded test plan** covering **unit / integration / e2e / observability**
|
|
75
|
+
2. **User feedback** *(--interactive only)*: If running with `--interactive`, **MUST** use `AskUserQuestion` to present the draft plan **plus the RALPLAN-DR Principles / Decision Drivers / Options summary for early direction alignment** with these options:
|
|
76
|
+
- **Proceed to review** — send to Architect and Critic for evaluation
|
|
77
|
+
- **Request changes** — return to step 1 with user feedback incorporated
|
|
78
|
+
- **Skip review** — go directly to final approval (step 7)
|
|
79
|
+
If NOT running with `--interactive`, automatically proceed to review (step 3).
|
|
80
|
+
3. **Architect** reviews for architectural soundness using `ask_codex` with `agent_role: "architect"`. Architect review **MUST** include: strongest steelman counterargument (antithesis) against the favored option, at least one meaningful tradeoff tension, and (when possible) a synthesis path. In deliberate mode, Architect should explicitly flag principle violations. **Wait for this step to complete before proceeding to step 4.** Do NOT run steps 3 and 4 in parallel.
|
|
81
|
+
4. **Critic** evaluates against quality criteria using `ask_codex` with `agent_role: "critic"`. Critic **MUST** verify principle-option consistency, fair alternative exploration, risk mitigation clarity, testable acceptance criteria, and concrete verification steps. Critic **MUST** explicitly reject shallow alternatives, driver contradictions, vague risks, or weak verification. In deliberate mode, Critic **MUST** reject missing/weak pre-mortem or missing/weak expanded test plan. Run only after step 3 is complete.
|
|
82
|
+
5. **Re-review loop** (max 5 iterations): If Critic rejects or iterates, execute this closed loop:
|
|
83
|
+
a. Collect all feedback from Architect + Critic
|
|
84
|
+
b. Pass feedback to Planner to produce a revised plan
|
|
85
|
+
c. **Return to Step 3** — Architect reviews the revised plan
|
|
86
|
+
d. **Return to Step 4** — Critic evaluates the revised plan
|
|
87
|
+
e. Repeat until Critic approves OR max 5 iterations reached
|
|
88
|
+
f. If max iterations reached without approval, present the best version to user via `AskUserQuestion` with note that expert consensus was not reached
|
|
89
|
+
6. **Apply improvements**: When reviewers approve with improvement suggestions, merge all accepted improvements into the plan file before proceeding. Final consensus output **MUST** include an **ADR** section with: **Decision**, **Drivers**, **Alternatives considered**, **Why chosen**, **Consequences**, **Follow-ups**. Specifically:
|
|
90
|
+
a. Collect all improvement suggestions from Architect and Critic responses
|
|
91
|
+
b. Deduplicate and categorize the suggestions
|
|
92
|
+
c. Update the plan file in `.omx/plans/` with the accepted improvements (add missing details, refine steps, strengthen acceptance criteria, ADR updates, etc.)
|
|
93
|
+
d. Note which improvements were applied in a brief changelog section at the end of the plan
|
|
94
|
+
7. On Critic approval (with improvements applied): *(--interactive only)* If running with `--interactive`, use `AskUserQuestion` to present the plan with these options:
|
|
95
|
+
- **Approve and execute** — proceed to implementation via ralph+ultrawork
|
|
96
|
+
- **Approve and implement via team** — proceed to implementation via coordinated parallel team agents
|
|
97
|
+
- **Request changes** — return to step 1 with user feedback
|
|
98
|
+
- **Reject** — discard the plan entirely
|
|
99
|
+
If NOT running with `--interactive`, output the final approved plan and stop. Do NOT auto-execute.
|
|
100
|
+
8. *(--interactive only)* User chooses via the structured `AskUserQuestion` UI (never ask for approval in plain text)
|
|
101
|
+
9. On user approval (--interactive only):
|
|
102
|
+
- **Approve and execute**: **MUST** invoke `$ralph` with the approved plan path from `.omx/plans/` as context. Do NOT implement directly. Do NOT edit source code files in the planning agent. The ralph skill handles execution via ultrawork parallel agents.
|
|
103
|
+
- **Approve and implement via team**: **MUST** invoke `$team` with the approved plan path from `.omx/plans/` as context. Do NOT implement directly. The team skill coordinates parallel agents across the staged pipeline for faster execution on large tasks.
|
|
86
104
|
|
|
87
105
|
### Review Mode (`--review`)
|
|
88
106
|
|
|
89
107
|
1. Read plan file from `.omx/plans/`
|
|
90
|
-
2. Evaluate via Critic
|
|
108
|
+
2. Evaluate via Critic using `ask_codex` with `agent_role: "critic"`
|
|
91
109
|
3. Return verdict: APPROVED, REVISE (with specific feedback), or REJECT (replanning required)
|
|
92
110
|
|
|
93
111
|
### Plan Output Format
|
|
@@ -98,6 +116,9 @@ Every plan includes:
|
|
|
98
116
|
- Implementation Steps (with file references)
|
|
99
117
|
- Risks and Mitigations
|
|
100
118
|
- Verification Steps
|
|
119
|
+
- For consensus/ralplan: **RALPLAN-DR summary** (Principles, Decision Drivers, Options)
|
|
120
|
+
- For consensus/ralplan final output: **ADR** (Decision, Drivers, Alternatives considered, Why chosen, Consequences, Follow-ups)
|
|
121
|
+
- For deliberate consensus mode: **Pre-mortem (3 scenarios)** and **Expanded Test Plan** (unit/integration/e2e/observability)
|
|
101
122
|
|
|
102
123
|
Plans are saved to `.omx/plans/`. Drafts go to `.omx/drafts/`.
|
|
103
124
|
</Steps>
|
|
@@ -111,9 +132,10 @@ Plans are saved to `.omx/plans/`. Drafts go to `.omx/drafts/`.
|
|
|
111
132
|
- Use `ask_codex` with `agent_role: "analyst"` for requirements analysis
|
|
112
133
|
- Use `ask_codex` with `agent_role: "critic"` for plan review in consensus and review modes
|
|
113
134
|
- If ToolSearch finds no MCP tools or Codex is unavailable, fall back to equivalent OMX prompt agents -- never block on external tools
|
|
114
|
-
-
|
|
115
|
-
- In consensus mode
|
|
116
|
-
- In consensus mode
|
|
135
|
+
- **CRITICAL — Consensus mode agent calls MUST be sequential, never parallel.** Always await the Architect result before issuing the Critic call.
|
|
136
|
+
- In consensus mode, default to RALPLAN-DR short mode; enable deliberate mode on `--deliberate` or explicit high-risk signals (auth/security, migrations, destructive changes, production incidents, compliance/PII, public API breakage)
|
|
137
|
+
- In consensus mode with `--interactive`: use `AskUserQuestion` for the user feedback step (step 2) and the final approval step (step 7) -- never ask for approval in plain text. Without `--interactive`, auto-proceed through planning steps without pausing. Output the final plan without execution.
|
|
138
|
+
- In consensus mode with `--interactive`, on user approval **MUST** invoke `$ralph` for execution (step 9) -- never implement directly in the planning agent
|
|
117
139
|
</Tool_Usage>
|
|
118
140
|
|
|
119
141
|
<Examples>
|
|
@@ -169,8 +191,8 @@ Why bad: Decision fatigue. Present one option with trade-offs, get reaction, the
|
|
|
169
191
|
<Escalation_And_Stop_Conditions>
|
|
170
192
|
- Stop interviewing when requirements are clear enough to plan -- do not over-interview
|
|
171
193
|
- In consensus mode, stop after 5 Planner/Architect/Critic iterations and present the best version
|
|
172
|
-
- Consensus mode
|
|
173
|
-
- If the user says "just do it" or "skip planning", **MUST** invoke
|
|
194
|
+
- Consensus mode outputs the plan by default; with `--interactive`, user can approve and hand off to ralph/team
|
|
195
|
+
- If the user says "just do it" or "skip planning", **MUST** invoke `$ralph` to transition to execution mode. Do NOT implement directly in the planning agent.
|
|
174
196
|
- Escalate to the user when there are irreconcilable trade-offs that require a business decision
|
|
175
197
|
</Escalation_And_Stop_Conditions>
|
|
176
198
|
|
|
@@ -180,8 +202,10 @@ Why bad: Decision fatigue. Present one option with trade-offs, get reaction, the
|
|
|
180
202
|
- [ ] All risks have mitigations identified
|
|
181
203
|
- [ ] No vague terms without metrics ("fast" -> "p99 < 200ms")
|
|
182
204
|
- [ ] Plan saved to `.omx/plans/`
|
|
183
|
-
- [ ] In consensus mode
|
|
184
|
-
- [ ] In consensus mode
|
|
205
|
+
- [ ] In consensus mode: RALPLAN-DR summary includes 3-5 principles, top 3 drivers, and >=2 viable options (or explicit invalidation rationale)
|
|
206
|
+
- [ ] In consensus mode final output: ADR section included (Decision / Drivers / Alternatives considered / Why chosen / Consequences / Follow-ups)
|
|
207
|
+
- [ ] In deliberate consensus mode: pre-mortem (3 scenarios) + expanded test plan (unit/integration/e2e/observability) included
|
|
208
|
+
- [ ] In consensus mode with `--interactive`: user explicitly approved before any execution; without `--interactive`: output final plan after Critic approval (no auto-execution)
|
|
185
209
|
</Final_Checklist>
|
|
186
210
|
|
|
187
211
|
<Advanced>
|
|
@@ -228,5 +252,5 @@ Before asking any interview question, classify it:
|
|
|
228
252
|
|
|
229
253
|
## Deprecation Notice
|
|
230
254
|
|
|
231
|
-
The separate `/planner`, `/ralplan`, and `/review` skills have been merged into
|
|
255
|
+
The separate `/planner`, `/ralplan`, and `/review` skills have been merged into `$plan`. All workflows (interview, direct, consensus, review) are available through `$plan`.
|
|
232
256
|
</Advanced>
|
package/skills/ralplan/SKILL.md
CHANGED
|
@@ -1,46 +1,132 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ralplan
|
|
3
|
-
description: Alias for
|
|
3
|
+
description: Alias for $plan --consensus
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Ralplan (Consensus Planning Alias)
|
|
7
7
|
|
|
8
|
-
Ralplan is a shorthand alias for
|
|
8
|
+
Ralplan is a shorthand alias for `$plan --consensus`. It triggers iterative planning with Planner, Architect, and Critic agents until consensus is reached, with **RALPLAN-DR structured deliberation** (short mode by default, deliberate mode for high-risk work).
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
12
|
```
|
|
13
|
-
|
|
14
|
-
/ralplan --interactive "task description"
|
|
13
|
+
$ralplan "task description"
|
|
15
14
|
```
|
|
16
15
|
|
|
17
16
|
## Flags
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
- `--interactive`: Enables user prompts at key decision points (draft review in step 2 and final approval in step 6). Without this flag the workflow runs fully automated — Planner → Architect → Critic loop — and outputs the final plan without asking for confirmation.
|
|
19
|
+
- `--deliberate`: Forces deliberate mode for high-risk work. Adds pre-mortem (3 scenarios) and expanded test planning (unit/integration/e2e/observability). Without this flag, deliberate mode can still auto-enable when the request explicitly signals high risk (auth/security, migrations, destructive changes, production incidents, compliance/PII, public API breakage).
|
|
20
|
+
|
|
21
|
+
## Usage with interactive mode
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
$ralplan --interactive "task description"
|
|
25
|
+
```
|
|
23
26
|
|
|
24
27
|
## Behavior
|
|
25
28
|
|
|
26
29
|
This skill invokes the Plan skill in consensus mode:
|
|
27
30
|
|
|
28
31
|
```
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
$plan --consensus <arguments>
|
|
33
|
+
$plan --consensus --interactive <arguments>
|
|
31
34
|
```
|
|
32
35
|
|
|
33
|
-
The consensus workflow
|
|
34
|
-
1. **Planner** creates initial plan
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
The consensus workflow:
|
|
37
|
+
1. **Planner** creates initial plan and a compact **RALPLAN-DR summary** before review:
|
|
38
|
+
- Principles (3-5)
|
|
39
|
+
- Decision Drivers (top 3)
|
|
40
|
+
- Viable Options (>=2) with bounded pros/cons
|
|
41
|
+
- If only one viable option remains, explicit invalidation rationale for alternatives
|
|
42
|
+
- Deliberate mode only: pre-mortem (3 scenarios) + expanded test plan (unit/integration/e2e/observability)
|
|
43
|
+
2. **User feedback** *(--interactive only)*: If `--interactive` is set, use `AskUserQuestion` to present the draft plan **plus the Principles / Drivers / Options summary** before review (Proceed to review / Request changes / Skip review). Otherwise, automatically proceed to review.
|
|
44
|
+
3. **Architect** reviews for architectural soundness and must provide the strongest steelman antithesis, at least one real tradeoff tension, and (when possible) synthesis — **await completion before step 4**. In deliberate mode, Architect should explicitly flag principle violations.
|
|
45
|
+
4. **Critic** evaluates against quality criteria — run only after step 3 completes. Critic must enforce principle-option consistency, fair alternatives, risk mitigation clarity, testable acceptance criteria, and concrete verification steps. In deliberate mode, Critic must reject missing/weak pre-mortem or expanded test plan.
|
|
46
|
+
5. **Re-review loop** (max 5 iterations): Any non-`APPROVE` Critic verdict (`ITERATE` or `REJECT`) MUST run the same full closed loop:
|
|
47
|
+
a. Collect Architect + Critic feedback
|
|
48
|
+
b. Revise the plan with Planner
|
|
49
|
+
c. Return to Architect review
|
|
50
|
+
d. Return to Critic evaluation
|
|
51
|
+
e. Repeat this loop until Critic returns `APPROVE` or 5 iterations are reached
|
|
52
|
+
f. If 5 iterations are reached without `APPROVE`, present the best version to the user
|
|
53
|
+
6. On Critic approval *(--interactive only)*: If `--interactive` is set, use `AskUserQuestion` to present the plan with approval options (Approve and execute via ralph / Approve and implement via team / Request changes / Reject). Final plan must include ADR (Decision, Drivers, Alternatives considered, Why chosen, Consequences, Follow-ups). Otherwise, output the final plan and stop.
|
|
54
|
+
7. *(--interactive only)* User chooses: Approve (ralph or team), Request changes, or Reject
|
|
55
|
+
8. *(--interactive only)* On approval: invoke `$ralph` for sequential execution or `$team` for parallel team execution -- never implement directly
|
|
41
56
|
|
|
42
|
-
|
|
43
|
-
- Step 2 options: Proceed to review / Request changes / Skip review
|
|
44
|
-
- Step 6 options: Approve and execute / Request changes / Reject
|
|
57
|
+
> **Important:** Steps 3 and 4 MUST run sequentially. Do NOT issue both agent calls in the same parallel batch. Always await the Architect result before invoking Critic.
|
|
45
58
|
|
|
46
59
|
Follow the Plan skill's full documentation for consensus mode details.
|
|
60
|
+
|
|
61
|
+
## Pre-Execution Gate
|
|
62
|
+
|
|
63
|
+
### Why the Gate Exists
|
|
64
|
+
|
|
65
|
+
Execution modes (ralph, autopilot, team, ultrawork) spin up heavy multi-agent orchestration. When launched on a vague request like "ralph improve the app", agents have no clear target — they waste cycles on scope discovery that should happen during planning, often delivering partial or misaligned work that requires rework.
|
|
66
|
+
|
|
67
|
+
The ralplan-first gate intercepts underspecified execution requests and redirects them through the ralplan consensus planning workflow. This ensures:
|
|
68
|
+
- **Explicit scope**: A PRD defines exactly what will be built
|
|
69
|
+
- **Test specification**: Acceptance criteria are testable before code is written
|
|
70
|
+
- **Consensus**: Planner, Architect, and Critic agree on the approach
|
|
71
|
+
- **No wasted execution**: Agents start with a clear, bounded task
|
|
72
|
+
|
|
73
|
+
### Good vs Bad Prompts
|
|
74
|
+
|
|
75
|
+
**Passes the gate** (specific enough for direct execution):
|
|
76
|
+
- `ralph fix the null check in src/hooks/bridge.ts:326`
|
|
77
|
+
- `autopilot implement issue #42`
|
|
78
|
+
- `team add validation to function processKeywordDetector`
|
|
79
|
+
- `ralph do:\n1. Add input validation\n2. Write tests\n3. Update README`
|
|
80
|
+
- `ultrawork add the user model in src/models/user.ts`
|
|
81
|
+
|
|
82
|
+
**Gated — redirected to ralplan** (needs scoping first):
|
|
83
|
+
- `ralph fix this`
|
|
84
|
+
- `autopilot build the app`
|
|
85
|
+
- `team improve performance`
|
|
86
|
+
- `ralph add authentication`
|
|
87
|
+
- `ultrawork make it better`
|
|
88
|
+
|
|
89
|
+
**Bypass the gate** (when you know what you want):
|
|
90
|
+
- `force: ralph refactor the auth module`
|
|
91
|
+
- `! autopilot optimize everything`
|
|
92
|
+
|
|
93
|
+
### When the Gate Does NOT Trigger
|
|
94
|
+
|
|
95
|
+
The gate auto-passes when it detects **any** concrete signal. You do not need all of them — one is enough:
|
|
96
|
+
|
|
97
|
+
| Signal Type | Example prompt | Why it passes |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| File path | `ralph fix src/hooks/bridge.ts` | References a specific file |
|
|
100
|
+
| Issue/PR number | `ralph implement #42` | Has a concrete work item |
|
|
101
|
+
| camelCase symbol | `ralph fix processKeywordDetector` | Names a specific function |
|
|
102
|
+
| PascalCase symbol | `ralph update UserModel` | Names a specific class |
|
|
103
|
+
| snake_case symbol | `team fix user_model` | Names a specific identifier |
|
|
104
|
+
| Test runner | `ralph npm test && fix failures` | Has an explicit test target |
|
|
105
|
+
| Numbered steps | `ralph do:\n1. Add X\n2. Test Y` | Structured deliverables |
|
|
106
|
+
| Acceptance criteria | `ralph add login - acceptance criteria: ...` | Explicit success definition |
|
|
107
|
+
| Error reference | `ralph fix TypeError in auth` | Specific error to address |
|
|
108
|
+
| Code block | `ralph add: \`\`\`ts ... \`\`\`` | Concrete code provided |
|
|
109
|
+
| Escape prefix | `force: ralph do it` or `! ralph do it` | Explicit user override |
|
|
110
|
+
|
|
111
|
+
### End-to-End Flow Example
|
|
112
|
+
|
|
113
|
+
1. User types: `ralph add user authentication`
|
|
114
|
+
2. Gate detects: execution keyword (`ralph`) + underspecified prompt (no files, functions, or test spec)
|
|
115
|
+
3. Gate redirects to **ralplan** with message explaining the redirect
|
|
116
|
+
4. Ralplan consensus runs:
|
|
117
|
+
- **Planner** creates initial plan (which files, what auth method, what tests)
|
|
118
|
+
- **Architect** reviews for soundness
|
|
119
|
+
- **Critic** validates quality and testability
|
|
120
|
+
5. On consensus approval, user chooses execution path:
|
|
121
|
+
- **ralph**: sequential execution with verification
|
|
122
|
+
- **team**: parallel coordinated agents
|
|
123
|
+
6. Execution begins with a clear, bounded plan
|
|
124
|
+
|
|
125
|
+
### Troubleshooting
|
|
126
|
+
|
|
127
|
+
| Issue | Solution |
|
|
128
|
+
|-------|----------|
|
|
129
|
+
| Gate fires on a well-specified prompt | Add a file reference, function name, or issue number to anchor the request |
|
|
130
|
+
| Want to bypass the gate | Prefix with `force:` or `!` (e.g., `force: ralph fix it`) |
|
|
131
|
+
| Gate does not fire on a vague prompt | The gate only catches prompts with <=15 effective words and no concrete anchors; add more detail or use `$ralplan` explicitly |
|
|
132
|
+
| Redirected to ralplan but want to skip planning | In the ralplan workflow, say "just do it" or "skip planning" to transition directly to execution |
|