devkit English

Tham chiếu CLI

Mọi lệnh của devkit, lấy từ devkit <command> --help của phiên bản v1.0.0. Ở chỗ nào lệnh nhận <site> hoặc <site|lane>, lane được viết là <site>--<lane>. Flag bật sẵn theo mặc định được tắt bằng --flag=false.

Flag toàn cục

FlagÝ nghĩa
--jsonin đúng một object JSON ra stdout (xem Output JSON)
--progressbáo các bước của lane new, site clone và site setup ra stderr: … <step>, hoặc mỗi bước một dòng {"progress":"…"} khi có --json
-h, --helptrợ giúp cho bất kỳ lệnh nào
-v, --versionphiên bản

devkit completion bash|zsh|fish|powershell in ra script tự hoàn thành cho shell.

Stacks

LệnhFlagTác dụng
stack add <compose-folder>thêm một thư mục Docker Compose
stack listcác stack cùng service tìm được, vai trò, port và trạng thái
stack up <stack> [service…]docker compose up -d cho cả stack hoặc một số service
stack restart <stack> [service…]khởi động lại cả stack hoặc một số service
stack down <stack> [service…]cả stack: docker compose down (giữ volume); một số service: docker compose stop
stack logs <stack> <service>--tail N (200)log gần đây của container

Sites

LệnhFlagTác dụng
park <dir>serve mọi thư mục Laravel (có artisan) bên trong dir
link <dir>--name n (mặc định: tên thư mục)thêm một thư mục Laravel thành site
site list--all (gồm cả site đã ẩn)các site đã park và link, lane của chúng, git branch và trạng thái hiện tại
site up <site>chạy các service của stack mà site cần, tạo database, render .env, serve site, chạy các process autostart
site down <site>dừng các process của site, rồi dừng web server
site set <site>--engine artisan|caddy, --php X.Y ("": mặc định), --db name, --stack name, --copy-files a,b ("" để xoá), --submodule-groups name=path,… ("" trả về modules,extensions)đổi thiết lập của site; đổi engine sẽ dừng site và các lane của nó trước
site clone <git-url>--into dir, --name n, --branch b, --php X.Y, --no-submodules, --no-composer, --no-pnpm, --no-env, --startclone vào một thư mục đã park, rồi submodule, composer install, pnpm install, template .env và database, và với --start thì site up
site setup <site>--no-submodules, --no-composer, --no-pnpm, --no-env, --startchạy (lại) các bước thiết lập của site clone trên một site có sẵn
site hide <site>dừng site và các lane của nó, bỏ khỏi danh sách; file, database và template vẫn giữ
site unhide <site>đưa một site đã ẩn trở lại danh sách
site delete <site> --yes--trash, --drop-db, --force, --yesxoá các lane, dừng site, xoá thư mục của nó (hoặc chuyển vào Thùng rác), với --drop-db thì xoá cả database và snapshot. Từ chối với DIRTY_WORKTREE trừ khi có --force
site actions <site>các thao tác nhanh của site
site action <site> <action>chạy một thao tác: clear-log, clear-cache, publish-core hoặc thao tác riêng của site
site action-set <site> <name>--command c (php là PHP của site), --label lthêm một thao tác hoặc ghi đè thao tác mặc định
site action-rm <site> <name>xoá một thao tác (xoá bản ghi đè thì thao tác mặc định trở lại)

Templates

LệnhFlagTác dụng
template get <site>in template (tạo từ .env khi chưa lưu template nào)
template set <site> --file <path>--filelưu một template
template render <site|lane>--file pathin .env mà site up sẽ ghi vào lúc này, từ template đã lưu hoặc từ file; không ghi gì

Processes, exec và log

LệnhFlagTác dụng
proc list <site>các process với trạng thái hiện tại, port và autostart
proc start <site> [proc…]chạy process (mặc định: các process autostart)
proc stop <site> [proc…]dừng process (mặc định: mọi process đang chạy)
proc restart <site> [proc…]khởi động lại process (mặc định: mọi process đang chạy)
proc logs <site> <proc>--lines N (200)các dòng cuối trong log của một process
proc add <site> <name> --command <cmd>--command ({port} được thay thế), --port, --autostartthêm một process tuỳ chỉnh
proc set <site> <proc>--command, --port=bool, --autostart=boolsửa một process
proc rm <site> <proc>xoá một process đã dừng
proc reset <site>bỏ các tuỳ chỉnh và dò lại các process mặc định
exec <site> -- <command…>--timeout d (10m), --xdebugchạy một lệnh trong thư mục site, với PHP của site đứng đầu PATH (caddy: php chạy trong container PHP)
logs <site>--source laravel|serve|proc:<name>|container:<service> (laravel), --lines N (200)các dòng cuối trong log của site

Lanes

LệnhFlagTác dụng
lane new <site> <name>--branch b (feat/<name>), --base ref (HEAD của site), --schema-only, --no-fork-db, --starttạo một lane: worktree, submodule trên branch của chúng, vendor và node_modules dạng copy-on-write, database fork từ site
lane list [site]các lane với branch, database, URL và trạng thái hiện tại
lane up <lane>render .env của lane và serve nó (như site up)
lane down <lane>dừng lane (như site down)
lane rm <lane>--dry-run, --force, --keep-db, --delete-branchdừng lane, xoá database và snapshot của nó, xoá worktree; từ chối với DIRTY_WORKTREE trừ khi có --force

Database

LệnhFlagTác dụng
db snapshot <site|lane> [name]sao chép database sang <db>__snap_<name> (tên mặc định: thời điểm hiện tại)
db snapshots <site|lane>liệt kê snapshot, mới nhất trước
db snapshot rm <site|lane> <name> --yes--yesxoá một snapshot
db restore <site|lane> <name> --yes--safety (mặc định true), --yesthay database bằng một snapshot; PHP của site được dừng rồi chạy lại
db reset <lane> --yes--schema-only, --safety, --yesfork lại database của lane từ database hiện tại của site
db query <site|lane> <sql>một câu SELECT/SHOW/DESCRIBE/EXPLAIN chỉ đọc, tối đa 500 dòng

Git và module

LệnhFlagTác dụng
git status <site|lane>branch, ahead/behind so với upstream, thay đổi chưa commit, tóm tắt submodule
git checkout <site|lane> <branch>--create, --with-submodules (mặc định true)checkout một branch local, một branch từ origin, hoặc một branch mới; từ chối với DIRTY_WORKTREE; khởi động lại site đang chạy
git fetch <site|lane>--with-submodules (mặc định true)git fetch --prune trong site (và các submodule)
git pull <site|lane>--with-submodules (mặc định true)git pull --ff-only trong site và trong mỗi submodule sạch đang ở trên một branch
git push <site|lane>--with-submodules (mặc định true)push các submodule đang ahead, rồi push site; đặt upstream ở lần push đầu
modules <site|lane>--fetch, --group g, --only a,btừng submodule: branch, branch được theo dõi, HEAD so với commit đã ghi nhận, ahead/behind, có thay đổi chưa commit không
modules checkout <site|lane> <branch>--create, --group, --onlycheckout một branch trong mọi submodule (hoặc các submodule được chọn); submodule có thay đổi chưa commit bị bỏ qua (MODULE_DIRTY)
modules pull <site|lane>--group, --onlygit pull --ff-only trong mỗi submodule sạch đang ở trên một branch
modules push <site|lane>--group, --onlypush mỗi submodule đang ahead, đặt upstream khi chưa có
modules add <site|lane> <git-url>--group (extensions), --name n, --path p, --branch bgit submodule add vào thư mục của một nhóm; đã stage, chưa commit

PHP và Xdebug

LệnhFlagTác dụng
php listcác binary PHP tìm thấy trên đường dẫn quét
php info <version>một binary: php.ini, extension, Xdebug và các site đang dùng nó
php check <version> <site|lane>composer check-platform-reqs cho site với PHP đó; không thay đổi gì
php containerscác service PHP của stack (caddy) cùng chế độ Xdebug và các site của chúng
php scan-pathsnơi devkit tìm PHP (đường dẫn hoặc glob với * và ~) và mỗi nơi tìm được gì
php scan-paths add|rm|enable|disable <path>thêm (quét ngay), xoá, quét lại, giữ lại nhưng không quét
php scan-paths resettrả về các đường dẫn quét mặc định của hệ thống này
xdebug status <site|lane>chế độ hiện tại và Xdebug đã được cài chưa
xdebug on <site|lane>--mode debug|coverage|profile (debug)bật Xdebug; khởi động lại server và các process PHP (caddy: container PHP, ảnh hưởng mọi site trên đó)
xdebug off <site|lane>tắt Xdebug
xdebug container <stack> <php-service> --mode <mode>--mode off|debug|coverage|profileđặt chế độ cho một container PHP (tạo lại container; mọi site trên đó bị ảnh hưởng)

Cài đặt, chứng chỉ, hosts

LệnhFlagTác dụng
settingshiện các thiết lập
settings set--default-engine artisan|caddy, --default-php X.Y ("": php trên PATH), --domain-suffix s (localhost), --port-min N (8100), --port-max N (8999), --dry-runđổi các giá trị mặc định; --dry-run cho biết điều gì sẽ thay đổi và site đang chạy nào sẽ bị dừng
trustmkcert -install, trừ khi CA của mkcert đã được tin cậy (có thể hỏi mật khẩu của bạn)
certsCA của mkcert và các chứng chỉ devkit đã cấp; không thay đổi gì
hostskhối của devkit trong /etc/hosts so với nội dung đúng (chỉ khi dùng suffix khác localhost)
hosts syncghi lại khối của devkit bằng sudo (hỏi mật khẩu một lần)

Status, doctor, watch, MCP

LệnhFlagTác dụng
statusstack, site và lane (kể cả những mục đã ẩn) cùng process, agent đang kết nối và các vấn đề như PORT_IN_USE, kiểm tra trực tiếp, không bao giờ ghi gì
doctor [site]kiểm tra Docker, stack, PHP và site; mỗi mục kiểm tra một dòng kèm gợi ý
watch--interval d (2s)in những gì thay đổi cho tới khi bấm Ctrl-C hoặc khi process đã khởi động nó thoát; --json: mỗi dòng một event
mcpMCP server trên stdio, do agent của bạn khởi động
mcp config [agent]--write, --dir projectcách thêm devkit vào claude-code, codex, gemini, cursor, vscode, claude-desktop hoặc other
mcp toolscác tool cùng nhóm và mô tả (--json: input schema)
mcp audit--limit N (100)các lần gọi gần nhất của agent, mới nhất trước

doctor kiểm tra những gì

Máy: docker, từng stack, php.binaries. Từng site: site.php, site.composer (kiểm tra platform), site.ports, site.template, site.db (bảng và dung lượng), site.submodules. Khi có site dùng caddy: mkcert, caddy (admin API), hosts (chỉ khi domain suffix không phải localhost), và với từng site caddy là site.web (service và mount) và site.cert. site.xdebug cho site caddy và site đang bật Xdebug. Site đã ẩn được bỏ qua trừ khi bạn chỉ định tên. Mỗi dòng là ok, warn hoặc fail; dòng cuối đếm số lượng từng loại.

Output JSON

Với --json, stdout chứa đúng một object. Thông báo cho người đọc đi ra stderr.

{"ok":true,"data":{"site":"shop","url":"http://localhost:8100","port":8100,"php":"8.4.19"}}
{"ok":false,"error":{"code":"PHP_VERSION_MISSING","message":"PHP 8.1 not found on this machine","hint":"brew install php@8.1"}}

Các lệnh git và module chạy hàng loạt báo kết quả theo từng repository: {"site", "results": [{"path", "status", "detail", "error"}], "done", "unchanged", "skipped", "failed"}, trong đó status là done, unchanged, skipped hoặc failed, và path . là chính site.

devkit watch --json in mỗi dòng một event, {"v":1,"seq":N,"time":"…","type":T,"change":C,"subject":S,"data":…}: đầu tiên là snapshot (giống kết quả của status --json), sau đó là các event stack, service, site, process, mcp và issue với change là added, changed hoặc removed, và error khi một lần poll thất bại.

Exit code

MãKhi nào
0thành công
1mọi lỗi; doctor khi có mục kiểm tra fail; git fetch|pull|push và modules checkout|pull|push khi có repository bị bỏ qua hoặc thất bại (ở chế độ cho người đọc)
mã của chính lệnhexec ở chế độ cho người đọc thoát với exit code của lệnh
124exec bị dừng do --timeout (như timeout(1))

Với --json, exit code theo envelope: các lệnh hàng loạt và doctor thoát với 0 và báo các mục bị bỏ qua, thất bại hoặc kiểm tra fail trong data, còn exec thoát với 0 và đặt mã của lệnh vào data.exitCode (cùng timedOut khi bị --timeout dừng).

Mã lỗi

MãÝ nghĩa
NOT_FOUNDkhông có site, lane, stack, branch, file đó
INVALID_ARGUMENTtên, giá trị flag hoặc tổ hợp flag không hợp lệ
CONFIRM_REQUIREDlệnh phá huỷ chạy mà không có --yes (MCP: không có confirm); thông báo cho biết lệnh sẽ làm gì
DIRTY_WORKTREEthay đổi chưa commit, commit chưa push hoặc stash sẽ bị mất; thông báo liệt kê chúng
MODULE_DIRTYmột submodule có thay đổi chưa commit đã bị bỏ qua
GIT_FAILEDbản thân git bị lỗi (thông báo kèm output của git)
PORT_IN_USEmột chương trình khác đang giữ port của site
DOCKER_UNAVAILABLEdocker chưa được cài hoặc daemon chưa chạy
STACK_SERVICE_DOWNmột service site cần không có hoặc không chạy
DB_UNREACHABLEdatabase server không phản hồi
SNAPSHOT_NOT_FOUNDkhông có snapshot nào tên đó
PHP_VERSION_MISSINGphiên bản PHP chưa được cài (gợi ý kèm lệnh cài)
XDEBUG_MISSINGXdebug chưa được cài cho PHP đó (gợi ý kèm lệnh cài)
TEMPLATE_VAR_UNRESOLVEDmột biến template không xác định hoặc service của nó không có
ENGINE_FAILEDweb server không khởi động được
PROC_FAILEDmột process thoát ngay sau khi chạy
ACTION_FAILEDmột thao tác nhanh thoát với mã khác 0 (thông báo kèm các dòng cuối của nó)
SITE_NOT_MOUNTEDcontainer caddy hoặc PHP không thấy site ở cùng đường dẫn
CADDY_UNREACHABLEadmin API của Caddy không phản hồi
INTERNALmọi lỗi khác

Biến môi trường

BiếnDùng bởiÝ nghĩa
XDG_CONFIG_HOMECLIdevkit lưu trạng thái trong $XDG_CONFIG_HOME/devkit (mặc định ~/.config/devkit). Trỏ nó tới một thư mục trống để thử nghiệm mà không đụng vào thiết lập thật của bạn
XDG_DATA_HOMECLI (Linux)Thùng rác cho site delete --trash: $XDG_DATA_HOME/Trash (mặc định ~/.local/share/Trash)
CODEX_HOMEmcp config codexnơi chứa config.toml của Codex (mặc định ~/.codex)
CAROOTCLI, qua mkcertthư mục CA của mkcert
PATHCLInơi tìm docker, git, composer, pnpm, mkcert và php mặc định
DEVKIT_BINappbinary devkit mà app chạy (như --devkit)
DEVKIT_CONFIG_HOMEappchạy devkit với XDG_CONFIG_HOME đặt bằng giá trị này (như --config-home)
DEVKIT_APP_LOGappfile log của app
DEVKIT_EDITORapp Linuxlệnh mở editor cho Mở trong editor; được ưu tiên hơn Cài đặt
TERMINALapp Linuxterminal cho Mở terminal tại đây, Tin cậy và đồng bộ hosts
DEVKIT_APP_THEMEapp Linuxlight hoặc dark
DEVKIT_APP_CONFIGapp Linuxfile thiết lập riêng của app (mặc định ~/.config/devkit-app/settings.json)
LANGUAGE, LC_ALL, LC_MESSAGES, LANGapp Linuxngôn ngữ khi app đặt ngôn ngữ là Theo hệ thống

Bên trong một site, exec, các process và thao tác nhanh nhận môi trường của bạn, cộng thêm PHP của site đứng đầu PATH; process có port còn nhận thêm PORT. Biến template có thể đọc môi trường của devkit bằng {{env.NAME}}.