Trang này được dịch từ tài liệu tiếng Anh. Lệnh, định danh và ví dụ giữ nguyên. Runtime 7.24.4 · SDK 2.6.7. Bản tiếng Anh
CLI không tương tác (ax-code run)
Trạng thái: Đang hoạt động Phạm vi: trạng thái hiện tại Xem xét lần cuối: 2026-09-22 Chủ sở hữu: người bảo trì môi trường chạy AX Code
ax-code run là điểm vào một lần, không tương tác, dành cho tác nhân lập trình AI và tập lệnh. Lệnh này gửi một
lời nhắc duy nhất, in câu trả lời cuối của trợ lý, rồi thoát — không có giao diện terminal, không có lời nhắc tương tác. Hướng dẫn này trình bày
bề mặt tùy chọn, hợp đồng đầu ra, mã thoát, và các công thức sao chép cho tập lệnh và CI.
Khởi chạy một lần chạy
Có bốn cách cung cấp lời nhắc. Chúng được ghép theo thứ tự: --prompt-file, rồi -p/--prompt, rồi thông điệp
vị trí, rồi stdin được chuyển ống.
# Positional after -- (safest; flags after -- are never consumed as options)
ax-code run --model qwen -- "Review this change"
# Explicit prompt flag
ax-code run --model qwen --prompt "Review this change"
ax-code run --model qwen -p "Review this change"
# Prompt read from a file (not an attachment)
ax-code run --model qwen --prompt-file ./prompt.txt
# Piped stdin (used as the prompt when no positional/--prompt is given)
printf 'Review this change' | ax-code run --model qwen
Khi stdin không phải TTY, nội dung của nó được nối vào lời nhắc đã ghép, nên đó là toàn bộ lời nhắc khi không có gì khác
được cung cấp. Bộ đọc stdin chờ một khoảng yên 300 ms trước khi bỏ một ống còn mở, nên hãy ghi lời nhắc
kịp thời và đóng stdin — hoặc dùng --prompt-file cho lời nhắc lớn hoặc được tạo chậm. --prompt-file - đọc
lời nhắc từ stdin một cách tường minh (lỗi cách dùng khi stdin là TTY); việc nối stdin chuyển ống ngầm không chạy lần thứ hai
cho lần gọi đó.
-f/--file đính kèm tệp vào thông điệp và không bao giờ thay thế lời nhắc; tùy chọn này lặp lại được:
ax-code run --model qwen --file README.md --file src/main.ts -- "Summarize these"
Tệp đính kèm phải nằm trong thư mục dự án: máy chủ từ chối tệp đính kèm bên ngoài thư mục đó bất kể
quy tắc quyền, nên CLI từ chối chúng ngay từ đầu bằng lỗi cách dùng. Hãy sao tệp vào dự án hoặc truyền nội dung
bằng --prompt-file. --add-dir cấp cho công cụ quyền truy cập các thư mục bổ sung nhưng không đổi quy tắc này.
Kiểu mime của tệp đính kèm được suy từ phần mở rộng: png, jpg, jpeg, gif và webp ánh xạ tới kiểu image/*
của chúng và pdf tới application/pdf, nên tệp đính kèm nhị phân tới máy chủ đúng kiểu thật thay vì text/plain.
Mọi thứ khác — kể cả tệp không có phần mở rộng được nhận ra — được gửi dưới dạng text/plain, và thư mục đính kèm được
phân loại application/x-directory.
Điều hướng lần chạy
Ba cờ điều hướng một lần chạy mà không đổi văn bản lời nhắc. Tất cả đều chỉ có dạng dài và kebab-case.
--append-system-prompt TEXT / --append-system-prompt-file PATH
Nối thêm văn bản vào lời nhắc hệ thống sau các lời nhắc hệ thống của tác nhân và môi trường — nó nối thêm và không bao giờ thay thế lời nhắc hệ thống dựng sẵn. Hai dạng loại trừ lẫn nhau. Biến thể tệp thuận tiện cho chỉ dẫn dài hơn; đúng một dòng mới ở cuối được cắt, và văn bản rỗng (hoặc tệp không đọc được) là lỗi cách dùng trước khi bất kỳ thứ gì được gửi.
ax-code run --model qwen --append-system-prompt "Answer in English only" -- "Review this change"
--disallowed-tools a,b
Tắt công cụ theo id cho lần chạy (phân tách bằng dấu phẩy, lặp lại được). Cờ được áp dụng qua cả hai cơ chế máy chủ: quy tắc từ chối
trên phiên đã tạo bao phủ các lần chạy mới, và một bản đồ công cụ theo yêu cầu cũng bao phủ các lần chạy --session/--continue
được tiếp tục. Từ chối bash cũng từ chối lệnh của công cụ monitor, vốn chạy qua cùng bộ khởi chạy shell; một lời gọi chạm
quy tắc từ chối thất bại như lỗi công cụ và được tính là một lần từ chối cho trạng thái lần chạy bị chặn. Id không xác định không phải lỗi — id công cụ MCP là động — nhưng với định dạng mặc định, mỗi id ngoài
tập công cụ dựng sẵn in một cảnh báo stderr (bị --quiet chặn).
ax-code run --model qwen --disallowed-tools bash,write -- "Audit this module without mutating anything"
--add-dir PATH
Cấp cho tác nhân quyền truy cập một thư mục bổ sung (lặp lại được): một quy tắc cho phép external_directory cho
<resolved-path>/* được thêm vào quy tắc quyền của phiên mới, bao phủ thư mục đó và mọi thứ bên dưới.
Mỗi đường dẫn phải tồn tại và là thư mục (được phân giải theo cwd của bên gọi giống --file). Quy tắc được áp dụng khi
phiên được tạo, nên dưới --session/--continue nó không thể có hiệu lực — CLI in
--add-dir applies only to new sessions trên stderr rồi tiếp tục. Nó không đổi sự bao hàm của --file: tệp đính kèm
vẫn phải nằm trong thư mục dự án. Nó bao phủ các công cụ tệp (read, glob, grep, list, edit, write); một lệnh shell
đi vào thư mục qua đường dẫn động vẫn kích hoạt lời nhắc truy cập đường dẫn chỉ dành cho tương tác,
và lần chạy không tương tác tự từ chối lời nhắc đó, nên hãy ưu tiên công cụ tệp hoặc truyền nội dung tệp một cách tường minh.
ax-code run --model qwen --add-dir ../design-docs -- "Read ../design-docs/spec.md and summarize it"
Chọn mô hình
Liệt kê các ID dùng được bằng ax-code models. Truyền giá trị provider/model thu được cho --model (-m):
ax-code models # one "provider/model" ID per line
ax-code models --json # one JSON document
ax-code models --json in một tài liệu duy nhất có dạng
{"models":[{"id":"provider/model","provider":"...","model":"...","connected":true}]}.
Các tên họ deepseek, glm và qwen phân giải về mặc định Flash của chúng, nên
ax-code run --model qwen -- "..." hoạt động mà không cần viết đầy đủ ID provider/model. Bỏ qua --model sẽ dùng
mặc định đã cấu hình; tác nhân và mô hình có hiệu lực được in ra stderr dưới dạng > Agent · model.
Định dạng đầu ra
--format nhận default (mặc định), json, jsonl hoặc ndjson (jsonl và ndjson là bí danh của json).
Mặc định (văn bản)
Định dạng mặc định chỉ in văn bản trợ lý cuối trên stdout. Mọi tiến trình, hoạt động công cụ và chẩn đoán đi tới
stderr, bắt đầu bằng tiêu đề > Agent · model · ses_... gồm id phiên, nên bên gọi nhiều lượt có thể
tiếp tục bằng --session mà không chuyển sang --format json (--quiet chặn tiêu đề). Màu ANSI bị
tắt khi stderr không phải TTY hoặc khi NO_COLOR được đặt (bất kỳ giá trị nào), nên lần chạy chuyển ống không bao giờ phát mã thoát ANSI.
Luồng JSON (--format json)
--format json in một luồng sự kiện JSON phân tách bằng dòng mới (NDJSON) — một đối tượng JSON mỗi dòng, không phải một tài liệu JSON
duy nhất. Sự kiện gồm step_start, text, tool_use, reasoning (chỉ khi có --thinking), permission_denied,
error và step_finish. Luồng luôn kết thúc bằng đúng một dòng result:
{
"type": "result",
"timestamp": 1727000000000,
"sessionID": "ses_...",
"status": "completed",
"text": "...",
"permissionDenials": 0,
"usage": { "input": 1200, "output": 80, "reasoning": 0, "cacheRead": 0, "cacheWrite": 0 }
}
status là completed, blocked hoặc error. usage chỉ mang số token — input, output, reasoning,
cacheRead, cacheWrite — và bị bỏ hoàn toàn khi các số đó không xác định; không có trường chi phí. Khi một lần chạy
thất bại trước khi gửi (cờ sai, mô hình không xác định, v.v.), định dạng luồng in một dòng trước khi thoát:
{ "type": "error", "error": { "code": "usage", "message": "..." } }
error.code là một trong các mã sau:
| Mã | Khi nào phát sinh |
|---|---|
usage |
Cờ sai hoặc mâu thuẫn, thiếu lời nhắc, hoặc --output-schema không đọc được. |
provider |
Id nhà cung cấp không xác định, hoặc nhà cung cấp đã biết nhưng chưa kết nối. |
model |
Id mô hình không xác định trên nhà cung cấp đã biết, hoặc giá trị --model không phân tích được. |
session |
Id --session thiếu hoặc bị từ chối (được kiểm tra trước khi lần chạy gửi). |
attach |
Không tới được máy chủ đã gắn, thông tin xác thực bị từ chối (401/403), hoặc không có môi trường chạy được quản lý cho --runtime. |
internal |
Mọi từ chối chưa được xử lý theo cách khác. |
Mã thoát
| Mã | Ý nghĩa |
|---|---|
| 0 | Đã hoàn tất. |
| 1 | Lỗi cách dùng, lỗi nhà cung cấp/mô hình, lỗi luồng, hoặc xác thực --output-schema thất bại. |
| 3 | Bị chặn — có ít nhất một lần từ chối quyền và không có lời gọi công cụ đột biến thành công (result.status là blocked). |
| 124 | Hết thời gian (--timeout đã trôi qua; result.status là timeout). |
| 130 | Bị hủy bởi SIGINT hoặc SIGTERM (phiên bị hủy trên máy chủ; result.status là cancelled). |
Hộp cát
--sandbox read-only|workspace-write|full-access chọn chế độ cô lập (mặc định full-access). Trong các lần chạy không tương tác,
các yêu cầu quyền bị tự từ chối và được báo dưới dạng sự kiện permission_denied, nên một lần chạy cần ghi những gì nó không
được phép sẽ báo blocked và thoát 3. Điều này cũng bao phủ tác nhân con: các yêu cầu phát sinh trong phiên con do
công cụ task tạo bị từ chối theo cùng cách, và sự kiện permission_denied của chúng mang sessionID của phiên con. Các lời gọi công cụ
bị quy tắc từ chối quyền chặn (ví dụ từ --disallowed-tools) hoặc bị hộp cát chỉ đọc cũng được tính là
lần từ chối. Các công cụ tương tác question và plan_exit luôn bị tắt trong lần chạy không tương tác, kể cả trên
phiên được tiếp tục. Chỉ dùng read-only khi không kỳ vọng đột biến; workspace-write giữ các lần ghi bên trong dự án.
Dưới --attach, cờ cũng được gửi như chính sách cô lập theo từng yêu cầu trong mọi thân lời nhắc; máy chủ áp dụng
chế độ chặt hơn giữa chế độ của chính nó và chính sách được yêu cầu, nên chỉ có thể siết chặt hơn. Cùng chính sách theo yêu cầu được gửi cho
các máy chủ thuộc sở hữu cục bộ, giữ hành vi thống nhất.
Đầu ra có cấu trúc
-o/--output-file <path> ghi văn bản trợ lý cuối vào một tệp. --output-schema <file> xác thực văn bản cuối
dưới dạng JSON đối chiếu một tệp JSON Schema; chỗ không khớp được báo là sự kiện error với result.status error và thoát
- Tệp lược đồ được kiểm tra trước khi mô hình chạy — một
lược đồ không đọc được, không phân tích được, hoặc không phải đối tượng là lỗi cách dùng trước khi bất kỳ thứ gì được gửi. Khi thành công, lược đồ đã phân tích
cũng được gửi tới mô hình như định dạng đầu ra
json_schemacủa lần chạy, và máy chủ thử lại câu trả lời không hợp lệ tới hai lần trước khi bước xác thực cuối của chính CLI chạy như chốt chặn. Đầu ra cuối là đối tượng có cấu trúc đã tuần tự hóa (một dòng JSON): đó là nội dung mà stdout,--output-filevàresult.textmang:
ax-code run --model qwen --output-schema ./answer.schema.json -- "Return a JSON object with a summary field"
Phiên và việc tiếp tục
-c/--continue— tiếp tục phiên gần nhất.-s/--session <id>— tiếp tục một phiên cụ thể theo ID.--fork— rẽ nhánh phiên trước khi tiếp tục (cần--continuehoặc--session).--show-history— in lịch sử phiên nhìn thấy được khi tiếp tục (cần--continuehoặc--session).--attach <url>— gắn vào máy chủ đang chạy sẵn thay vì khởi động máy chủ mới; kết hợp với--dirđể nhắm thư mục dự án trên máy chủ đó. Máy chủ được bảo vệ bằngAX_CODE_SERVER_PASSWORDnhận--password(hoặc cùng biến ở phía bên gọi); môi trường chạy được quản lý lấy token từAX_CODE_RUNTIME_TOKEN.--runtime— gắn vào môi trường chạy được quản lý của thư mục dự án (--dirhoặc cwd của bên gọi) đã khởi động bằngax-code runtime start, phân giải URL và token từ bản ghi môi trường chạy riêng. Khi không có môi trường chạy nào đang chạy, lần chạy thất bại trước mọi yêu cầu với mã lỗiattachvà một thông điệp nêu lệnh khởi động.--runtimevà--attachloại trừ lẫn nhau.
Công thức
Một lần
ax-code run --model qwen -- "Fix the failing test in src/parser.ts"
Giới hạn lần chạy bằng thời gian chờ
ax-code run --timeout 120 --model qwen -- "Fix the failing test in src/parser.ts"
--timeout <seconds> hủy lần chạy trên máy chủ và thoát 124 (result.status là timeout) khi lần chạy vượt
giới hạn, nên một tác nhân bị kẹt không thể giữ một việc CI mở vô thời hạn. Giới hạn bao phủ toàn bộ lần gọi — nó được
kích hoạt trước lời gọi máy chủ đầu tiên, nên ngay cả máy chủ --attach bị nuốt hoặc khởi động treo cũng kết thúc đúng hạn (trong
trường hợp sớm đó, dòng kết quả mang sessionID rỗng).
Chờ tác nhân con chạy nền
ax-code run --await-background 300 --timeout 360 --model qwen -- \
"Delegate the independent checks, then integrate their results"
--await-background <seconds> giữ lần gọi này mở cho các tiến trình con task chạy nền do phiên của nó tạo và
các lượt theo dõi của tiến trình cha được kích hoạt bởi kết quả của chúng. Tùy chọn này phải được bật rõ và bị giới hạn 3600 giây. Câu trả lời cuối và
result.text JSON đến từ lượt cha hoàn tất cuối cùng. Nếu các tiến trình con hoặc phần theo dõi của chúng không ổn định trong
giới hạn chờ, lần chạy báo lỗi và thoát 1. --timeout vẫn là giới hạn tổng thể. Các tác vụ dự án đã lên lịch
chạy trong các phiên riêng và không thuộc khoảng chờ này. Lệnh một lần này không nhận các lịch dự án đến hạn;
một backend bền vững sở hữu việc điều phối của chúng.
Phân tích luồng JSON
result=$(ax-code run --format json --model qwen -- "..." | tail -n 1)
echo "$result" | jq -r '.status'
echo "$result" | jq -r '.text'
Dòng result luôn là dòng cuối, nên tail -n 1 tách được nó ngay cả khi luồng kết thúc sớm.
Rà soát chỉ đọc
ax-code run --sandbox read-only --model qwen -- "Review this diff for bugs"
Đầu ra JSON có cấu trúc kèm lược đồ
cat > answer.schema.json <<'JSON'
{"type":"object","properties":{"summary":{"type":"string"}},"required":["summary"]}
JSON
ax-code run --model qwen --output-schema answer.schema.json --output-file answer.json \
-- "Return JSON with a one-sentence summary"
Tiếp tục một phiên
# Start a session and note the sessionID from the result line
ax-code run --format json --model qwen -- "Draft the outline" | tail -n 1
# Continue it
ax-code run --model qwen --session ses_... -- "Now write section 2"
Đính kèm một tệp
ax-code run --model qwen --file docs/spec.md -- "Summarize the attached spec"
Lệnh máy đọc được
ax-code run --format json phát một luồng sự kiện phân tách bằng dòng mới (xem luồng JSON); đây là
bề mặt --json duy nhất có phát luồng. Mọi lệnh chỉ đọc khác mang cờ --json tuân theo một hợp đồng chặt hơn:
khi thành công nó ghi đúng một tài liệu JSON ra stdout, và khi thất bại stdout vẫn trống trong khi một tài liệu
{"error":{"code","message"}} duy nhất đi tới stderr và mã thoát là 1.
Các lệnh có --json:
ax-code session list --jsonax-code models --jsonax-code providers list --jsonax-code agent list --jsonax-code mcp list --jsonax-code mcp auth list --jsonax-code stats --jsonax-code context --jsonax-code memory status --jsonax-code memory list --jsonax-code task list --json/ax-code task show <taskID> --jsonax-code schedule list --json/ax-code schedule show <taskID> --jsonax-code runtime list --json/ax-code runtime status --jsonax-code doctor --jsonax-code risk <sessionID> --jsonax-code wiki status --jsonax-code workflow list --json/ax-code workflow status <runID> --json
ax-code runtime status in tài liệu JSON của nó vô điều kiện — cờ --json được chấp nhận cho nhất quán nhưng
hành động trạng thái luôn phát JSON trên stdout.
Gọi ax-code từ một tác nhân khác
Khi bọc ax-code run từ một tập lệnh, bước CI, hoặc một tác nhân khác:
- Dùng
--format jsonvà đọc dòng cuối — bản ghiresultluôn là dòng cuối, kể cả khi luồng kết thúc sớm. - Lấy
sessionIDtừ dòng kết quả đó cho mọi lượt theo dõi; truyền lại bằng--session. - Đừng dùng
--continuetừ các bên gọi đồng thời — nó tiếp tục phiên gần nhất, vốn tranh chấp khi nhiều bên gọi cùng hoạt động; hãy truyền một id--sessiontường minh. - Truyền một
--modeltường minh để lần chạy không phụ thuộc mặc định đã cấu hình có thể đổi. - Luôn truyền
--timeoutđể một tác nhân bị kẹt không thể giữ bên gọi mở. - Đóng stdin, hoặc dùng
--prompt-file/--prompt-file -: bộ đọc ống ngầm bỏ cuộc sau một khoảng yên 300 ms và cắt cụt một ống chậm một cách âm thầm. - Đặt
NO_COLOR=1, hoặc dựa vào phát hiện không phải TTY, để lần chạy chuyển ống không bao giờ phát mã thoát ANSI. - Chạy từ thư mục dự án: thư mục nhà hoặc thư mục cha nhiều kho bị từ chối ở chế độ không tương tác. Đặt
AX_CODE_ALLOW_BROAD_DIR=1để ghi đè chốt đó. - Lỗi cách dùng không in gì trên stdout (trợ giúp và lỗi một dòng đi tới stderr), nên một lệnh gõ sai để
stdout trống với mã thoát 1. Dưới
--format json, lỗi cách dùng cũng được ghi thành một dòngerrortrên stdout. - Một tín hiệu đến khi tiến trình vẫn đang tải, trước khi lệnh
runhoạt động, kết thúc tiến trình với mã thoát 130 và không có đầu ra; khi lệnh đã hoạt động, SIGINT và SIGTERM luôn tạo đúng một dòng kết thúcresultvới trạng tháicancelled.