mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-25 07:49:30 +00:00
Claude Code built-ins ScheduleWakeup and CronCreate schedule a deferred re-invocation managed by the persistent CLI runtime. In OpenClaw's one-shot `claude -p` invocations the process exits at end_turn, so any wakeup or cron registered during the run has no host to fire into and is silently lost. Symptom: a CLI session spawns a background sub-agent, calls ScheduleWakeup to poll for completion, ends the turn, and never picks up the result — the work finishes unreviewed. Append `--disallowedTools "ScheduleWakeup,CronCreate"` to both `args` and `resumeArgs` in the anthropic CLI backend so the model cannot reach for tools that don't survive the run mode. The right pattern in CLI sessions is Monitor on the background output file, or a synchronous sub-agent.
96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
/**
|
|
* Claude CLI backend descriptor. It configures Claude Code process arguments,
|
|
* MCP bundling, session handling, environment scrubbing, and watchdog defaults.
|
|
*/
|
|
import type { CliBackendPlugin } from "openclaw/plugin-sdk/cli-backend";
|
|
import {
|
|
CLI_FRESH_WATCHDOG_DEFAULTS,
|
|
CLI_RESUME_WATCHDOG_DEFAULTS,
|
|
} from "openclaw/plugin-sdk/cli-backend";
|
|
import {
|
|
CLAUDE_CLI_BACKEND_ID,
|
|
CLAUDE_CLI_DEFAULT_MODEL_REF,
|
|
CLAUDE_CLI_CLEAR_ENV,
|
|
CLAUDE_CLI_MODEL_ALIASES,
|
|
CLAUDE_CLI_SESSION_ID_FIELDS,
|
|
normalizeClaudeBackendConfig,
|
|
resolveClaudeCliExecutionArgs,
|
|
} from "./cli-shared.js";
|
|
|
|
/** Build the Claude CLI backend plugin descriptor. */
|
|
export function buildAnthropicCliBackend(): CliBackendPlugin {
|
|
return {
|
|
id: CLAUDE_CLI_BACKEND_ID,
|
|
modelProvider: "anthropic",
|
|
liveTest: {
|
|
defaultModelRef: CLAUDE_CLI_DEFAULT_MODEL_REF,
|
|
defaultImageProbe: true,
|
|
defaultMcpProbe: true,
|
|
docker: {
|
|
npmPackage: "@anthropic-ai/claude-code",
|
|
binaryName: "claude",
|
|
},
|
|
},
|
|
bundleMcp: true,
|
|
bundleMcpMode: "claude-config-file",
|
|
nativeToolMode: "always-on",
|
|
sideQuestionToolMode: "disabled",
|
|
ownsNativeCompaction: true,
|
|
config: {
|
|
command: "claude",
|
|
args: [
|
|
"-p",
|
|
"--output-format",
|
|
"stream-json",
|
|
"--include-partial-messages",
|
|
"--verbose",
|
|
"--setting-sources",
|
|
"user",
|
|
"--allowedTools",
|
|
"mcp__openclaw__*",
|
|
"--disallowedTools",
|
|
"ScheduleWakeup,CronCreate",
|
|
],
|
|
resumeArgs: [
|
|
"-p",
|
|
"--output-format",
|
|
"stream-json",
|
|
"--include-partial-messages",
|
|
"--verbose",
|
|
"--setting-sources",
|
|
"user",
|
|
"--allowedTools",
|
|
"mcp__openclaw__*",
|
|
"--disallowedTools",
|
|
"ScheduleWakeup,CronCreate",
|
|
"--resume",
|
|
"{sessionId}",
|
|
],
|
|
output: "jsonl",
|
|
liveSession: "claude-stdio",
|
|
input: "stdin",
|
|
modelArg: "--model",
|
|
modelAliases: CLAUDE_CLI_MODEL_ALIASES,
|
|
imageArg: "@",
|
|
imagePathScope: "workspace",
|
|
sessionArg: "--session-id",
|
|
sessionMode: "always",
|
|
reseedFromRawTranscriptWhenUncompacted: true,
|
|
sessionIdFields: [...CLAUDE_CLI_SESSION_ID_FIELDS],
|
|
systemPromptFileArg: "--append-system-prompt-file",
|
|
systemPromptMode: "append",
|
|
systemPromptWhen: "always",
|
|
clearEnv: [...CLAUDE_CLI_CLEAR_ENV],
|
|
reliability: {
|
|
watchdog: {
|
|
fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS },
|
|
resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS },
|
|
},
|
|
},
|
|
serialize: true,
|
|
},
|
|
normalizeConfig: normalizeClaudeBackendConfig,
|
|
resolveExecutionArgs: resolveClaudeCliExecutionArgs,
|
|
};
|
|
}
|