Bỏ qua để đến nội dung
Tài liệu này mô tả bản Veilus sau v0.2.1, sắp phát hành. Nếu bạn đang dùng v0.2.1, một số màn hình và tính năng (Bộ dữ liệu, Thùng rác, panel hồ sơ mới, nhiều tool MCP) chưa có trong bản của bạn.

Để LLM làm tự động hoá giúp bạn

MCP server của Veilus cho phép một agent LLM, như Claude Code, Cursor hay Claude Desktop, làm trọn một việc tự động hoá chỉ từ một yêu cầu. Nó nhập được proxy của bạn, tạo profile khớp với proxy, mở một profile để xem trang đích, viết một script Playwright, và chạy thử. Khi bạn đã duyệt script, nó chạy được script trên nhiều profile hoặc theo lịch.

API cục bộ, và do đó MCP, cần gói trả phí hoặc gói dùng thử.

  1. Bật API cục bộ. Mở API & MCP trong sidebar của app và bấm Turn on port. API chỉ lắng nghe trên chính máy của bạn.

  2. Tạo một token. Ở mục Tokens, đặt tên theo công cụ sẽ dùng nó (ví dụ claude-code) rồi bấm Create token. Copy ngay: giá trị chỉ hiện một lần. Đặt tên token theo từng công cụ thì sau này thu hồi một cái mà không ảnh hưởng các cái khác.

  3. Kết nối công cụ LLM của bạn. Ở mục Connect an LLM, copy đoạn lệnh cho Claude Code, hoặc khối JSON cho Cursor và Claude Desktop. Xem MCP Server để có lệnh chính xác.

Nếu bạn dùng Claude Code, plugin Veilus thêm bốn skill đi qua từng bước của việc và dừng lại chờ bạn quyết định:

Terminal window
claude plugin marketplace add veilus/claude-plugin
claude plugin install veilus@veilus

Khởi động lại Claude Code, rồi gõ /veilus: để thấy các skill.

SkillLàm gì
/veilus:campaignTrọn việc: hỏi những gì cần biết, chuẩn bị proxy và profile, rồi dùng ba skill bên dưới
/veilus:scriptTìm hiểu trang web trên một profile thật, viết script, chạy thử trên tối đa 3 profile, sửa, rồi nhờ bạn duyệt
/veilus:scheduleĐịnh cỡ lịch chạy theo máy của bạn, đưa kế hoạch dưới dạng bảng, và tạo lịch sau khi bạn đồng ý
/veilus:runChạy script ngay, theo dõi lượt chạy, giải thích lỗi của từng profile, và báo cáo

Plugin cần bản Veilus mới hơn 0.2.1. Không có plugin, client MCP nào cũng làm được cùng việc này: mô tả việc cần làm, agent tự chọn tool.

Khi đã kết nối, mô tả cả việc bằng lời của bạn, ví dụ:

Nhập 10 proxy này, kiểm tra chúng, rồi tạo mỗi proxy một profile với múi giờ khớp proxy. Sau đó mở profile đầu tiên, vào https://example.com/login, tìm hiểu form đăng nhập, và viết một script Veilus đăng nhập bằng USERNAME và PASSWORD rồi in ra tên tài khoản. Chạy thử trên tối đa 3 profile và báo tôi khi script sẵn sàng để duyệt.

Và sau khi bạn đã duyệt script:

Chạy script đăng nhập trên cả 10 profile, mỗi lượt 3 profile, rồi đặt lịch chạy mỗi ngày lúc 09:00. Cho tôi biết profile nào lỗi.

Đây là những gì agent làm, từng bước:

  1. Nhập proxy. import_proxies biến các dòng proxy của bạn thành một pool và báo dòng nào sai theo số dòng. test_proxy kiểm từng proxy: sống hay chết, độ trễ, IP ra, và quốc gia, múi giờ của IP đó.

  2. Tạo profile khớp proxy. create_profiles với pool đó cấp cho mỗi profile mới một slot proxy riêng, và sinh múi giờ và ngôn ngữ của profile khớp với nơi proxy đi ra. Profile nào có proxy chưa biết vị trí thì không được tạo, mà được liệt kê là lỗi.

  3. Tìm hiểu trang web. launch_profile mở một profile, rồi các tool điều khiển trang lái nó: navigate tới một URL, snapshot để liệt kê các phần tử trên trang, click, type, press_key và scroll để đi qua trang, wait_for_element để đợi trang kế tiếp. Thao tác nào làm bật hộp thoại JS (alert, confirm, prompt) thì tool trả lời ngay (bấm Cancel, trừ khi agent yêu cầu OK bằng dialog: "accept") và nói đó là hộp thoại nào. Muốn điền ô tải file lên, set_file gắn một file trong ~/.veilus/data/uploads; file nằm ngoài thư mục đó bị từ chối, nên hãy chép file vào đó trước. Nhờ vậy agent biết trang thật trông thế nào trước khi viết dòng code nào.

  4. Viết script. save_script lưu một script Playwright (TypeScript) vào Veilus Flow. Phần mô tả của tool đã mang sẵn quy tắc của script, bạn không cần nhắc lại; script phạm quy tắc bị từ chối kèm số dòng.

  5. Chạy thử. run_script chạy script trên tối đa 3 profile khi script chưa được duyệt, và get_run_result đọc lại mã thoát và output của từng profile. Có gì sai thì agent sửa script và lưu lại, tới khi chạy đúng.

  6. Bạn duyệt script, trong app, không phải qua agent. Xem Duyệt script. Đây là bước cho phép script chạy thật.

  7. Chạy thật. run_batch chạy script đã duyệt trên nhiều profile cùng lúc (get_capacity giúp chọn số profile chạy song song), và create_schedule chạy nó lặp lại: mỗi N phút hoặc N giây, hằng ngày, hằng tuần, hoặc theo biểu thức cron. Cả hai đều từ chối script bạn chưa duyệt.

  8. Xem kết quả. list_runs liệt kê các lượt chạy gần đây với trạng thái và số profile. get_run_result có chi tiết từng profile. stop_profile đóng browser của profile khi agent dùng xong.

Giá trị bạn nhắc tới cho một lượt chạy (như USERNAME ở trên) tới script dưới dạng biến môi trường tên VEILUS_VAR_<NAME>, đọc bằng process.env.VEILUS_VAR_USERNAME. Với giá trị khác nhau theo từng profile, như mỗi profile một tài khoản, agent có thể đưa chúng vào một bộ dữ liệu bằng create_dataset và assign_dataset, hoặc lưu vào profile bằng set_profile_variables. Cả hai chỉ tới script đã duyệt; xem phần an toàn bên dưới.

Một script agent lưu chưa được duyệt cho tới khi bạn duyệt. Script chưa duyệt vẫn chạy thử được qua run_script (tối đa 3 profile), nhưng lịch chạy và lượt chạy hàng loạt chỉ nhận script đã duyệt.

Để duyệt một script:

  1. Mở Veilus Flow và tìm script đó. Script của agent có nhãn MCP, và Pending approval liệt kê những script đang chờ bạn.
  2. Đọc phần thay đổi so với bản duyệt gần nhất, hoặc bấm Show full source. Đây là một chương trình Node thật, chạy với quyền của user bạn. Xem lại như bạn xem lại code người khác viết.
  3. Bấm Approve this script.

Khi agent lưu script lần nữa, script quay về Pending approval và cần bạn xem lại. Nếu chính bạn sửa script trong app rồi lưu, bản đó được tính là đã duyệt, vì bạn là người viết nó.

Sau khi duyệt, script chạy được trên nhiều profile cùng lúc hoặc theo lịch. Thêm về xem lại, sửa và phiên bản: Scripts.

Mọi script save_script chấp nhận đều theo cùng một bộ quy tắc, để nó chạy trong các profile của Veilus thay vì tự mở browser riêng. Trích từ mô tả của chính tool:

  1. Kết nối bằng chromium.connectOverCDP(`http://127.0.0.1:${process.env.VEILUS_DEBUG_PORT}`).
  2. Không chromium.launch / launchPersistentContext.
  3. Dùng browser.contexts()[0], không newContext().
  4. Không setUserAgent / setViewportSize: danh tính thuộc về profile.
  5. Lỗi phải thoát khác 0: main().catch((e) => { console.error(e); process.exit(1); }).
  6. Chỉ import playwright và module có sẵn của Node.
  7. Kết thúc main() bằng await browser.close(). Lệnh này chỉ ngắt kết nối khỏi browser của profile để script thoát được; thiếu nó thì lượt chạy treo.

Đọc input từ process.env.VEILUS_VAR_<NAME> (dạng UPPER_SNAKE_CASE), và in thứ bạn cần xem bằng console.log. Output đó là thứ agent đọc qua get_run_result.

import { chromium } from "playwright";
async function main() {
const browser = await chromium.connectOverCDP(
`http://127.0.0.1:${process.env.VEILUS_DEBUG_PORT}`,
);
const context = browser.contexts()[0];
const page = context.pages()[0] ?? (await context.newPage());
const url = process.env.VEILUS_VAR_TARGET_URL ?? "https://example.com";
await page.goto(url);
console.log(`title: ${await page.title()}`);
await browser.close();
}
main().catch((e) => {
console.error(e);
process.exit(1);
});

Vài quy tắc được cài sẵn để một agent làm thay bạn vẫn ở trong giới hạn an toàn:

  • Tạo và dừng, không bao giờ xoá. Không có tool nào xoá profile, pool proxy, script hay lịch chạy. Việc xoá ở lại trong app, trong tay bạn. Agent có thể tắt một lịch bằng set_schedule_enabled; lịch và lịch sử chạy của nó vẫn còn.
  • Proxy đang có không bị ghi đè nhầm. assign_proxy_pool từ chối cả lời gọi nếu có profile nào đã có proxy, trừ khi agent truyền force: true. Nó cũng không đổi múi giờ của profile, nên proxy ở nước khác sẽ làm profile không mở được. Profile mới nên nhận proxy qua create_profiles.
  • Giới hạn tốc độ cho lời gọi nặng. Mỗi token được tối đa 30 lời gọi nặng trong 60 giây: mở profile, chạy script, tạo profile, nhập proxy, chạy hàng loạt, hoặc chạy lịch ngay. Quá mức đó, lời gọi bị từ chối kèm thời gian phải đợi cho tới khi cửa sổ trống bớt.
  • evaluate_js không phải sandbox. Nó chạy JavaScript trong trang của profile với toàn quyền của trang đang đăng nhập đó: đọc được cookie và gửi request dưới danh nghĩa bạn. Chỉ để agent bạn tin dùng nó trên tài khoản quan trọng.
  • Giá trị đã lưu chỉ tới script đã duyệt. Biến profile lưu bằng set_profile_variables và các dòng bộ dữ liệu được giao cho lượt chạy hàng loạt, lịch chạy, và run_script khi bạn đã duyệt script. Lượt chạy thử của script chưa duyệt chỉ nhận biến truyền vào đúng lời gọi đó, nên script chưa ai xem không bao giờ thấy bí mật bạn đã lưu.
  • Script chạy với quyền của bạn. Script agent viết là một chương trình Node bình thường, làm được mọi thứ một script bạn tự viết làm được. Đọc thứ agent đã lưu trước khi duyệt, như bạn xem lại một pull request.