hướng dẫn

Dựng một lớp ngữ cảnh, rồi kiểm tra mức tuân thủ.

Bản dịch có sự hỗ trợ của AI agent. Nếu có khác biệt, trang tiếng Anh là bản có hiệu lực. Nếu bạn thấy vấn đề nào trong văn bản, rất mong bạn mở một issue hoặc gửi một pull request.

Năm câu lệnh, từ cài đặt đến khi có điểm tuân thủ. Mọi thứ leji làm đều nằm sẵn trong gói và chạy offline; những gì chạm tới mạng đều do bạn tự gọi. Bước khai báo phụ thuộc trong leji initleji adopt chạy trình quản lý gói của chính bạn khi bạn đồng ý, còn các lệnh federation chỉ liên hệ đúng kho mã nguồn bạn đã khai báo: leji mounts hydrate --fetch, leji mounts update-pin --fetch, và leji conformance --federation=verify.

Runtime được hỗ trợNode.js Node.js 22+Python Python 3.10+Go Go 1.26.6+

01Cài công cụ

Cả ba bản đều vượt qua cùng một bộ fixture, nên cờ dòng lệnh, đầu ra JSON và mã thoát đều giống nhau, bất kể CI của bạn cài bản nào.

Hãy khai báo công cụ dưới dạng dev dependency để CI, hook pre-commit và mọi người đóng góp cùng chạy một phiên bản đã ghim. Bạn không cần tự tìm câu lệnh: leji initleji adopt nhận ra trình quản lý gói mà kho mã nguồn này thực sự đang dùng và đề nghị chạy lệnh thêm gói của chính nó, chỉ khi bạn đồng ý rõ ràng: npm, pnpm, yarnbun; uv, poetry, pdmpipenv; cùng go get -tool, vốn cần Go 1.24 trở lên, trong khi tự build CLI Go thì cần Go 1.26.6 trở lên. Với pip, leji in ra dòng cần thêm thay vì chạy bất cứ thứ gì. Bản cài toàn cục không cản đường: bên trong một kho mã nguồn đã ghim bản riêng, CLI Node và Python chạy đúng bản đó ở mọi lần gọi (CLI mà một kho mã nguồn ghim).

npm install -g @leji-org/leji

02Khởi tạo một lớp ngữ cảnh mới, hoặc áp dụng cho kho mã nguồn sẵn có

Bạn nhận được manifest leji.json ở gốc kho mã nguồn, một boot profile, các tài liệu danh mục đã gieo sẵn, một bản ghi quyết định đầu tiên, và một brief onboarding. Kèm theo là hai tệp nằm ngoài gốc ngữ cảnh: một AGENTS.md chỉ chứa con trỏ khi kho mã nguồn chưa có tệp nào như vậy (--no-agents bỏ qua nó), và một dòng .gitignore ở gốc cho .leji/, nơi làm việc chứa brief đó. Không phần nào trong số này đòi hỏi phải có agent.

Khung ban đầu chỉ chứa nội dung mẫu. Nếu nhận lời đề nghị, agent sẽ đọc kho mã nguồn, đề xuất cách ánh xạ để bạn xem xét rồi xoá brief. Nếu từ chối, bạn sẽ nhận được câu lệnh để chạy sau; --yes bỏ qua bước này, nên CI vẫn chạy mà không cần người trực.

Nếu làm việc một mình, --mode solo tạo sẵn phần identity và writing-style, đồng thời hướng brief vào một buổi phỏng vấn chủ sở hữu; câu trả lời có thể gõ, đính kèm, hoặc thả vào một thư mục. Chỉ bản tổng hợp mà bạn phê duyệt mới trở thành ngữ cảnh, còn nguyên liệu thô thì nằm lại trong vùng làm việc được git bỏ qua tại .leji/ ở gốc kho mã nguồn: initadopt ghi ra chính quy tắc bỏ qua đó, và cả hai đều từ chối chạy chừng nào còn bất cứ thứ gì dưới đó đang được git theo dõi. Agent xoá các tệp đó một khi lớp ngữ cảnh đã có nội dung.

leji adopt --dry-run    # kế hoạch ghi chính xác; chưa ghi gì
leji adopt              # áp dụng cho kho mã nguồn hiện có (leji init nếu là kho mã nguồn mới)
                        # sau đó đề nghị mở Claude Code hoặc Codex

leji adopt --wire-adapters  # áp dụng trên CLAUDE.md / AGENTS.md hiện có

npm create leji         # hoặc làm tất cả trong một bước mà không cần cài đặt:
                        # lệnh đọc thư mục rồi chọn adopt hoặc init

03Kiểm tra

  • Kiểm theo schema: manifest, index, changelog, cùng phần frontmatter của agent profile và bản ghi quyết định.
  • Cấu trúc và lint: boot profile, tệp index và tài liệu thường không có schema. Các tệp đã khai báo phải tồn tại, và changelog chỉ được thêm vào, đối chiếu với HEAD. Từ mức indexed trở lên, một index lỗi thời sẽ làm hỏng hẳn bước kiểm tra.

Sau một lần adopt thông thường trên CLAUDE.md hoặc AGENTS.md sẵn có, bạn sẽ thấy một lỗi vendor-adapter-redirect cho mỗi tệp trong số đó, cho tới khi --wire-adapters chạy.

leji validate           # schema + quy tắc lint
leji validate --content # + cảnh báo về nội dung mẫu / sơ sài
leji index              # sinh index

04Tuyên bố một mức, rồi kiểm lại

Việc áp dụng theo từng phần là chủ ý thiết kế: bắt đầu ở core, rồi mỗi mức bao hàm mức trước. Manifest khai báo mức tuyên bố; leji conformance chấm lớp ngữ cảnh theo đúng mức đó.

coreindexedgovernedfederated

Mỗi mức đòi hỏi những gì

leji conformance        # chấm điểm tuyên bố

05Nhìn thấy lớp ngữ cảnh của bạn

Chính lớp ngữ cảnh mà các agent của bạn đọc, được trình bày cho con người.

leji view               # mở viewer dành cho người đọc trong trình duyệt
leji viewer build       # xuất thư mục tĩnh để host sau lớp xác thực nội bộ

Giữ cho nó trung thực trong CI

Nhà cung cấp được suy ra từ remote origin; nếu remote không cho biết nhà cung cấp, hệ thống mặc định dùng GitHub.

leji ci                 # sinh workflow
leji ci --hooks         # các cổng chặn giống pre-commit cục bộ

# những lệnh job được sinh ra sẽ chạy:
leji validate           # schema + quy tắc lint
leji index --check      # index lỗi thời sẽ làm phép kiểm thất bại

# thêm ở mức indexed trở lên:
leji changelog check    # chỉ thêm mới

Mã thoát hợp với CI: 0 sạch, vẫn cho phép cảnh báo; 1 một phép kiểm không qua, dù nó có báo ra phát hiện nào hay không; 2 lỗi cách dùng hoặc một lỗi nội bộ, ví dụ việc từ chối ghi đè.

Bước vào lớp ngữ cảnh

Lớp ngữ cảnh trở thành ngữ cảnh đầu tiên của agent, không có tệp nhà cung cấp nào chen vào giữa.

leji start              # hoặc --agent claude-code | codex để ghim một host

Nếu phát hiện nhiều host, công cụ sẽ hỏi. Nếu không thấy host nào, hoặc đang chạy qua script hay CI, công cụ in ra câu lệnh cần chạy thay vì đoán. Hướng dẫn áp dụng có các cờ chuyển tiếp cho host và bảng dự phòng tệp nhà cung cấp.

Trao cho agent cả công cụ, không chỉ ngữ cảnh

Bước vào lớp ngữ cảnh là trao cho agent phần ngữ cảnh. MCP server trao cho nó phần công cụ: một server cục bộ, chỉ đọc, chạy kiểm tra và chấm tuân thủ trên lớp ngữ cảnh nằm trên đĩa, nên agent không bao giờ cần tới shell. Nó đọc và báo cáo; nó không bao giờ ghi.

# Claude Code (dự án này)
claude mcp add leji --scope project -- npx -y @leji-org/mcp

# Codex
codex mcp add leji -- npx -y @leji-org/mcp

initadopt đề nghị đăng ký sẵn cho bạn: theo phạm vi dự án với Claude Code, theo phạm vi người dùng với Codex. Các câu lệnh ở trên dành cho ai đã bỏ qua lời đề nghị đó, và đổi --scope project thành --scope user sẽ đăng ký một lần cho riêng bạn thay vì cho kho mã nguồn này. Mọi MCP client đều dùng được; trang MCP server có danh sách công cụ đầy đủ.

Rồi áp dụng theo tình huống của bạn

MonorepoMột kho mã nguồn, một lớp ngữ cảnh, khởi tạo một lần ở gốc kho mã nguồn.
Nhiều kho mã nguồn, một lớp ngữ cảnhMột kho ngữ cảnh riêng, mount ở chế độ chỉ tài liệu trong từng kho mã nguồn sử dụng, ghim theo từng kho mã nguồn.
Nhiều lớp ngữ cảnh đã có chủCác nhóm mà mỗi nhóm đã sở hữu một lớp ngữ cảnh. Mount từng lớp như một lớp ngang hàng; quyền sở hữu và cách làm việc giữ nguyên.

Từ một script

Phần lớn câu lệnh cũng là một lời gọi thư viện, dùng cho hook, bot và các bước build. Mã nguồn tại leji-org/leji, Apache-2.0.

import { validateLayer, writeIndex, conformanceReport } from '@leji-org/leji';

const { findings } = validateLayer('.');

Tiếp theo: hướng dẫn áp dụng cho một kho mã nguồn sẵn có, hoặc federation khi nhiều nhóm mà mỗi nhóm sở hữu một lớp ngữ cảnh.