Fundamentals
พรอมต์ระบบ
OpenClaw สร้าง system prompt แบบกำหนดเองสำหรับการรัน agent ทุกครั้ง prompt นี้เป็นของ OpenClaw และไม่ได้ใช้ prompt เริ่มต้นของ pi-coding-agent
prompt จะถูกประกอบโดย OpenClaw และฉีดเข้าไปในการรัน agent แต่ละครั้ง
Plugin ผู้ให้บริการสามารถร่วมเพิ่มคำแนะนำ prompt ที่คำนึงถึงแคชได้โดยไม่ต้องแทนที่ prompt ทั้งหมดที่ OpenClaw เป็นเจ้าของ runtime ของผู้ให้บริการสามารถ:
- แทนที่ส่วนหลักที่มีชื่อไว้ชุดเล็ก ๆ (
interaction_style,tool_call_style,execution_bias) - ฉีด prefix ที่เสถียร ไว้เหนือขอบเขตแคช prompt
- ฉีด suffix แบบไดนามิก ไว้ใต้ขอบเขตแคช prompt
ใช้ส่วนร่วมที่ผู้ให้บริการเป็นเจ้าของสำหรับการปรับแต่งเฉพาะตระกูลโมเดล เก็บการกลายพันธุ์ prompt แบบเดิม
before_prompt_build ไว้สำหรับความเข้ากันได้หรือการเปลี่ยนแปลง prompt
ระดับสากลจริง ๆ ไม่ใช่พฤติกรรมปกติของผู้ให้บริการ
โอเวอร์เลย์ตระกูล OpenAI GPT-5 ทำให้กฎการดำเนินการหลักมีขนาดเล็กและเพิ่ม คำแนะนำเฉพาะโมเดลสำหรับการยึด persona, การส่งออกที่กระชับ, วินัยในการใช้เครื่องมือ, การค้นหาแบบขนาน, ความครอบคลุมของ deliverable, การยืนยัน, บริบทที่ขาดหายไป และ สุขอนามัยของเครื่องมือเทอร์มินัล
โครงสร้าง
prompt ถูกออกแบบให้กะทัดรัดและใช้ส่วนตายตัว:
- เครื่องมือ: ตัวเตือนแหล่งความจริงของ structured-tool พร้อมคำแนะนำการใช้เครื่องมือขณะ runtime
- อคติในการดำเนินการ: คำแนะนำการทำงานต่อจนจบแบบกะทัดรัด: ลงมือในเทิร์นกับ คำขอที่ดำเนินการได้ ทำต่อจนเสร็จหรือถูกบล็อก กู้คืนจากผลลัพธ์เครื่องมือที่อ่อน ตรวจสอบสถานะที่เปลี่ยนแปลงได้แบบสด และยืนยันก่อนสรุป
- ความปลอดภัย: ตัวเตือน guardrail สั้น ๆ เพื่อหลีกเลี่ยงพฤติกรรมแสวงหาอำนาจหรือการเลี่ยงการกำกับดูแล
- Skills (เมื่อพร้อมใช้งาน): บอกโมเดลว่าจะโหลดคำสั่ง skill ตามต้องการอย่างไร
- OpenClaw Self-Update: วิธีตรวจสอบ config อย่างปลอดภัยด้วย
config.schema.lookup, patch config ด้วยconfig.patch, แทนที่ config ทั้งหมด ด้วยconfig.apply, และรันupdate.runเฉพาะเมื่อผู้ใช้ร้องขออย่างชัดเจน เท่านั้น เครื่องมือgatewayสำหรับ owner เท่านั้นยังปฏิเสธการเขียนใหม่tools.exec.ask/tools.exec.securityรวมถึง alias เดิมtools.bash.*ที่ normalize เป็น path exec ที่ได้รับการป้องกันเหล่านั้น - Workspace: ไดเรกทอรีทำงาน (
agents.defaults.workspace) - เอกสาร: path ภายในเครื่องไปยังเอกสาร OpenClaw (repo หรือ npm package) และควรอ่านเมื่อใด
- ไฟล์ Workspace (ฉีดเข้าไป): ระบุว่าไฟล์ bootstrap ถูกรวมไว้ด้านล่าง
- Sandbox (เมื่อเปิดใช้งาน): ระบุ runtime ที่อยู่ใน sandbox, path ของ sandbox และ exec แบบยกระดับพร้อมใช้งานหรือไม่
- วันที่และเวลาปัจจุบัน: เฉพาะเขตเวลา (เสถียรต่อแคช; นาฬิกาสดมาจาก
session_status) - แท็กตอบกลับ: ไวยากรณ์แท็กตอบกลับแบบเลือกได้สำหรับผู้ให้บริการที่รองรับ
- Heartbeats: prompt ของ heartbeat และพฤติกรรม ack เมื่อเปิดใช้ heartbeats สำหรับ agent เริ่มต้น
- Runtime: host, OS, node, model, repo root (เมื่อตรวจพบ), ระดับ thinking (หนึ่งบรรทัด)
- การใช้เหตุผล: ระดับการมองเห็นปัจจุบัน + คำแนะนำ toggle /reasoning
OpenClaw เก็บเนื้อหาเสถียรขนาดใหญ่ รวมถึง Project Context ไว้เหนือ ขอบเขตแคช prompt ภายใน ส่วน channel/session ที่เปลี่ยนแปลงง่าย เช่น คำแนะนำการฝัง Control UI, Messaging, Voice, Group Chat Context, Reactions, Heartbeats, และ Runtime จะถูกต่อท้ายไว้ใต้ขอบเขตนั้น เพื่อให้ backend ภายในเครื่องที่มี prefix cache สามารถใช้ prefix workspace ที่เสถียรซ้ำ ข้ามเทิร์นของช่องทางได้ คำอธิบายเครื่องมือก็ควรหลีกเลี่ยงการฝังชื่อช่องทางปัจจุบันเช่นกัน เมื่อ schema ที่ยอมรับมีรายละเอียด runtime นั้นอยู่แล้ว
ส่วน Tooling ยังมีคำแนะนำ runtime สำหรับงานที่ใช้เวลานาน:
- ใช้ cron สำหรับการติดตามผลในอนาคต (
check back later, การเตือน, งานที่เกิดซ้ำ) แทน loop sleep ของexec, กลเม็ดหน่วงเวลาyieldMs, หรือการ pollingprocessซ้ำ ๆ - ใช้
exec/processเฉพาะกับคำสั่งที่เริ่มตอนนี้และรันต่อ ในเบื้องหลัง - เมื่อเปิดใช้งานการ wake เมื่อเสร็จอัตโนมัติ ให้เริ่มคำสั่งครั้งเดียวและพึ่งพา path wake แบบ push-based เมื่อมี output หรือเกิด failure
- ใช้
processสำหรับ log, status, input หรือ intervention เมื่อคุณต้อง ตรวจสอบคำสั่งที่กำลังรันอยู่ - หากงานมีขนาดใหญ่กว่า ให้เลือกใช้
sessions_spawn; การเสร็จสิ้นของ sub-agent เป็นแบบ push-based และประกาศกลับไปยังผู้ร้องขอโดยอัตโนมัติ - อย่า polling
subagents list/sessions_listใน loop เพียงเพื่อรอ ให้เสร็จสิ้น
เมื่อเปิดใช้งานเครื่องมือทดลอง update_plan ส่วน Tooling ยังบอกให้
โมเดลใช้เครื่องมือนี้เฉพาะกับงานหลายขั้นตอนที่ไม่เล็กน้อย คงไว้ให้มีขั้นตอน
in_progress เพียงหนึ่งรายการพอดี และหลีกเลี่ยงการทำซ้ำแผนทั้งหมดหลังการอัปเดตแต่ละครั้ง
guardrail ด้านความปลอดภัยใน system prompt เป็นคำแนะนำ คำแนะนำเหล่านี้ชี้นำพฤติกรรมของโมเดลแต่ไม่ได้บังคับใช้นโยบาย ใช้นโยบายเครื่องมือ, การอนุมัติ exec, sandboxing และ allowlist ของช่องทางสำหรับการบังคับใช้ที่เข้มงวด; operator สามารถปิดสิ่งเหล่านี้ได้ตามการออกแบบ
ในช่องทางที่มีการ์ด/ปุ่มอนุมัติ native prompt runtime ตอนนี้บอกให้
agent พึ่งพา UI อนุมัติ native นั้นก่อน ควรรวมคำสั่ง
/approve แบบ manual เฉพาะเมื่อผลลัพธ์เครื่องมือบอกว่าการอนุมัติผ่าน chat ไม่พร้อมใช้งานหรือ
การอนุมัติแบบ manual เป็น path เดียวเท่านั้น
โหมด prompt
OpenClaw สามารถ render system prompt ที่เล็กลงสำหรับ sub-agent ได้ runtime ตั้งค่า
promptMode สำหรับการรันแต่ละครั้ง (ไม่ใช่ config ที่แสดงต่อผู้ใช้):
full(ค่าเริ่มต้น): รวมทุกส่วนข้างต้นminimal: ใช้สำหรับ sub-agent; ละเว้น Skills, Memory Recall, OpenClaw Self-Update, Model Aliases, User Identity, Reply Tags, Messaging, Silent Replies, และ Heartbeats Tooling, Safety, Workspace, Sandbox, Current Date & Time (เมื่อทราบ), Runtime และบริบทที่ฉีดเข้าไป ยังคงพร้อมใช้งานnone: คืนเฉพาะบรรทัด identity พื้นฐาน
เมื่อ promptMode=minimal, prompt ที่ฉีดเพิ่มจะติดป้าย Subagent
Context แทน Group Chat Context
สำหรับการรันตอบกลับอัตโนมัติของช่องทาง OpenClaw สามารถละเว้นส่วน Silent Replies
ทั่วไปเมื่อบริบท direct/group chat มีพฤติกรรม NO_REPLY
เฉพาะบทสนทนาที่ resolve แล้วอยู่แล้ว สิ่งนี้หลีกเลี่ยงการทำซ้ำกลไก token
ทั้งใน system prompt ส่วนกลางและบริบทช่องทาง
snapshot ของ prompt
OpenClaw เก็บ snapshot prompt ที่ commit แล้วสำหรับ happy path ของ runtime Codex ไว้ใต้
test/fixtures/agents/prompt-snapshots/codex-runtime-happy-path/ snapshot เหล่านี้ render
params ของ thread/turn ของ app-server ที่เลือกไว้ รวมถึง stack ชั้น prompt ที่ผูกกับโมเดลซึ่ง reconstruct แล้ว
สำหรับเทิร์น Telegram direct, Discord group และ heartbeat stack นั้น
มี fixture prompt โมเดล Codex gpt-5.5 ที่ pin ไว้ซึ่งสร้างจาก
รูปทรง catalog/cache ของโมเดล Codex, ข้อความ developer สำหรับ permission happy-path ของ Codex,
คำสั่ง developer ของ OpenClaw, คำสั่ง collaboration-mode ที่จำกัดขอบเขตตามเทิร์น
เมื่อ OpenClaw จัดเตรียมให้, input เทิร์นของผู้ใช้ และการอ้างอิงถึง spec เครื่องมือแบบไดนามิก
รีเฟรช fixture prompt โมเดล Codex ที่ pin ไว้ด้วย
pnpm prompt:snapshots:sync-codex-model โดยค่าเริ่มต้น script จะมองหา
cache runtime ของ Codex ที่ $CODEX_HOME/models_cache.json, จากนั้น
~/.codex/models_cache.json, แล้วจึง fallback ไปยัง convention checkout Codex ของ maintainer
ที่ ~/code/codex/codex-rs/models-manager/models.json หากไม่มี
แหล่งข้อมูลเหล่านั้นอยู่ คำสั่งจะออกโดยไม่เปลี่ยน fixture ที่ commit แล้ว
ส่ง --catalog <path> เพื่อรีเฟรชจากไฟล์ models_cache.json
หรือ models.json ที่เฉพาะเจาะจง
snapshot เหล่านี้ยังไม่ใช่การ capture คำขอ OpenAI ดิบแบบ byte-for-byte Codex
สามารถเพิ่มบริบท workspace ที่ runtime เป็นเจ้าของ เช่น AGENTS.md, environment
context, memories, คำสั่ง app/plugin และคำสั่ง collaboration-mode เริ่มต้น
ในตัว ภายใน runtime Codex หลังจาก OpenClaw ส่ง params ของ thread และ turn แล้ว
สร้างใหม่ด้วย pnpm prompt:snapshots:gen และตรวจ drift ด้วย
pnpm prompt:snapshots:check CI รันการตรวจ drift ใน shard ขอบเขตเพิ่มเติม
เพื่อให้การเปลี่ยน prompt และการอัปเดต snapshot ผูกอยู่กับ PR เดียวกัน
การฉีด bootstrap ของ Workspace
ไฟล์ bootstrap จะถูกตัดแต่งและต่อท้ายใต้ Project Context เพื่อให้โมเดลเห็นบริบท identity และ profile โดยไม่ต้องอ่านอย่างชัดเจน:
AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.mdBOOTSTRAP.md(เฉพาะ workspace ที่สร้างใหม่เท่านั้น)MEMORY.mdเมื่อมีอยู่
ไฟล์ทั้งหมดนี้ถูก ฉีดเข้าไปใน context window ทุกเทิร์น เว้นแต่
จะมี gate เฉพาะไฟล์บังคับใช้ HEARTBEAT.md จะถูกละเว้นในการรันปกติเมื่อ
ปิด heartbeats สำหรับ agent เริ่มต้น หรือ
agents.defaults.heartbeat.includeSystemPromptSection เป็น false ทำให้ไฟล์ที่ฉีดเข้าไป
กระชับ โดยเฉพาะ MEMORY.md ซึ่งอาจโตขึ้นเมื่อเวลาผ่านไปและทำให้
การใช้ context สูงเกินคาดและเกิด Compaction บ่อยขึ้น
เมื่อ session รันบน harness native ของ Codex, Codex จะโหลด AGENTS.md
ผ่านการค้นพบ project-doc ของตัวเอง OpenClaw ยังคง resolve ไฟล์
bootstrap ที่เหลือและ forward เป็นคำสั่ง config ของ Codex ดังนั้น SOUL.md,
TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md, และ
MEMORY.md จึงยังคงมีบทบาท workspace-context เดิมโดยไม่ทำซ้ำ
AGENTS.md
ไฟล์ขนาดใหญ่จะถูกตัดทอนพร้อม marker ขนาดสูงสุดต่อไฟล์ถูกควบคุมโดย
agents.defaults.bootstrapMaxChars (ค่าเริ่มต้น: 12000) เนื้อหา bootstrap ที่ฉีดทั้งหมด
ข้ามไฟล์ถูกจำกัดโดย agents.defaults.bootstrapTotalMaxChars
(ค่าเริ่มต้น: 60000) ไฟล์ที่หายไปจะฉีด marker ไฟล์หายสั้น ๆ เมื่อเกิดการตัดทอน
OpenClaw สามารถฉีดข้อความเตือน system-prompt แบบกระชับได้; ควบคุมสิ่งนี้ด้วย
agents.defaults.bootstrapPromptTruncationWarning (off, once, always;
ค่าเริ่มต้น: once) จำนวนดิบ/ที่ฉีดแบบละเอียดจะยังอยู่ใน diagnostics เช่น
/context, /status, doctor และ logs
session ของ sub-agent จะฉีดเฉพาะ AGENTS.md และ TOOLS.md (ไฟล์ bootstrap อื่น
ถูกกรองออกเพื่อให้บริบทของ sub-agent เล็กลง)
hook ภายในสามารถ intercept ขั้นตอนนี้ผ่าน agent:bootstrap เพื่อ mutate หรือ replace
ไฟล์ bootstrap ที่ฉีดเข้าไป (เช่น สลับ SOUL.md เป็น persona ทางเลือก)
หากคุณต้องการทำให้ agent ฟังดูทั่วไปน้อยลง ให้เริ่มที่ คู่มือบุคลิกภาพ SOUL.md
หากต้องการตรวจสอบว่าไฟล์ที่ฉีดแต่ละไฟล์มีส่วนร่วมมากเท่าใด (raw vs injected, truncation รวมถึง overhead ของ tool schema) ให้ใช้ /context list หรือ /context detail ดู Context
การจัดการเวลา
system prompt มีส่วน วันที่และเวลาปัจจุบัน โดยเฉพาะเมื่อทราบ เขตเวลาของผู้ใช้ เพื่อให้ prompt เสถียรต่อแคช ตอนนี้จึงรวมเฉพาะ เขตเวลา (ไม่มีนาฬิกาหรือรูปแบบเวลาแบบไดนามิก)
ใช้ session_status เมื่อ agent ต้องการเวลาปัจจุบัน; status card
มีบรรทัด timestamp เครื่องมือเดียวกันสามารถตั้งค่า override โมเดลต่อ session
แบบเลือกได้ (model=default จะล้างค่า)
กำหนดค่าด้วย:
agents.defaults.userTimezoneagents.defaults.timeFormat(auto|12|24)
ดูรายละเอียดพฤติกรรมทั้งหมดที่ วันที่และเวลา
Skills
เมื่อมี skills ที่เข้าเกณฑ์ OpenClaw จะฉีด รายการ skills ที่พร้อมใช้งาน แบบกะทัดรัด
(formatSkillsForPrompt) ซึ่งมี path ไฟล์ สำหรับแต่ละ skill
prompt สั่งให้โมเดลใช้ read เพื่อโหลด SKILL.md ที่ตำแหน่งที่ระบุ
(workspace, managed หรือ bundled) หากไม่มี skills ที่เข้าเกณฑ์
ส่วน Skills จะถูกละเว้น
คุณสมบัติที่เข้าเกณฑ์รวมถึง gate metadata ของ skill, การตรวจ runtime environment/config,
และ allowlist skill ของ agent ที่มีผลเมื่อกำหนดค่า agents.defaults.skills หรือ
agents.list[].skills
skills ที่ bundled มากับ Plugin จะเข้าเกณฑ์เฉพาะเมื่อ Plugin เจ้าของเปิดใช้งานอยู่ สิ่งนี้ช่วยให้ Plugin เครื่องมือเปิดเผยคู่มือการปฏิบัติงานที่ลึกขึ้นได้โดยไม่ต้องฝัง คำแนะนำทั้งหมดนั้นลงในคำอธิบายเครื่องมือทุกครั้งโดยตรง
<available_skills>
<skill>
<name>...</name>
<description>...</description>
<location>...</location>
</skill>
</available_skills>
สิ่งนี้ทำให้ prompt พื้นฐานมีขนาดเล็กพร้อมยังคงเปิดใช้การใช้ skill แบบตรงเป้าหมายได้
งบประมาณรายการ Skills เป็นของระบบย่อย Skills:
- ค่าเริ่มต้นส่วนกลาง:
skills.limits.maxSkillsPromptChars - การแทนที่ราย agent:
agents.list[].skillsLimits.maxSkillsPromptChars
ข้อความตัดตอนของรันไทม์แบบจำกัดทั่วไปใช้พื้นผิวอีกแบบหนึ่ง:
agents.defaults.contextLimits.*agents.list[].contextLimits.*
การแยกนี้ทำให้การกำหนดขนาด Skills แยกจากการกำหนดขนาดการอ่าน/การฉีดข้อมูลของรันไทม์ เช่น memory_get, ผลลัพธ์เครื่องมือแบบสด และการรีเฟรช AGENTS.md หลัง Compaction
เอกสารประกอบ
พรอมป์ระบบมีส่วน เอกสารประกอบ เมื่อมีเอกสารในเครื่อง ส่วนนี้จะชี้ไปยังไดเรกทอรีเอกสาร OpenClaw ในเครื่อง (docs/ ใน Git checkout หรือเอกสารแพ็กเกจ npm ที่รวมมา) หากไม่มีเอกสารในเครื่อง ระบบจะถอยกลับไปใช้ https://docs.openclaw.ai
ส่วนเดียวกันนี้ยังรวมตำแหน่งซอร์สของ OpenClaw ด้วย Git checkouts จะแสดงรากซอร์สในเครื่องเพื่อให้ agent ตรวจสอบโค้ดได้โดยตรง การติดตั้งจากแพ็กเกจจะรวม URL ซอร์ส GitHub และบอกให้ agent ตรวจสอบซอร์สที่นั่นเมื่อเอกสารไม่ครบถ้วนหรือล้าสมัย พรอมป์ยังระบุถึงมิเรอร์เอกสารสาธารณะ, Discord ชุมชน และ ClawHub (https://clawhub.ai) สำหรับการค้นพบ Skills โดยบอกโมเดลให้ปรึกษาเอกสารก่อนสำหรับพฤติกรรม คำสั่ง การกำหนดค่า หรือสถาปัตยกรรมของ OpenClaw และให้รัน openclaw status เองเมื่อทำได้ (ถามผู้ใช้เฉพาะเมื่อไม่มีสิทธิ์เข้าถึง) สำหรับการกำหนดค่าโดยเฉพาะ จะชี้ agent ไปยังการกระทำเครื่องมือ gateway ชื่อ config.schema.lookup เพื่อดูเอกสารและข้อจำกัดระดับฟิลด์ที่แม่นยำ จากนั้นไปที่ docs/gateway/configuration.md และ docs/gateway/configuration-reference.md เพื่อดูคำแนะนำที่กว้างขึ้น