Bỏ qua để đến nội dung

Mô hình agent

Agent là một tác nhân có tên, với một persona, một tập kỹ năng và một adapter để chạy trên đó. Agent là những chủ thể theo đúng nghĩa mà con người là vậy: chúng viết tin nhắn, sở hữu phiếu, để lại bản rà soát và xuất hiện trên cùng một danh sách hiện diện. Chúng chính là những thứ thực sự làm ra công việc.

Mỗi agent thuộc về đúng một không gian làm việc. Đây là một bất biến cứng — agent.workspaceId là non-null, chính không gian làm việc của agent quyết định tệp cơ sở dữ liệu mà các hàng của nó nằm trong đó, và việc tạo một agent không thuộc không gian làm việc nào sẽ bị từ chối.

Agent cũng là một thư mục. Định nghĩa của nó nằm tại agents/<slug>/AGENTS.md trong thư mục dữ liệu của không gian làm việc, với những kỹ năng mà nó nắm giữ được tạo symlink vào agents/<slug>/.agents/skills. Hàng trong cơ sở dữ liệu và tệp được ghi cùng nhau. Việc gieo tạo có tính lũy đẳng: nếu hàng agent đã tồn tại thì các tệp trên đĩa và liên kết kỹ năng vẫn được ghi lại. Bên gọi trong môi trường thực tế là thao tác tạo không gian làm việc, chứ không phải mỗi lần khởi chạy máy chủ.

Thuộc tính Tác dụng
name Mã định danh ngắn kiểu slug (architect, qa). Cũng là căn cứ để @mentions phân giải
title Chức danh dễ đọc với con người
persona Chỉ dẫn về tính cách và hành vi dạng văn bản tự do, được chèn thành một phần của prompt
systemPrompt Chỉ dẫn bổ sung tùy chọn, được chèn thành một mục “Agent instructions” — chúng không thay thế phần còn lại của prompt đã lắp ghép
skills Tập tên kỹ năng không phân biệt chữ hoa chữ thường, được phản chiếu thành các liên kết kỹ năng trên đĩa
adapterId Trình chạy mà agent điều phối tới. Null sẽ quay về vòng lặp tích hợp
modelId Mô hình nào trong adapter đó
effort Mức suy luận, lấy từ bộ từ vựng của chính mô hình được chọn
contextSize Ghi đè cửa sổ ngữ cảnh
silenceTimeoutMinutes Ghi đè theo từng agent (1–240) cho cơ chế canh hết hạn im lặng
reportsTo Id agent cha — chuỗi báo cáo mà sơ đồ tổ chức vẽ ra

Bạn chỉnh sửa tất cả những thứ này tại Cài đặt → Không gian làm việc → Agent. Agent mới tạo ra một agent chưa có tên để bạn điền vào sau.

Kỹ năng là những cái tên không phân biệt chữ hoa chữ thường trên thực thể agent. Hai việc riêng biệt diễn ra với chúng:

  • Những cái tên được liệt kê trong prompt đã lắp ghép dưới một tiêu đề “Skills”. Chỉ vậy thôi là toàn bộ việc mà tập hợp của thực thể tự làm — không có thư viện prompt riêng cho từng kỹ năng dựa vào nó.
  • Thư mục của mỗi kỹ năng được đặt tên (skills/<slug>/SKILL.md trong không gian làm việc) được liên kết vào thư mục riêng của agent. Trên harness tích hợp, frontmatter của các kỹ năng được liên kết sẽ tự động được nạp vào prompt hệ thống, và agent đọc phần thân khi cần; gõ /skill:<name> trong một cuộc trò chuyện sẽ nạp phần thân đó như một chỉ thị cho lượt đó.

Những kỹ năng được tải từ bên ngoài phải đi qua một đợt quét chuỗi cung ứng theo cơ chế fail-closed giữa bước tải về và bước ghi — không nội dung kỹ năng nào chạm tới đĩa hay một prompt mà chưa có phán quyết. Bên ngoài đó là những kho mã GitHub do chính bạn đăng ký làm nguồn kỹ năng: không có cửa hàng nào được tuyển chọn, nên siêu dữ liệu của chính kho mã (phần mô tả, số sao, tên kỹ năng) là dữ liệu hiển thị không đáng tin, và phán quyết của đợt quét là tín hiệu an toàn duy nhất. Một lần cài đặt sẽ tải toàn bộ thư mục của kỹ năng, ghim nó vào commit mà nó đến từ đó trong skills-lock.json, và một lần cập nhật sau đó phải qua lại cổng kiểm tra trước khi thay thế bất cứ thứ gì. Hướng dẫn chi tiết nằm ở cài đặt và quản lý kỹ năng.

Một kho mã có thể mang theo kỹ năng của riêng nó, ở bất kỳ vị trí quy ước nào (.agents/skills/, .claude/skills/, .opencode/skills/). Một space checkout mọi kho mã được liên kết song song dưới repos/<name>/, nhưng một agent chỉ làm việc trong một kho mã tại một thời điểm — nên nó chỉ mang kỹ năng của chính kho mã đó, và bộ kỹ năng sẽ đổi khi nó chuyển sang kho khác.

Kho mã nào đang hoạt động được suy ra từ những tệp mà agent chạm vào: ghi một tệp dưới repos/<name>/ sẽ biến kho đó thành kho đang hoạt động, còn chỉ đọc xuyên qua các kho thì không, nên việc lần theo một ký hiệu sang một dịch vụ anh em sẽ không bao giờ hoán đổi bộ kỹ năng ngay dưới chân một tác vụ. Trên một space chỉ có một kho mã, câu trả lời đã biết trước lượt đầu tiên.

Việc giới hạn phạm vi là một quyết định về ngân sách ngữ cảnh. Danh mục kỹ năng nằm trong prompt ở mọi lượt còn phần thân thì không, nên liệt kê kỹ năng của mọi kho mã cùng lúc sẽ ngốn token liên tục — và một kỹ năng testing của dịch vụ này sẽ chủ động gây nhầm lẫn khi công việc nằm ở dịch vụ khác. Cùng lý lẽ đó giải thích vì sao danh mục của agent chỉ mang một kho mã nhưng khung soạn tin thì không bị giới hạn như vậy: tự bạn gọi tên một kỹ năng là một hành vi minh thị, nên /skill:<repo>:<name> với tới bất kỳ kho mã nào trong space.

Kỹ năng của kho mã được nạp cho mọi adapter, không chỉ harness tích hợp. Kỹ năng của kho mã đang hoạt động được hiện thực hóa vào thư mục làm việc của agent, vốn là đường dẫn mà Claude Code đã quét sẵn; cùng danh mục đó cũng được dựng vào AGENTS.md mà harness tích hợp đọc. Kỹ năng của một kho mã phải qua đúng đợt quét fail-closed như một kỹ năng đã cài đặt, trước khi bất kỳ điều nào ở trên diễn ra — một kho mã đã checkout là nội dung được sao chép về, và frontmatter của nó sẽ chạm tới một prompt.

Agent không mang cờ quyền hạn riêng. Việc nó có được tạo commit, push, mở pull request, ghi vào tracker hay truy cập mạng hay không do rào chắn hành động quyết định — cho phép, hỏi trước hoặc từ chối, ở phạm vi không gian làm việc, agent hoặc space — và cùng các quy tắc đó áp dụng bất kể adapter nào chạy nó.

Thứ mà một lượt chạy được trao không thay đổi theo các quy tắc đó. Một lượt chạy trong worktree GitHub luôn nhận token GitHub chỉ đọc, và một lần push được hỏi đúng lúc nó diễn ra: cấu hình git của agent gửi mọi lần push lên GitHub qua Control Center, nơi áp dụng quy tắc Push lên remote trước khi chuyển tiếp.

Xem Sandbox và bảo mật để biết cơ chế này hoạt động thế nào, bao gồm những gì được và không được thi hành ở mức hệ thống tệp.

Adapter quyết định những gì có thể được thi hành

Phần tiêu đề “Adapter quyết định những gì có thể được thi hành”

Trường có hệ quả lớn nhất trên một agent là adapter của nó, bởi phương thức vận chuyển của adapter quyết định bao nhiêu phần chính sách của Control Center thực sự có thể được thi hành.

Phương thức vận chuyển Adapter Những gì Control Center thi hành
Harness tích hợp Control Center (built-in) Mọi thứ. Bề mặt công cụ được dựng từ chế độ, nên một công cụ không được phép sẽ vô hình chứ không chỉ đơn thuần bị từ chối; mọi lệnh gọi đều đi qua cổng phê duyệt và các rào chắn thao tác; hợp đồng hoàn thành có thể thúc rồi đánh dấu thất bại một lượt chạy kết thúc mà không có sản phẩm bàn giao
Claude CLI Claude Code Những công cụ mcp__* mà nó được phục vụ, cùng các lệnh Bash của nó, được một hook gửi tới chính sách hành động trước khi chạy. Các công cụ đọc, ghi và sửa của chính Claude nằm trong tiến trình của nó và chạy mà không ai thấy — và nó được khởi chạy với --dangerously-skip-permissions, vì nếu không thì claude -p không tương tác sẽ chặn đứng mãi mãi ở prompt của chính nó

Cụ thể, chỉ harness tích hợp mới hỗ trợ subagent, điều hướng giữa lượt chạy, tạm dừng và tiếp tục (và do đó cả tiếp quản) cùng việc thực thi chế độ theo cấu trúc. Claude Code không có bất kỳ thứ nào trong số đó.

Một agent không có adapter sẽ quay về Control Center (built-in) — vòng lặp bên trong máy chủ, nên không có CLI nào phải cài — và nhật ký lượt chạy của nó ghi lại cc-harness. Mọi agent được gieo tạo đều được tạo ra mà không có adapter hay mô hình, nên năm agent của một không gian làm việc mới đều chạy ở đó, trên mô hình mặc định của Anthropic, cho tới khi bạn đặt adapter và mô hình cho từng agent. Lựa chọn “adapter mặc định” trong bước thiết lập ban đầu là một tùy chọn phía máy khách mà máy chủ không bao giờ đọc, và nó không áp dụng ngược lại cho những agent đã được tạo trước đó.

  • Được gieo tạo cùng không gian làm việc. Mọi không gian làm việc — không chỉ cái đầu tiên — đều có một CEO cùng bốn chuyên gia (qa, architect, engineer, librarian) báo cáo cho nó, được tạo một cách lũy đẳng trong nền khi không gian làm việc được tạo. Xem Không gian làm việc và cô lập.
  • Được thêm thủ công tại Cài đặt → Không gian làm việc → Agent. Việc yêu cầu một agent thuê đồng nghiệp không tạo ra hàng nào; hãy dùng màn hình đó.

Một agent không có cột trạng thái được lưu trữ. Trạng thái trực tiếp của nó được suy ra từ các nhật ký lượt chạy gần nhất mỗi lần nó được đọc:

Trạng thái Ý nghĩa
neverRun Không tồn tại nhật ký lượt chạy nào
running Có ít nhất một lượt chạy đang diễn ra
failed Lượt chạy mới nhất gặp lỗi, hoặc trạng thái sống của nó là failed hay dead
blocked Trạng thái sống của lượt chạy mới nhất là blocked, stalled hoặc looping
idle Mọi trường hợp còn lại — agent đã từng chạy và không có gì đang thực thi

Hai trạng thái nữa, queued và succeeded, tồn tại cho từng lượt chạy riêng lẻ trong cây lượt chạy của cuộc trò chuyện; danh sách hiện diện không bao giờ tạo ra chúng, bởi một lượt chạy đã xong mà xanh là sự thật về lượt chạy đó, chứ không phải về agent.

Danh sách hiện diện hiển thị một bức tranh song song, thô hơn, được tổng hợp ở phía máy chủ từ các sự kiện lượt chạy trực tiếp — đang suy nghĩ, đang chạy, bị chặn chờ phê duyệt, đã xong — và chính điều đó khiến agent xuất hiện bên cạnh con người. Xem Đa người dùng và hiện diện.