---
read_when:
    - คุณต้องการเข้าใจว่าเอเจนต์มีเครื่องมือเซสชันอะไรบ้าง
    - คุณต้องการกำหนดค่าการเข้าถึงข้ามเซสชันหรือการสร้างเอเจนต์ย่อย
    - คุณต้องการตรวจสอบสถานะของ sub-agent ที่ถูกสร้างขึ้น
summary: เครื่องมือเอเจนต์สำหรับสถานะข้ามเซสชัน การเรียกคืน การส่งข้อความ และการประสานงานซับเอเจนต์
title: เครื่องมือเซสชัน
x-i18n:
    generated_at: "2026-06-28T00:12:57Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: ffc7edf68e4510ea6a5fe93238be32e9d7eacf8e7b49e58f63536c14bbe2da80
    source_path: concepts/session-tool.md
    workflow: 16
---

OpenClaw มอบเครื่องมือให้เอเจนต์ทำงานข้ามเซสชัน ตรวจสอบสถานะ และ
ประสานงานเอเจนต์ย่อย

## เครื่องมือที่ใช้ได้

| เครื่องมือ | สิ่งที่ทำ |
| ------------------ | --------------------------------------------------------------------------- |
| `sessions_list` | แสดงรายการเซสชันพร้อมตัวกรองที่เลือกได้ (kind, label, agent, recency, preview) |
| `sessions_history` | อ่านทรานสคริปต์ของเซสชันที่ระบุ |
| `sessions_send` | ส่งข้อความไปยังเซสชันอื่น และเลือกได้ว่าจะรอหรือไม่ |
| `sessions_spawn` | สร้างเซสชันเอเจนต์ย่อยแบบแยกสำหรับงานเบื้องหลัง |
| `sessions_yield` | จบเทิร์นปัจจุบันและรอผลลัพธ์ติดตามจากเอเจนต์ย่อย |
| `subagents` | แสดงรายการสถานะเอเจนต์ย่อยที่สร้างจากเซสชันนี้ |
| `session_status` | แสดงการ์ดแบบ `/status` และเลือกตั้งค่าการ override โมเดลรายเซสชันได้ |

เครื่องมือเหล่านี้ยังอยู่ภายใต้โปรไฟล์เครื่องมือที่ใช้งานอยู่และนโยบายอนุญาต/ปฏิเสธ
`tools.profile: "coding"` รวมชุดประสานงานเซสชันครบถ้วน
รวมถึง `sessions_spawn`, `sessions_yield` และ `subagents`
`tools.profile: "messaging"` รวมเครื่องมือรับส่งข้อความข้ามเซสชัน
(`sessions_list`, `sessions_history`, `sessions_send`, `session_status`) แต่
ไม่รวมการสร้างเอเจนต์ย่อย หากต้องการคงโปรไฟล์การรับส่งข้อความไว้และยัง
อนุญาตการมอบหมายงานแบบ native ให้เพิ่ม:

```json5
{
  tools: {
    profile: "messaging",
    alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"],
  },
}
```

นโยบายระดับกลุ่ม ผู้ให้บริการ sandbox และรายเอเจนต์ยังสามารถนำเครื่องมือเหล่านั้นออกได้
หลังขั้นตอนโปรไฟล์ ใช้ `/tools` จากเซสชันที่ได้รับผลกระทบเพื่อตรวจสอบ
รายการเครื่องมือที่มีผลจริง

## การแสดงรายการและอ่านเซสชัน

`sessions_list` คืนค่าเซสชันพร้อม key, agentId, kind, channel, model,
จำนวนโทเค็น และ timestamp กรองตาม kind (`main`, `group`, `cron`, `hook`,
`node`), `label` แบบตรงตัว, `agentId` แบบตรงตัว, ข้อความค้นหา หรือความใหม่
(`activeMinutes`) ได้ เมื่อต้องการคัดแยกแบบกล่องจดหมาย ยังขอ
หัวข้อที่อนุมานตามขอบเขตการมองเห็น ตัวอย่างข้อความล่าสุด หรือข้อความล่าสุดแบบจำกัดจำนวน
ในแต่ละแถวได้ด้วย หัวข้อและตัวอย่างที่อนุมานจะถูกสร้างเฉพาะสำหรับเซสชัน
ที่ผู้เรียกมองเห็นได้อยู่แล้วภายใต้นโยบายการมองเห็นเครื่องมือเซสชันที่ตั้งค่าไว้ ดังนั้น
เซสชันที่ไม่เกี่ยวข้องจะยังถูกซ่อนอยู่ เมื่อการมองเห็นถูกจำกัด `sessions_list`
จะคืน metadata `visibility` แบบเลือกได้ซึ่งแสดงโหมดที่มีผลจริงและคำเตือนว่า
ผลลัพธ์อาจถูกจำกัดตามขอบเขต

`sessions_history` ดึงทรานสคริปต์การสนทนาสำหรับเซสชันที่ระบุ
โดยค่าเริ่มต้น ผลลัพธ์จากเครื่องมือจะถูกตัดออก -- ส่ง `includeTools: true` เพื่อดูรายการเหล่านั้น
ใช้ `limit` สำหรับส่วนท้ายล่าสุดแบบจำกัด ส่ง `offset: 0` เมื่อต้องการ
metadata การแบ่งหน้า จากนั้นส่งค่า `nextOffset` ที่คืนมาเพื่อไล่หน้าย้อนกลับ
ผ่านหน้าต่างทรานสคริปต์ OpenClaw ที่เก่ากว่าโดยไม่ต้องอ่านไฟล์ทรานสคริปต์ดิบ
หน้าที่ระบุ offset อย่างชัดเจนจะไม่รวมการนำเข้า fallback จาก CLI ภายนอก ให้ใช้
มุมมองส่วนท้ายล่าสุดค่าเริ่มต้นเมื่อต้องการประวัติการแสดงผลที่รวมกันนั้น
มุมมองที่คืนมาถูกจำกัดขอบเขตและกรองเพื่อความปลอดภัยโดยตั้งใจ:

- ข้อความของ assistant จะถูกทำให้เป็นมาตรฐานก่อนเรียกคืน:
  - แท็ก thinking จะถูกลบออก
  - บล็อกโครง scaffolding `<relevant-memories>` / `<relevant_memories>` จะถูกลบออก
  - บล็อก payload XML ของการเรียกเครื่องมือแบบข้อความล้วน เช่น `<tool_call>...</tool_call>`,
    `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>` และ
    `<function_calls>...</function_calls>` จะถูกลบออก รวมถึง payload ที่ถูกตัด
    ซึ่งปิดไม่สมบูรณ์
  - โครง scaffolding ของการเรียกเครื่องมือ/ผลลัพธ์ที่ถูกลดระดับ เช่น `[Tool Call: ...]`,
    `[Tool Result ...]` และ `[Historical context ...]` จะถูกลบออก
  - โทเค็นควบคุมโมเดลที่รั่วไหล เช่น `<|assistant|>`, โทเค็น ASCII
    `<|...|>` อื่น ๆ และตัวแปรแบบเต็มความกว้าง `<｜...｜>` จะถูกลบออก
  - XML การเรียกเครื่องมือ MiniMax ที่ผิดรูป เช่น `<invoke ...>` /
    `</minimax:tool_call>` จะถูกลบออก
- ข้อความที่ดูเหมือนข้อมูลประจำตัว/โทเค็นจะถูกปกปิดก่อนคืนค่า
- บล็อกข้อความยาวจะถูกตัดให้สั้นลง
- ประวัติที่ใหญ่มากอาจทิ้งแถวเก่ากว่า หรือแทนที่แถวที่ใหญ่เกินด้วย
  `[sessions_history omitted: message too large]`
- เครื่องมือรายงาน flag สรุป เช่น `truncated`, `droppedMessages`,
  `contentTruncated`, `contentRedacted`, `bytes` และ metadata การแบ่งหน้า

เครื่องมือทั้งสองรับได้ทั้ง **session key** (เช่น `"main"`) หรือ **session ID**
จากการเรียกรายการก่อนหน้า

หากต้องการทรานสคริปต์แบบตรงทุก byte ให้ตรวจสอบไฟล์ทรานสคริปต์บนดิสก์
แทนการใช้ `sessions_history` เป็น dump ดิบ

## การส่งข้อความข้ามเซสชัน

`sessions_send` ส่งข้อความไปยังเซสชันอื่นและเลือกได้ว่าจะรอ
การตอบกลับหรือไม่:

- **ส่งแล้วไม่รอ:** ตั้งค่า `timeoutSeconds: 0` เพื่อเข้าคิวและคืนค่า
  ทันที
- **รอคำตอบ:** ตั้ง timeout แล้วรับคำตอบแบบ inline

เซสชันแชทที่ผูกกับเธรด เช่น key ของ Slack หรือ Discord ที่ลงท้ายด้วย
`:thread:<id>` ไม่ใช่เป้าหมาย `sessions_send` ที่ถูกต้อง ใช้ key ของเซสชันช่องทางหลัก
สำหรับการประสานงานระหว่างเอเจนต์ เพื่อไม่ให้ข้อความที่ route ผ่านเครื่องมือปรากฏ
ในเธรดที่กำลังเปิดให้มนุษย์เห็นอยู่

ข้อความและคำตอบติดตามแบบ A2A จะถูกทำเครื่องหมายเป็นข้อมูลระหว่างเซสชันใน
prompt ฝั่งรับ (`[Inter-session message ... isUser=false]`) และใน provenance ของทรานสคริปต์
เอเจนต์ฝั่งรับควรปฏิบัติกับสิ่งเหล่านี้เป็นข้อมูลที่ route ผ่านเครื่องมือ ไม่ใช่
คำสั่งโดยตรงที่ผู้ใช้ปลายทางเป็นผู้เขียน

หลังจากเป้าหมายตอบกลับ OpenClaw สามารถรัน **ลูปตอบกลับ** ซึ่ง
เอเจนต์จะสลับกันส่งข้อความ (สูงสุด `session.agentToAgent.maxPingPongTurns`, ช่วง
0-20, ค่าเริ่มต้น 5) เอเจนต์เป้าหมายสามารถตอบ
`REPLY_SKIP` เพื่อหยุดก่อนเวลาได้

## ตัวช่วยสถานะและการประสานงาน

`session_status` เป็นเครื่องมือเทียบเท่า `/status` แบบเบาสำหรับเซสชันปัจจุบัน
หรือเซสชันอื่นที่มองเห็นได้ โดยรายงานการใช้งาน เวลา สถานะโมเดล/runtime และ
บริบทงานเบื้องหลังที่เชื่อมโยงไว้เมื่อมี เช่นเดียวกับ `/status` เครื่องมือนี้สามารถเติม
ตัวนับโทเค็น/cache ที่มีข้อมูลบางส่วนจากรายการการใช้งานทรานสคริปต์ล่าสุดได้ และ
`model=default` จะล้าง override รายเซสชัน ใช้ `sessionKey="current"` สำหรับ
เซสชันปัจจุบันของผู้เรียก; label ของไคลเอนต์ที่มองเห็นได้ เช่น `openclaw-tui` ไม่ใช่
session key

เมื่อมี metadata การ route อยู่ `session_status` จะรวมบล็อก JSON
`Route context` ที่มองเห็นได้และฟิลด์ `details` แบบมีโครงสร้างที่สอดคล้องกันด้วย
ฟิลด์เหล่านี้ช่วยแยกความต่างระหว่าง session key กับ route ที่กำลังจัดการ
การรันสดในขณะนั้น:

- `origin` คือที่ที่เซสชันถูกสร้าง หรือผู้ให้บริการที่อนุมานจาก
  คำนำหน้า session-key ที่ส่งมอบได้เมื่อสถานะเก่าขาด metadata ต้นทางที่บันทึกไว้
- `active` คือ route การรันสดปัจจุบัน จะถูกรายงานเฉพาะสำหรับเซสชันสดหรือ
  เซสชันปัจจุบันที่กำลังถูกจัดการอยู่ตอนนี้
- `deliveryContext` คือ route การส่งมอบที่บันทึกถาวรไว้บนเซสชัน
  ซึ่ง OpenClaw สามารถนำกลับมาใช้สำหรับการส่งมอบภายหลังได้แม้เมื่อพื้นผิวที่ active
  แตกต่างกัน

`sessions_yield` ตั้งใจจบเทิร์นปัจจุบันเพื่อให้ข้อความถัดไปเป็น
เหตุการณ์ติดตามที่คุณกำลังรอ ใช้หลังจากสร้างเอเจนต์ย่อยเมื่อต้องการให้
ผลลัพธ์การเสร็จสิ้นมาถึงเป็นข้อความถัดไป แทนการสร้าง
ลูป polling

`subagents` เป็นตัวช่วยการมองเห็นสำหรับเอเจนต์ย่อย OpenClaw
ที่สร้างไว้แล้ว รองรับ `action: "list"` เพื่อตรวจสอบการรันที่ active/ล่าสุด

## การสร้างเอเจนต์ย่อย

`sessions_spawn` สร้างเซสชันแบบแยกสำหรับงานเบื้องหลังตามค่าเริ่มต้น
เครื่องมือนี้ไม่บล็อกเสมอ -- คืนค่าทันทีพร้อม `runId` และ
`childSessionKey` การรันเอเจนต์ย่อยแบบ native จะได้รับงานที่มอบหมายใน
ข้อความ `[Subagent Task]` แรกที่มองเห็นได้ของเซสชันลูก ขณะที่ system
prompt มีเฉพาะกฎ runtime ของเอเจนต์ย่อยและบริบทการ route

ตัวเลือกหลัก:

- `runtime: "subagent"` (ค่าเริ่มต้น) หรือ `"acp"` สำหรับเอเจนต์ harness ภายนอก
- override `model` และ `thinking` สำหรับเซสชันลูก
- `thread: true` เพื่อผูกการสร้างกับเธรดแชท (Discord, Slack ฯลฯ)
- `sandbox: "require"` เพื่อบังคับใช้ sandboxing กับเซสชันลูก
- `context: "fork"` สำหรับเอเจนต์ย่อยแบบ native เมื่อเซสชันลูกต้องการ
  ทรานสคริปต์ของผู้ร้องขอปัจจุบัน; เว้นไว้หรือใช้ `context: "isolated"` สำหรับเซสชันลูกที่สะอาด
  เอเจนต์ย่อยแบบ native ที่ผูกกับเธรดจะใช้ค่าเริ่มต้นเป็น `context: "fork"` เว้นแต่
  `threadBindings.defaultSpawnContext` จะระบุเป็นอย่างอื่น

เอเจนต์ย่อยปลายทางค่าเริ่มต้นจะไม่ได้รับเครื่องมือเซสชัน เมื่อ
`maxSpawnDepth >= 2` เอเจนต์ย่อยตัวประสานงานที่ depth-1 จะได้รับ
`sessions_spawn`, `subagents`, `sessions_list` และ `sessions_history` เพิ่มเติมเพื่อให้
จัดการลูกของตนเองได้ การรันปลายทางยังคงไม่ได้รับ
เครื่องมือประสานงานแบบ recursive

หลังเสร็จสิ้น ขั้นตอนประกาศจะโพสต์ผลลัพธ์ไปยังช่องทางของผู้ร้องขอ
การส่งมอบเมื่อเสร็จสิ้นจะคงการ route ของเธรด/topic ที่ผูกไว้เมื่อมี และหาก
ต้นทางการเสร็จสิ้นระบุได้เฉพาะช่องทาง OpenClaw ยังสามารถใช้ route ที่บันทึกไว้ของ
เซสชันผู้ร้องขอ (`lastChannel` / `lastTo`) ซ้ำสำหรับการส่งมอบ
โดยตรงได้

สำหรับพฤติกรรมเฉพาะ ACP โปรดดู [เอเจนต์ ACP](/th/tools/acp-agents)

## การมองเห็น

เครื่องมือเซสชันถูกจำกัดขอบเขตเพื่อจำกัดสิ่งที่เอเจนต์มองเห็นได้:

| ระดับ | ขอบเขต |
| ------- | ---------------------------------------- |
| `self` | เฉพาะเซสชันปัจจุบัน |
| `tree` | เซสชันปัจจุบัน + เอเจนต์ย่อยที่สร้าง |
| `agent` | ทุกเซสชันสำหรับเอเจนต์นี้ |
| `all` | ทุกเซสชัน (ข้ามเอเจนต์หากตั้งค่าไว้) |

ค่าเริ่มต้นคือ `tree` เซสชันที่อยู่ใน sandbox จะถูกจำกัดไว้ที่ `tree` ไม่ว่า
การตั้งค่าจะเป็นอย่างไร

## อ่านเพิ่มเติม

- [การจัดการเซสชัน](/th/concepts/session) -- การ route, วงจรชีวิต, การบำรุงรักษา
- [เอเจนต์ ACP](/th/tools/acp-agents) -- การสร้าง harness ภายนอก
- [หลายเอเจนต์](/th/concepts/multi-agent) -- สถาปัตยกรรมหลายเอเจนต์
- [การกำหนดค่า Gateway](/th/gateway/configuration) -- knob การตั้งค่าเครื่องมือเซสชัน

## ที่เกี่ยวข้อง

- [การจัดการเซสชัน](/th/concepts/session)
- [การตัดแต่งเซสชัน](/th/concepts/session-pruning)
