一路看到第 20 天,最常出現的一種感覺就是:
我好像每一篇都看懂了,但它們加起來到底長什麼樣?
這其實很正常。
因為 OpenClaw 不是那種單點爆破就看懂的系統。
它比較像一座城市:
所以第 20 天我想做的不是新主題,而是收斂。
前 20 天收斂,把 OpenClaw 畫成一張地圖
cron 和 skill 在整張地圖上各站哪裡?如果把前 20 天重新整理,我會把 OpenClaw 畫成六區:
cron、heartbeat、background automationskill.md、skills snapshot、prompt injection這六區看起來分散,其實都是同一條資料流的不同面。
所以今天的重點不是再講一次每一塊,而是把它們串回來看。
先用入口和地圖中心做回顧。
📄 原始碼:
src/agents/agent-command.ts:1042-1045
const sessionWorkAdmission = await beginSessionWorkAdmission({
scope: storePath ?? `agent:${sessionAgentId}`,
identities: [sessionKey, sessionId],
signal: opts.abortSignal,
onInterrupt: () => lifecycleAbortController.abort(createAgentRunRestartAbortError()),
assertAllowed: () => { ... }
});
📄 原始碼:
src/agents/agent-command.ts:1400-1412
const skillFilter = resolveEffectiveAgentSkillFilter(cfg, sessionAgentId);
const currentSkillsSnapshot = sessionEntry?.skillsSnapshot;
const skillSnapshotState = resolveReusableWorkspaceSkillSnapshot({
skillFilter,
currentSkillsSnapshot,
workspaceDir,
agentDir,
agentId: sessionAgentId,
canExecRequestNode,
getRemoteSkillEligibility
});
這兩段放在一起看就很清楚:
前者是門禁,後者是能力背景。
再看 cron 和 skill 的特殊處理,為什麼它們不是普通 turn。
📄 原始碼:
extensions/codex/src/app-server/thread-lifecycle.ts(本機版本行號已變動,僅標到檔案)
function buildTurnScopedCollaborationInstructions(params) {
if (params.trigger === "cron") return buildCronCollaborationInstructions();
if (params.trigger === "heartbeat") return buildHeartbeatCollaborationInstructions();
return null;
}
📄 原始碼:
extensions/codex/src/app-server/thread-lifecycle.ts:3062-3062
function buildDeveloperInstructions(params) {
return [
"Running inside OpenClaw. Use dynamic tools for messaging, cron, sessions, media, gateway, and nodes when available.",
renderCodexRuntimePromptOverlay(params),
params.extraSystemPrompt,
params.skillsSnapshot?.prompt
].filter((section) => typeof section === "string" && section.trim()).join("\\n\\n");
}
這兩段就是第 17 到 19 天的核心縮影:
cron 會切到專屬協作模式skill 會進到 developer instructions這是前 20 天最重要的一句話。
很多人初看 AI 系統,會覺得 model 才是中心。
但 OpenClaw 的地圖中心比較像 session:
model 很重要,但它是在 session 這個容器裡運作。
如果你只看最終 reply,會誤會 OpenClaw 只是聊天機器人。
但前 20 天一路看下來,它其實一直在處理:
字串只是最後一層的外觀。
真正流動的是狀態。
cron 和 skill 是兩種不同的特殊性這兩個很容易被混在一起。
cron 是特殊 turn:它代表「系統自己安排的工作」skill 是特殊能力:它代表「這輪可用的工作背景」一個偏執行時機,一個偏能力上下文。
所以它們不是同一層的東西。
如果你只看入口,會以為 OpenClaw 只是排隊系統。
如果你只看 state,會以為它只是 session store。
如果你只看 skill,會以為它只是 prompt 補丁。
但真正的 OpenClaw 是:
三者合起來,才是它能跑長流程的原因。
那個問題就是:
一個任務怎麼在有 session、有工具、有排程、有技能、有子代理的系統裡,穩穩地跑完?
答案被拆成很多篇,但主線一直都沒變。
但這些代價,換來的是可擴充性。
如果你想把系統從「能聊天」推到「能工作」,這些複雜度就是要付的學費。
cron 是特殊的 scheduled turnskill.md 是能力上下文,會進到 prompt 和 runtime前 20 天把本體地圖畫完了。
接下來就要開始看它怎麼接外部世界:
這樣整個系列就會從「內部怎麼跑」走到「怎麼對外發生作用」。