feat(default-mode): auto-activate ultrawork and ralph loop without commands

Add new `default_mode` config section with two boolean fields:
- `ultrawork`: Auto-inject ultrawork mode prompt on main session start
  without requiring the "ultrawork"/"ulw" keyword. Wired through the
  keyword-detector hook — injects once per session, respects existing
  guards (non-OMO agents, planner agents, subagent sessions).
- `ralph_loop`: Auto-start ralph loop on first main session message
  without requiring /ralph-loop or /ulw-loop commands. When ultrawork
  is also enabled, the loop starts in ultrawork mode.

Usage:
  ```jsonc
  {
    "default_mode": {
      "ultrawork": true,    // Always get ultrawork prompt on start
      "ralph_loop": true    // Auto-start ralph loop
    }
  }
  ```

Files: 7 modified/added, ~65 LOC added.
This commit is contained in:
herjarsa
2026-05-19 15:35:21 +02:00
parent f540249838
commit e5463e2db7
7 changed files with 83 additions and 8 deletions
+19
View File
@@ -304,6 +304,25 @@ export function createChatMessageHandler(args: {
} else if (isCancelRalphTemplate || rawLoopCommand?.command === "cancel-ralph") {
hooks.ralphLoop.cancelLoop(input.sessionID)
}
if (
!isRalphLoopTemplate
&& !isUlwLoopTemplate
&& !isCancelRalphTemplate
&& !rawLoopCommand
&& isFirstMessage
&& pluginConfig.default_mode?.ralph_loop
) {
const loopPrompt = promptText
const ultrawork = pluginConfig.default_mode?.ultrawork ?? false
hooks.ralphLoop.startLoop(input.sessionID, loopPrompt, {
ultrawork,
})
log("[chat-message] Default ralph loop auto-started", {
sessionID: input.sessionID,
ultrawork,
})
}
}
await applyUltraworkModelOverrideOnMessage(
@@ -61,6 +61,7 @@ export function createTransformHooks(args: {
contextCollector,
ralphLoop ?? undefined,
pluginConfig.keyword_detector,
pluginConfig.default_mode,
),
{ enabled: safeHookEnabled },
)