AI agent (MCP)
devkit mcp là một MCP server chạy trên stdin và stdout. Agent khởi động nó khi bắt đầu phiên làm việc và nó thoát khi phiên kết thúc. Mỗi tool gọi đúng code của lệnh CLI tương ứng và trả về đúng JSON của lệnh đó khi chạy với --json, nên agent có thể chạy site, tạo lane, chạy test và đọc log y như bạn, không phải đoán port hay đường dẫn.
Thiết lập agent
devkit mcp config <agent> in ra đúng lệnh hoặc mục cấu hình, kèm đường dẫn tuyệt đối của devkit bạn vừa chạy (app mở từ Dock hay launcher không nhận PATH của shell, nên chỉ ghi devkit sẽ không tìm thấy). Không chỉ định agent thì nó in tất cả. Trong các ví dụ dưới đây, <devkit> là đường dẫn đó, ví dụ /Applications/devkit.app/Contents/Helpers/devkit hoặc ~/.local/bin/devkit.
Với --write, devkit gộp mục đó vào file cấu hình của agent: các server và key khác giữ nguyên, mục devkit cũ được thay, file trước đó được giữ lại thành <file>.devkit-backup-<time>, và file JSON có comment sẽ bị từ chối thay vì bị ghi đè. Với các agent cấu hình theo dự án, --dir <project> chọn thư mục dự án (mặc định: thư mục hiện tại).
Claude Code
claude mcp add --scope project devkit -- <devkit> mcp
hoặc devkit mcp config claude-code --write, lệnh này gộp đoạn sau vào .mcp.json trong dự án:
{
"mcpServers": {
"devkit": { "type": "stdio", "command": "<devkit>", "args": ["mcp"] }
}
}
Codex CLI
codex mcp add devkit -- <devkit> mcp
hoặc devkit mcp config codex --write, lệnh này gộp đoạn sau vào ~/.codex/config.toml ($CODEX_HOME/config.toml nếu biến này được đặt):
[mcp_servers.devkit]
command = "<devkit>"
args = ["mcp"]
Gemini CLI
gemini mcp add devkit <devkit> mcp
hoặc devkit mcp config gemini --write, ghi vào .gemini/settings.json trong dự án:
{ "mcpServers": { "devkit": { "command": "<devkit>", "args": ["mcp"] } } }
Cursor
devkit mcp config cursor --write, ghi vào .cursor/mcp.json trong dự án:
{ "mcpServers": { "devkit": { "command": "<devkit>", "args": ["mcp"] } } }
VS Code (Copilot)
devkit mcp config vscode --write, ghi vào .vscode/mcp.json trong dự án. Lưu ý key ở đây là servers:
{ "servers": { "devkit": { "type": "stdio", "command": "<devkit>", "args": ["mcp"] } } }
Claude Desktop
devkit mcp config claude-desktop --write, ghi vào ~/Library/Application Support/Claude/claude_desktop_config.json (Linux: ~/.config/Claude/). Sau đó khởi động lại Claude Desktop.
{ "mcpServers": { "devkit": { "command": "<devkit>", "args": ["mcp"] } } }
MCP client khác
Một MCP server chạy qua stdio, không cần biến môi trường nào:
{ "command": "<devkit>", "args": ["mcp"], "transport": "stdio" }
Trong app
Mục MCP có một ô cho mỗi agent, kèm lệnh hoặc cấu hình của agent đó và nút Sao chép. Với Claude Code, Gemini CLI, Cursor và VS Code, Ghi vào dự án… hỏi thư mục dự án rồi chạy devkit mcp config <agent> --write --dir <folder>. Khi một agent kết nối, nó hiện dưới Đang kết nối, trên menu bar và trên thanh trạng thái.
Các tool
devkit mcp tools liệt kê các tool cùng nhóm và mô tả (--json kèm thêm input schema). Tham số viết kiểu snake_case; tham số sai trả về kết quả INVALID_ARGUMENT, không phải lỗi giao thức.
| Nhóm | Tool |
|---|---|
| status, doctor | status (mọi thứ cùng lúc, kiểm tra trực tiếp), doctor |
| stacks | stack_list, stack_up, stack_restart, stack_logs, stack_down confirm |
| sites | site_list, site_link, site_park, site_set, site_action, site_clone, site_setup, site_hide, site_unhide, site_delete confirm, site_up, site_down, url |
| templates | template_get, template_set |
| xdebug | xdebug_status, xdebug_set |
| processes | proc_list, proc_start, proc_stop, proc_restart |
| exec, logs | exec, logs |
| lanes | lane_list, lane_new, lane_up, lane_down, lane_rm confirm |
| databases | db_snapshot, db_snapshot_list, db_restore confirm, db_snapshot_rm confirm, db_reset confirm, db_query |
| git | git_status, git_checkout, git_fetch, git_pull, git_push (with_submodules, mặc định true) |
| modules | modules_status, modules_checkout, modules_pull, modules_push, modules_add (group, only) |
Một vài tool nên biết kỹ:
exec- Chạy một lệnh trong thư mục của site hoặc lane, bằng PHP của nó.
commandlà một mảng argv như["php","artisan","migrate","--force"];shortcut(artisan,composerhoặcphpunit) thêmphp artisan,composerhoặcphp vendor/bin/phpunitvào trước.timeout_secondsmặc định là 600,xdebug: truechạy riêng lệnh này với Xdebug. Output là 64 KiB cuối; lệnh chạy lỗi vẫn trả vềok: true, kèmexitCodecủa nó. url- Site hoặc lane đang được phục vụ ở đâu, có phản hồi không (một request GET; status dưới 500 là ổn), các port Vite và URL hộp thư mail. Dùng được cả với site đang dừng.
logssourcelàlaravel(mặc định),engine(web server),proc:<name>hoặccontainer:<service>;linesmặc định là 200.db_query- Một câu
SELECT,SHOW,DESCRIBEhoặcEXPLAINchỉ đọc, chạy trong transaction chỉ đọc, tối đa 500 dòng (truncatedcho biết khi còn nhiều hơn). lane_new,site_clone,site_setup- Báo từng bước bằng progress notification khi agent yêu cầu. Mọi tool được truyền progress token cũng báo "vẫn đang chạy" mỗi 10 giây, và huỷ một lần gọi sẽ huỷ luôn công việc đó (
execbị dừng, kể cả trong container PHP).
Có hai thứ cố ý không làm thành tool: devkit trust và devkit hosts sync, vì chúng hỏi mật khẩu của bạn.
Tool phá huỷ và confirm
Sáu tool có tính phá huỷ: stack_down, site_delete, lane_rm, db_reset, db_restore và db_snapshot_rm. Gọi mà không có "confirm": true thì chúng không thay đổi gì và trả về CONFIRM_REQUIRED, mô tả chính xác điều sẽ xảy ra:
{"ok":false,"error":{"code":"CONFIRM_REQUIRED",
"message":"this would remove lane core-development--crm-fix: stop it, drop its database core_development_l1 and its snapshots, remove its worktree …",
"hint":"show this to the user; call lane_rm again with \"confirm\": true to go ahead"}}
Một agent đúng mực sẽ cho bạn xem nội dung đó và hỏi bạn trước khi gọi lại với confirm. Ngoài ra, các kiểm tra an toàn thông thường vẫn áp dụng khi có confirm: site_delete và lane_rm từ chối với DIRTY_WORKTREE khi còn thay đổi chưa commit hoặc chưa push, trừ khi có thêm force là true, và db_restore tạo một snapshot an toàn trừ khi safety là false. Các tool này cũng được đánh dấu destructiveHint của MCP, nên client nào hỏi trước các lần gọi phá huỷ sẽ hỏi bạn.
Audit log
Mỗi lần gọi tool được ghi thêm vào ~/.config/devkit/audit.log thành một dòng JSON: thời điểm, pid của server, client (tên agent tự báo), tool, tham số, tool đó có chỉ đọc không, ok hoặc mã lỗi, và thời gian chạy. Thông tin bí mật được thay bằng [redacted] (nội dung template, các tên giống mật khẩu, thông tin đăng nhập trong URL). Log được xoay vòng sang audit.log.1 khi đạt 10 MB.
devkit mcp audit --limit 20
2026-10-26 14:31:07 claude-code exec ok {"command":["php","vendor/bin/phpunit"],"site":"core-development--agent-a"}
2026-10-26 14:29:40 claude-code lane_rm CONFIRM_REQUIRED {"lane":"core-development--old-spike"}
2026-10-26 14:22:13 claude-code lane_new ok {"name":"agent-a","site":"core-development","start":true}
Trong app, MCP → Audit log hiển thị nội dung tương tự và tải lại mỗi khi agent gọi tool. Khi server đang chạy, ~/.config/devkit/mcp/<pid>.json ghi lại agent nào đang kết nối, từ lúc nào và tool gần nhất của nó; devkit status liệt kê các phiên này và dọn file của những server đã bị kill.
Cách làm việc nên dùng
Mỗi agent một lane
Đừng bao giờ để hai agent (hoặc một agent và bạn) làm chung một thư mục. Hãy cho mỗi agent một lane riêng: branch, database và port của riêng nó.
Create a lane "agent-a" of core-development with lane_new (start: true),
work only in its folder, and run tests with exec on core-development--agent-a.
Khi công việc đã được push, xoá lane bằng lane_rm; agent sẽ nhận CONFIRM_REQUIRED trước và nên cho bạn xem những gì sẽ mất.
Chạy test và lệnh qua exec
- Bảo agent chạy test bằng
exectrên lane của nó (shortcut: "phpunit", hoặc["php","artisan","test"]) thay vì shell riêng, để dùng đúng phiên bản PHP và.envcủa lane. - Khi chỉ cần debug một lần, dùng
execvớixdebug: truethay vì bật Xdebug cho cả site: Xdebug làm chậm mọi request, và với caddy nó được dùng chung cho mọi site trên container. - Để agent đọc lỗi bằng
logs(laravel, rồiproc:queue) và kiểm tra dữ liệu bằngdb_querythay vì mở shell database.
Snapshot trước các bước rủi ro
Trước một migration hay một lần sửa dữ liệu, hãy để agent gọi db_snapshot với tên rõ ràng (before_orders_migration). Nếu có sự cố, db_restore cần bạn xác nhận và cũng giữ một snapshot an toàn của trạng thái bị hỏng.
Bắt đầu với status và doctor
Một chỉ dẫn mở đầu tốt: "gọi status, rồi doctor cho site, và cho tôi biết cái gì đang chạy, cái gì đang hỏng trước khi bạn thay đổi bất cứ thứ gì". Cả hai đều chỉ đọc.
Những gì devkit đảm bảo
- Không phá huỷ gì nếu chưa confirm. Sáu tool phá huỷ chỉ mô tả việc chúng sẽ làm cho tới khi được gọi với
"confirm": true. - Mặc định không mất công việc. Xoá site hay xoá lane đều từ chối khi còn thay đổi chưa commit hoặc chưa push, trừ khi agent truyền thêm
force. Khôi phục sẽ giữ một snapshot an toàn. - Không hỏi mật khẩu. Tin cậy chứng chỉ và sửa
/etc/hostskhông phải là tool. Git chạy bằng thông tin đăng nhập bạn đang có và không bao giờ hỏi. - Truy vấn chỉ đọc thì chỉ đọc.
db_querytừ chối mọi thứ ngoài một câu lệnh đọc và chạy nó trong transaction chỉ đọc. - Mọi thứ đều được ghi lại trong audit log trên máy bạn, đã lược bỏ thông tin bí mật.
- Không gì rời khỏi máy bạn. devkit không có tài khoản, không telemetry; MCP server chỉ nói chuyện với agent đã khởi động nó.
rm hay git push --force; hãy dùng thiết lập quyền của chính agent cho việc đó.