- Các công cụ OpenClaw không được chèn trực tiếp, nhưng một backend có
bundleMcp: truecó thể nhận các công cụ Gateway thông qua cầu nối MCP loopback. - Truyền trực tuyến JSONL cho các CLI hỗ trợ định dạng này.
- Có hỗ trợ phiên, vì vậy các lượt tiếp theo vẫn duy trì được tính nhất quán.
- Hình ảnh được chuyển tiếp nếu CLI chấp nhận đường dẫn hình ảnh.
Bắt đầu nhanh
Plugin Anthropic đi kèm đăng ký một backendclaude-cli mặc định, vì vậy backend này hoạt động mà không cần cấu hình ngoài việc đã cài đặt và đăng nhập Claude Code:
main là mã định danh tác nhân mặc định khi không cấu hình danh sách tác nhân rõ ràng; nếu không, hãy thay bằng mã định danh tác nhân của bạn.
Nếu Gateway chạy dưới launchd/systemd với PATH tối thiểu, hãy chỉ định rõ tệp nhị phân:
agents.defaults.cliBackends.
Sử dụng làm phương án dự phòng
Thêm backend CLI vào danh sách dự phòng để backend này chỉ chạy khi các mô hình chính thất bại:agents.defaults.modelPolicy.allow. Chỉ thêm mô hình backend CLI vào chính sách đó khi người dùng cũng cần có khả năng chọn trực tiếp mô hình này thông qua /model, ghi đè phiên hoặc --model. agents.defaults.models chỉ quản lý bí danh, tham số và siêu dữ liệu theo từng mô hình.
Cấu hình
Tất cả backend CLI nằm dướiagents.defaults.cliBackends, được định danh bằng mã nhà cung cấp (ví dụ: claude-cli, my-cli). Mã nhà cung cấp trở thành phần bên trái của tham chiếu mô hình: <provider>/<model>.
Cách thức hoạt động
- Chọn một backend theo tiền tố nhà cung cấp (
claude-cli/...). - Tạo lời nhắc hệ thống bằng cùng lời nhắc OpenClaw và ngữ cảnh không gian làm việc.
- Thực thi CLI với mã phiên (nếu được hỗ trợ) để duy trì tính nhất quán của lịch sử. Backend
claude-cliđi kèm duy trì một tiến trình stdio Claude hoạt động cho mỗi phiên OpenClaw và gửi các lượt tiếp theo qua stdin stream-json. - Phân tích đầu ra (JSON hoặc văn bản thuần) và trả về văn bản cuối cùng.
- Duy trì mã phiên theo từng backend để các lượt tiếp theo tái sử dụng cùng một phiên CLI.
Thời gian chờ và công việc chạy dài
Các backend CLI có hai giới hạn độc lập:agents.defaults.timeoutSecondsgiới hạn toàn bộ lượt tác nhân. Các lượt Gateway thông thường kế thừa giá trị mặc định 48 giờ;0đặt ngân sách lượt thành không giới hạn. Một giá trị ghi đè đã lưu, chẳng hạn600, sẽ thay thế giá trị mặc định đó.- Bộ giám sát không có đầu ra của CLI dừng một tiến trình con nếu tiến trình đó liên tục im lặng. Bộ giám sát sử dụng các hồ sơ mới/tiếp tục riêng biệt dưới
agents.defaults.cliBackends.<id>.reliability.watchdogvà vẫn hoạt động ngay cả khi ngân sách tổng thể của lượt là không giới hạn.
openclaw agent cũng có thời hạn yêu cầu riêng. Giá trị dự phòng mặc định 600 giây của lệnh này áp dụng cho lần gọi lệnh đó, không áp dụng cho các lượt Gateway thông thường; xem openclaw agent.
Chi tiết riêng của Claude CLI
Backendclaude-cli đi kèm ưu tiên trình phân giải kỹ năng gốc của Claude Code. Khi ảnh chụp nhanh kỹ năng hiện tại có ít nhất một kỹ năng được chọn với đường dẫn đã hiện thực hóa, OpenClaw chuyển một plugin Claude Code tạm thời qua --plugin-dir và bỏ danh mục kỹ năng OpenClaw trùng lặp khỏi lời nhắc hệ thống được nối thêm. Khi không có kỹ năng plugin đã hiện thực hóa, OpenClaw giữ lại danh mục lời nhắc làm phương án dự phòng. Các giá trị ghi đè biến môi trường/khóa API của kỹ năng vẫn áp dụng cho môi trường tiến trình con trong lần chạy.
Claude CLI có chế độ quyền không tương tác riêng; OpenClaw ánh xạ chế độ đó sang chính sách thực thi hiện có thay vì thêm cấu hình riêng cho Claude. Đối với các phiên Claude trực tiếp do OpenClaw quản lý, chính sách thực thi có hiệu lực là nguồn có thẩm quyền: YOLO (tools.exec.security: "full" và tools.exec.ask: "off") thường khởi chạy Claude với --permission-mode bypassPermissions, còn chính sách hạn chế sẽ khởi chạy với --permission-mode default. Các Gateway chạy bằng root cũng dùng default vì Claude Code từ chối chế độ bỏ qua đối với root; OpenClaw vẫn trả lời các yêu cầu điều khiển công cụ stdio của Claude theo chính sách thực thi đã cấu hình. Các thiết lập agents.list[].tools.exec theo từng tác nhân ghi đè tools.exec toàn cục cho tác nhân đó. Các đối số backend thô vẫn có thể bao gồm --permission-mode, nhưng các lần khởi chạy Claude trực tiếp sẽ chuẩn hóa cờ đó để khớp với chính sách có hiệu lực và giới hạn của máy chủ.
Backend này cũng ánh xạ các mức /think của OpenClaw sang cờ --effort gốc của Claude Code: minimal/low -> low, medium -> medium, còn high/xhigh/max được chuyển qua trực tiếp. Điều này duy trì 5 mức nỗ lực Fable được hỗ trợ giống nhau cho Claude CLI dựa trên gói đăng ký và các tuyến dùng khóa API. adaptive xóa các cờ --effort đã cấu hình và không cung cấp cờ thay thế, vì vậy Claude Code xác định mức nỗ lực có hiệu lực từ môi trường, thiết lập và giá trị mặc định của mô hình. Các backend CLI khác cần plugin sở hữu chúng khai báo một trình ánh xạ argv tương đương trước khi /think ảnh hưởng đến CLI được khởi tạo.
Trước khi OpenClaw có thể dùng claude-cli, chính Claude Code phải được đăng nhập trên cùng máy chủ:
agents.defaults.cliBackends.claude-cli.command khi tệp nhị phân claude chưa có trên PATH.
Phiên
- Nếu CLI hỗ trợ phiên, hãy đặt
sessionArg(ví dụ:--session-id), hoặcsessionArgs(phần giữ chỗ{sessionId}) khi mã cần xuất hiện trong nhiều cờ. - Nếu CLI dùng một lệnh con tiếp tục với các cờ khác, hãy đặt
resumeArgs(thay thếargskhi tiếp tục) và tùy chọnresumeOutputcho các lần tiếp tục không dùng JSON. sessionMode:always: luôn gửi một mã phiên (UUID mới nếu chưa lưu mã nào).existing: chỉ gửi mã phiên nếu trước đó đã lưu một mã.none: không bao giờ gửi mã phiên.
claude-climặc định làliveSession: "claude-stdio",output: "jsonl"vàinput: "stdin", vì vậy các lượt tiếp theo tái sử dụng tiến trình Claude trực tiếp khi tiến trình đó còn hoạt động, kể cả với các cấu hình tùy chỉnh bỏ qua trường vận chuyển. Nếu Gateway khởi động lại hoặc tiến trình nhàn rỗi thoát, OpenClaw sẽ tiếp tục từ mã phiên Claude đã lưu. Mã phiên đã lưu được xác minh dựa trên một bản chép lời dự án có thể đọc trước khi tiếp tục; nếu thiếu bản chép lời, liên kết sẽ bị xóa (được ghi nhật ký làreason=transcript-missing) thay vì âm thầm bắt đầu một phiên mới dưới--resume.- Các phiên Claude trực tiếp duy trì giới hạn bảo vệ đầu ra JSONL: 8 MiB và 20,000 dòng JSONL thô cho mỗi lượt.
- Các phiên CLI đã lưu là tính liên tục do nhà cung cấp sở hữu. Tự động đặt lại bị tắt theo mặc định;
/resetvà các chính sáchsession.resettheo ngày hoặc thời gian nhàn rỗi được đặt rõ ràng vẫn ngắt các phiên này. - Các phiên CLI mới thường chỉ được gieo lại từ bản tóm tắt Compaction của OpenClaw cùng phần đuôi sau Compaction. Để khôi phục các phiên ngắn bị mất hiệu lực trước Compaction, backend có thể chọn tham gia bằng
reseedFromRawTranscriptWhenUncompacted: true. Việc gieo lại bản chép lời thô vẫn có giới hạn và chỉ áp dụng cho các trường hợp mất hiệu lực an toàn, chẳng hạn thiếu bản chép lời CLI, phần đuôi sử dụng công cụ bị mất phần liên kết, thay đổi chính sách thông báo/lời nhắc hệ thống/cwd/MCP hoặc thử lại do phiên hết hạn; thay đổi hồ sơ xác thực hoặc kỷ nguyên thông tin xác thực không bao giờ gieo lại lịch sử bản chép lời thô.
serialize: true duy trì thứ tự các lần chạy trên cùng làn (hầu hết CLI tuần tự hóa trên một làn nhà cung cấp). OpenClaw cũng ngừng tái sử dụng phiên CLI đã lưu khi danh tính xác thực được chọn thay đổi, bao gồm thay đổi mã hồ sơ xác thực, khóa API tĩnh, token tĩnh hoặc danh tính tài khoản OAuth khi CLI cung cấp danh tính đó; riêng việc luân chuyển token truy cập/làm mới OAuth không ngắt phiên. Nếu CLI không có mã tài khoản OAuth ổn định, OpenClaw để CLI đó tự thực thi các quyền tiếp tục của mình.
Phần mở đầu dự phòng từ các phiên claude-cli
Khi một lần thửclaude-cli chuyển sang ứng viên không phải CLI trong agents.defaults.model.fallbacks, OpenClaw gieo cho lần thử tiếp theo một phần mở đầu ngữ cảnh được thu thập từ bản chép lời JSONL cục bộ của Claude Code (dưới ~/.claude/projects/, được định danh theo từng không gian làm việc). Nếu không có dữ liệu gieo này, nhà cung cấp dự phòng sẽ khởi động mà không có ngữ cảnh, vì bản chép lời phiên của chính OpenClaw trống đối với các lần chạy claude-cli.
- Phần mở đầu ưu tiên bản tóm tắt
/compactmới nhất hoặc dấu mốccompact_boundary, sau đó nối thêm các lượt gần đây nhất sau ranh giới cho đến khi đạt giới hạn ký tự. Các lượt trước ranh giới bị loại bỏ vì bản tóm tắt đã đại diện cho chúng. - Các khối công cụ được hợp nhất thành các gợi ý
(tool call: name)và(tool result: …)nhỏ gọn để phản ánh trung thực ngân sách prompt; bản tóm tắt quá lớn sẽ bị cắt ngắn và gắn nhãn(truncated). - Các phương án dự phòng cùng nhà cung cấp từ
claude-clisangclaude-clidựa vào--resumeriêng của Claude và bỏ qua phần mở đầu. - Dữ liệu khởi tạo tái sử dụng quy trình xác thực đường dẫn tệp phiên Claude hiện có, nên không thể đọc các đường dẫn tùy ý.
Hình ảnh
Nếu CLI chấp nhận đường dẫn hình ảnh, hãy đặtimageArg:
imageArg được đặt, các đường dẫn đó sẽ được truyền dưới dạng đối số CLI; nếu không, OpenClaw sẽ nối đường dẫn tệp vào prompt (chèn đường dẫn), cách này hoạt động với các CLI tự động tải tệp cục bộ từ đường dẫn văn bản thuần túy.
Đầu vào và đầu ra
output: "text"(mặc định) coi stdout là phản hồi cuối cùng.output: "json"cố gắng phân tích JSON và trích xuất văn bản cùng mã định danh phiên.output: "jsonl"phân tích luồng JSONL và trích xuất thông điệp cuối cùng của tác nhân cùng các mã định danh phiên nếu có.- Đối với đầu ra JSON của Gemini CLI, OpenClaw đọc văn bản phản hồi từ
responsevà mức sử dụng từstatskhiusagebị thiếu hoặc trống. Cấu hình mặc định của Gemini CLI đi kèm sử dụngstream-json; các giá trị ghi đè--output-format jsoncũ vẫn sử dụng bộ phân tích JSON.
input: "arg"(mặc định) truyền prompt dưới dạng đối số CLI cuối cùng.input: "stdin"gửi prompt qua stdin.- Nếu prompt rất dài và
maxPromptArgCharsđược đặt, stdin sẽ được sử dụng thay thế.
Giá trị mặc định do Plugin sở hữu
Các giá trị mặc định của backend CLI là một phần của bề mặt Plugin:- Các Plugin đăng ký chúng bằng
api.registerCliBackend(...). idcủa backend trở thành tiền tố nhà cung cấp trong các tham chiếu mô hình.- Cấu hình người dùng trong
agents.defaults.cliBackends.<id>vẫn ghi đè giá trị mặc định của Plugin. - Việc dọn dẹp cấu hình riêng cho backend vẫn do Plugin sở hữu thông qua hook
normalizeConfigtùy chọn.
claude-cli và Google sở hữu google-gemini-cli. Các lượt chạy tác nhân OpenAI Codex sử dụng bộ khung app-server của Codex thông qua openai/*; OpenClaw không còn đăng ký backend codex-cli đi kèm.
Plugin Anthropic đi kèm đăng ký cho claude-cli:
Plugin Google đi kèm đăng ký cho
google-gemini-cli:
Điều kiện tiên quyết: Gemini CLI cục bộ phải được cài đặt và có trên
PATH dưới tên gemini (brew install gemini-cli hoặc npm install -g @google/gemini-cli).
Ghi chú về đầu ra của Gemini CLI:
- Bộ phân tích
stream-jsonmặc định đọc các sự kiệnmessagecủa trợ lý, các sự kiện công cụ, mức sử dụngresultcuối cùng và các sự kiện lỗi nghiêm trọng của Gemini. - Nếu bạn ghi đè các đối số Gemini thành
--output-format json, OpenClaw sẽ chuẩn hóa backend đó trở lạioutput: "json"và đọc văn bản phản hồi từ trườngresponsecủa JSON. - Mức sử dụng dự phòng về
statskhiusagekhông tồn tại hoặc trống;stats.cachedđược chuẩn hóa thànhcacheReadcủa OpenClaw, và nếu thiếustats.input, số token đầu vào được suy ra từstats.input_tokens - stats.cached.
command tuyệt đối).
Lớp phủ biến đổi văn bản
Các Plugin cần những shim tương thích nhỏ cho prompt/thông điệp có thể khai báo phép biến đổi văn bản hai chiều mà không cần thay thế nhà cung cấp hoặc backend CLI:input viết lại prompt hệ thống và prompt người dùng được truyền cho CLI. output viết lại văn bản trợ lý được truyền theo luồng và văn bản cuối cùng đã phân tích trước khi OpenClaw xử lý các dấu kiểm soát riêng và phân phối tới kênh; đối với các lệnh gọi mô hình dựa trên nhà cung cấp, nó cũng khôi phục các giá trị chuỗi bên trong đối số lệnh gọi công cụ có cấu trúc sau khi sửa luồng và trước khi thực thi công cụ. Các mảnh JSON thô của nhà cung cấp được giữ nguyên; thành phần sử dụng nên dùng payload từng phần, kết thúc hoặc kết quả có cấu trúc.
Đối với các CLI phát ra sự kiện JSONL riêng của nhà cung cấp, hãy đặt jsonlDialect trong cấu hình của backend đó: claude-stream-json cho các luồng tương thích với Claude Code, gemini-stream-json cho các sự kiện stream-json của Gemini CLI.
Quyền sở hữu Compaction gốc
Một số backend CLI chạy tác nhân tự Compaction bản ghi hội thoại của mình, vì vậy OpenClaw không được chạy trình tóm tắt bảo vệ trên chúng — làm vậy sẽ xung đột với quá trình Compaction riêng của backend và có thể khiến lượt chạy thất bại hoàn toàn.claude-cli không có endpoint bộ khung (Claude Code thực hiện Compaction nội bộ), vì vậy nó khai báo ownsNativeCompaction: true và đường dẫn Compaction của OpenClaw trả về mục nhập phiên mà không thay đổi. OpenClaw truyền ngân sách ngữ cảnh hiệu dụng của lượt chạy qua CLAUDE_CODE_AUTO_COMPACT_WINDOW được Claude Code ghi lại, giúp quá trình tự động Compaction gốc phù hợp với các giới hạn contextTokens của Anthropic đã cấu hình. Thay vào đó, các phiên dùng bộ khung gốc như Codex vẫn được định tuyến đến endpoint Compaction của bộ khung tương ứng.
ownsNativeCompaction cho backend thực sự sở hữu quá trình Compaction: backend đó phải giới hạn bản ghi hội thoại của mình một cách đáng tin cậy gần cửa sổ ngữ cảnh và duy trì phiên có thể tiếp tục (ví dụ: --resume / --session-id), nếu không phiên bị trì hoãn có thể vẫn vượt ngân sách.
Lớp phủ MCP đi kèm
Các backend CLI không trực tiếp nhận lệnh gọi công cụ OpenClaw, nhưng backend có thể chọn tham gia lớp phủ cấu hình MCP được tạo bằngbundleMcp: true. Hành vi đi kèm hiện tại:
claude-cli: tệp cấu hình MCP nghiêm ngặt được tạo.google-gemini-cli: tệp cài đặt hệ thống Gemini được tạo.
- khởi chạy máy chủ MCP HTTP loopback, cung cấp các công cụ Gateway cho tiến trình CLI, được xác thực bằng quyền cấp ngữ cảnh theo từng lượt chạy (
OPENCLAW_MCP_TOKEN) chỉ hoạt động cho lần thử thực thi hiện tại; - ràng buộc quyền truy cập công cụ với ngữ cảnh phiên, tài khoản và kênh do Gateway chọn thay vì tin tưởng các header của tiến trình con;
- tải các máy chủ MCP đi kèm đã bật cho workspace hiện tại và hợp nhất chúng với mọi cấu hình/hình dạng cài đặt MCP hiện có của backend;
- viết lại cấu hình khởi chạy bằng chế độ tích hợp do backend sở hữu từ Plugin sở hữu backend đó.
Giới hạn lịch sử gieo lại
Khi một phiên CLI mới được khởi tạo từ bản ghi OpenClaw trước đó (ví dụ: sau khi thử lạisession_expired), khối <conversation_history> được kết xuất sẽ bị giới hạn để tránh lời nhắc khởi tạo lại tăng kích thước quá mức. Giá trị mặc định là 12.288 ký tự (khoảng 3.000 token).
Thay vào đó, các backend Claude CLI điều chỉnh giới hạn này theo cửa sổ ngữ cảnh Claude đã phân giải: cửa sổ ngữ cảnh lớn hơn sẽ nhận được phần lịch sử trước đó lớn hơn, tối đa đến một mức trần cố định; các backend CLI khác vẫn giữ giá trị mặc định thận trọng. Giới hạn này chỉ chi phối khối lịch sử trước đó trong lời nhắc khởi tạo lại.
Hạn chế
- Không có lệnh gọi công cụ OpenClaw trực tiếp: OpenClaw không chèn lệnh gọi công cụ vào giao thức backend CLI. Các backend chỉ thấy công cụ Gateway khi chúng chọn sử dụng
bundleMcp: true. - Khả năng truyền phát phụ thuộc vào backend: một số backend truyền phát JSONL, trong khi các backend khác lưu vào bộ đệm cho đến khi thoát.
- Đầu ra có cấu trúc phụ thuộc vào định dạng JSON riêng của CLI.