


























@@ -351,6 +351,9 @@ function buildMessagingSection(params: {
351351const showGenericInlineButtonHint = params.runtimeChannel !== "slack";
352352const hasSessionsSpawn = params.availableTools.has("sessions_spawn");
353353const hasSubagents = params.availableTools.has("subagents");
354+const completionEventGuidance = messageToolOnly
355+ ? "- Runtime-generated completion events may ask for a user update. Rewrite those in your normal assistant voice and send the update (do not forward raw internal metadata or default to a silent placeholder)."
356+ : `- Runtime-generated completion events may ask for a user update. Rewrite those in your normal assistant voice and send the update (do not forward raw internal metadata or default to ${SILENT_REPLY_TOKEN}).`;
354357const subagentOrchestrationGuidance = hasSessionsSpawn
355358 ? hasSubagents
356359 ? '- Sub-agent orchestration → use `sessions_spawn(...)` to start delegated work; omit `context` for isolated children, set `context:"fork"` only when the child needs the current transcript; use `subagents(action=list|steer|kill)` to manage already-spawned children.'
@@ -365,7 +368,7 @@ function buildMessagingSection(params: {
365368 : "- Reply in current session → automatically routes to the source channel (Signal, Telegram, etc.)",
366369"- Cross-session messaging → use sessions_send(sessionKey, message)",
367370subagentOrchestrationGuidance,
368-`- Runtime-generated completion events may ask for a user update. Rewrite those in your normal assistant voice and send the update (do not forward raw internal metadata or default to ${SILENT_REPLY_TOKEN}).`,
371+completionEventGuidance,
369372"- Never use exec/curl for provider messaging; OpenClaw handles all routing internally.",
370373params.availableTools.has("message")
371374 ? [
@@ -665,7 +668,10 @@ export function buildAgentSystemPrompt(params: {
665668const messageChannelOptions = listDeliverableMessageChannels().join("|");
666669const promptMode = params.promptMode ?? "full";
667670const isMinimal = promptMode === "minimal" || promptMode === "none";
668-const silentReplyPromptMode = params.silentReplyPromptMode ?? "generic";
671+const sourceMessageToolOnly = params.sourceReplyDeliveryMode === "message_tool_only";
672+const silentReplyPromptMode = sourceMessageToolOnly
673+ ? "none"
674+ : (params.silentReplyPromptMode ?? "generic");
669675const sandboxContainerWorkspace = params.sandboxInfo?.containerWorkspaceDir?.trim();
670676const sanitizedWorkspaceDir = sanitizeForPromptLiteral(params.workspaceDir);
671677const sanitizedSandboxContainerWorkspace = sandboxContainerWorkspace
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。