13 KiB
Cài CASAN production (managed hoặc vendored Core) — Plan-21
CASAN cài CLI/DevKit một lần vào máy ($CASAN_HOME). Mỗi project chạy
casan init và chọn một runtime contract rõ ràng:
managed(mặc định): Core nằm trong global install, project pin version/hash.vendored: Core production-only nằm tại.casan/runtime/casan-core, dành cho offline, air-gapped hoặc repository cần self-contained.
Capability level và runtime placement là hai khái niệm độc lập. Project mặc
định dùng Level 1/Core dù global package phải là DevKit để có lệnh init.
1. Cài đặt (một lần cho mỗi máy)
# macOS / Linux
curl -fsSL https://<your-gitea>/admin/casan5/raw/branch/main/install.sh | sh
# Windows (PowerShell)
irm https://<your-gitea>/admin/casan5/raw/branch/main/install.ps1 | iex
Hoặc từ một checkout CASAN có sẵn:
sh install.sh # macOS/Linux
pwsh .\install.ps1 # Windows
Chọn level đóng gói để cài (theo packaging/levels.json):
sh install.sh --level core # L1: harness + gates + CLI (casan run/gate/verify)
sh install.sh --level devkit # L2 (mặc định): + adoption tooling (casan init, CI, domain-pack)
sh install.sh --level platform # L3 preview: từ chối — là service, deploy riêng
sh install.sh --level enterprise# L4 future: từ chối (chưa ship)
Levels là cumulative (devkit ⊃ core). casan init là tính năng của L2 (devkit);
cài --level core sẽ không có casan init (báo rõ ràng).
Installer sẽ:
- Copy harness vào
$CASAN_HOME/versions/<version>(mặc định~/.casan, Windows:%LOCALAPPDATA%\casan) và trỏcurrentvào version đó. - Ghi hash toàn vẹn của gate-code (
.harness-hash) — mỏ neo cho pin+verify. - Ghi level đã cài vào
.casan-level. - Tạo launcher
casan(tự định vị install của chính nó) và đưa lên PATH (~/.local/binhoặc$CASAN_HOME/bin).
Installer dùng allowlist packaging/runtime-layout.json. Runtime global không
chứa tests/, legacy level5/, internal test/CI runners, Platform dashboard/local
lab, source docs hay bản sao installer. Policy cần thiết đã được chuẩn hóa vào
packages/casan-harness/config/.
Windows cần Git for Windows (Git Bash) để chạy harness (xem CASAN_AGENTIC_CLIENTS_WINDOWS.md) — không cần WSL2. Cả hai OS cần
python3.
Biến môi trường hữu ích: CASAN_HOME (đổi nơi cài), CASAN_SRC (cài từ checkout
cục bộ), CASAN_DIST_URL (tải tarball), CASAN_NO_PATH_LINK=1 (không tự thêm PATH).
2. Adopt vào một dự án bất kỳ
cd <dự-án-của-bạn>
casan init # project mới: interactive chọn runtime rồi client
# hoặc chọn level áp dụng cho project:
casan init --level 1 --project my-app --client claude
casan init --level 2 --project my-app --client claude,codex
casan init --project my-app --client vscode-copilot --vscode-install yes
casan init --runtime vendored --project offline-app --client claude,codex
casan level show # xem level đã cài + level project
casan level set 2 # đổi level project (không cần init lại)
Project mới chạy trong terminal tương tác sẽ được hỏi vị trí Core trước:
Managed (Recommended) hoặc Vendored, sau đó mới chọn client. Nhấn Enter dùng
Managed và Claude+Codex. Nhập sai sẽ được hỏi lại thay vì kết thúc bằng payload
khó đọc.
init và level show luôn in runtime mode/path. Project mới mặc định
managed; chạy lại init giữ nguyên mode đã chọn và không hỏi lại runtime.
Chuyển mode phải explicit:
casan init --runtime managed
casan init --runtime vendored
Áp dụng cho dự án ĐÃ có vỏ (agents/skills/hook sẵn): an toàn.
- Mặc định
casan initáp dụng Level 1/core: governance config + hooks, không thêm.giteaworkflow hoặc domain-pack. Level cài global vẫn phải là DevKit vì lệnh adoption nằm trong DevKit. initKHÔNG index/parse code, KHÔNG sửa source, KHÔNG dựng lại vỏ — chỉ thêm config.- Hook được MERGE idempotent vào
.claude/settings.json/.codex/hooks.jsonhiện có (giữ nguyên hook/agents/skills/khóa khác của bạn), không ghi đè. Chạyinitnhiều lần không nhân đôi hook. - Guardrail:
inittừ chối khi target chính là một CASAN source hub (để không tự chặn agent đang phát triển CASAN); dùng--forcenếu thực sự cần. - Project cũ có vendored
packages/casan-harnesskhông bị xem là source hub: init tự migrate sang hybrid, giữ nguyên harness/CI/scripts cũ để tương thích và không yêu cầu--force.
--level 3 (platform) chỉ áp base L2 + nhắc rằng platform là service deploy riêng;
--level 4 (enterprise) bị từ chối (chưa ship).
casan uninstall xóa workflow CASAN trong .gitea và các scaffold file còn
nguyên checksum, sau đó prune thư mục rỗng. Workflow của project và scaffold
file đã chỉnh sửa được giữ lại. Thêm --purge để xóa cả runtime evidence
.specify/logs và .specify/state.
casan init luôn ghi config per-project:
| File | Vai trò |
|---|---|
.casan/config.json |
project id, enforcement/integration mode, clients |
.casan/version.lock |
pin harness version + hash gate-code |
.casan/agentic.env |
feature flags bridge Plan-20 |
.casan/casan-hook.py |
bootstrap stdlib: load config, resolve + verify Core managed/vendored, dispatch adapter |
.specify/ |
thư mục state runtime (logs/trace/admission) |
.claude/settings.json |
hook Claude Code (Plan-20) |
.codex/hooks.json |
hook Codex theo schema hiện hành; cần review/trust bằng /hooks |
.vscode/extensions.json |
recommendations cho IDE đã chọn |
.casan/runtime/casan-core/ |
Chỉ mode vendored: CLI + Core runtime production-only |
Tham số --client có thể lặp hoặc comma-separated:
claude, codex, vscode-copilot, all, none. Khi chạy casan init trực
tiếp trong terminal, CLI hiển thị menu chọn. Trong automation, dùng
--non-interactive và khai báo rõ runtime/client:
casan init --non-interactive --level core --runtime managed \
--mode enforce --client claude,codex
--non-interactive, --json hoặc môi trường không có TTY không bao giờ chờ
input. Khi không truyền lựa chọn, mặc định là Managed và claude,codex.
Các command dành cho người vận hành (init, doctor, verify-harness,
level show, uninstall) mặc định in bản tóm tắt dễ đọc. Thêm --json sau
command để lấy payload đầy đủ cho automation, ví dụ:
casan init --client claude,codex --json
casan doctor --json
casan level show --json
--mode observe|enforce mặc định enforce; dùng observe chỉ cho pilot
telemetry-only. --integration-mode nhận
project_hook|managed_hook|casan_owned; --target <dir> mặc định là thư mục
hiện tại.
Bootstrap .casan/casan-hook.py tự đọc config.json; developer không còn phải
source .casan/agentic.env trước khi mở IDE. Mỗi invocation resolve Core theo
runtime mode rồi kiểm tra live hash so với version.lock trước khi chạy
adapter. Codex gọi bootstrap bằng đường dẫn tương đối từ project root, không
phụ thuộc git rev-parse; Git vẫn được khuyến nghị để có provenance, diff và
rollback đáng tin cậy.
Project đã có .claude, .github, agents, skills hoặc CASAN vendored
Chỉ cần commit/backup trạng thái hiện tại, cài CASAN global rồi chạy init tại project root, kể cả khi đường dẫn có khoảng trắng:
cd '/path/to/Basic Design (Screen&Report)_v2.7'
casan init --project basic-design-v27 --client claude,codex,vscode-copilot
casan doctor
Quy tắc migration:
.claude/agents,.claude/skills,.claude/commands,.github/**và workflow hiện hữu không bị xóa hoặc ghi đè.- CASAN chỉ merge handler của mình vào
.claude/settings.jsonvà.codex/hooks.json; cấu hình/hook không thuộc CASAN được giữ nguyên. - Nếu có CASAN vendored cũ,
packages/casan-harness,bin/casan-chat, CI và evidence cũ được giữ lại. Chỉ xóa chúng sau khi CI/scripts/domain smoke đã chuyển sang harness global. - Block legacy nằm đúng giữa marker
CASAN_PROMPT_ENFORCEMENT_START/ENDđược nâng cấp tự động. - Prose legacy nằm ngoài marker không bị sửa âm thầm;
initvàdoctorliệt kê file cần review. Đặc biệt phải bỏ tuyên bố cũ rằng Claude/Codex direct chat luôn nằm ngoài CASAN, vì Plan-20 project hooks đã thay đổi hành vi đó. - Codex vẫn cần
/hookstrust; Copilot built-in vẫn cần explicit@casan.
Sau init, developer gõ prompt bình thường trong client — trace H1→H7 + H6 theo
Plan-20. Managed mode nâng cấp runtime ở $CASAN_HOME; vendored mode được nâng
cấp có chủ đích bằng cách chạy lại casan init --runtime vendored từ release
đã duyệt.
Capability theo client
| Lựa chọn | Local surface được hỗ trợ | Bước trust/cài đặt bắt buộc |
|---|---|---|
claude |
Claude Code CLI, VS Code extension và JetBrains integration dùng chung project settings/hooks | Mở trusted project; hook chạy tự động |
codex |
Codex desktop app (Local), CLI và IDE extension (Local) dùng .codex/hooks.json |
Mở /hooks, review và trust đúng hook hash |
vscode-copilot |
GitHub Copilot Chat qua route explicit @casan |
Cài VSIX do init tạo/cài; dùng @casan <prompt> |
Không gắn badge project-hook cho Codex Cloud/Web, Claude Desktop hoặc claude.ai. Các surface đó không chạy local project hook; muốn support phải có remote/managed integration riêng và một qualification suite riêng.
GitHub Copilot Chat mặc định không có public API để CASAN intercept mọi
prompt. Chỉ route @casan là casan_owned; participant detection/built-in
Copilot không được quảng bá là certified.
Kiểm tra sau init:
casan doctor
casan doctor --client claude
casan doctor --client codex
casan doctor --client vscode-copilot
Với Codex, doctor đọc trạng thái hiệu lực bằng API hooks/list của chính
codex app-server. Nếu toàn bộ CASAN hook của project đang trusted, kết quả
là READY và không yêu cầu Allow lại. Action /hooks chỉ xuất hiện khi hook
thực sự untrusted/modified, bị tắt, hoặc máy hiện tại không thể xác minh
trust state. Hash toàn file .codex/hooks.json trong init-manifest.json là
checksum ownership phục vụ uninstall an toàn; nó không phải per-hook
trusted_hash mà Codex dùng để quyết định trust.
Gỡ khỏi project
casan uninstall
Command này xóa CASAN project hooks, bootstrap và config nhưng giữ nguyên hook
người dùng, CI/domain files, .casan-bak, VS Code extension dùng chung và
.specify evidence. Nếu project dùng vendored mode, toàn bộ
.casan/runtime/casan-core cũng bị xóa. Dùng --purge nếu chủ động muốn xóa
runtime logs/state; dùng --remove-vscode-extension nếu chắc chắn không project
nào khác trên máy còn dùng route @casan.
3. Pin + Verify (giữ đảm bảo bảo mật khi harness ở ngoài repo)
Vì harness không nằm trong repo, dự án pin version + hash gate-code lúc
init. Kiểm tra bất cứ lúc nào:
casan verify-harness
- Khớp → hiển thị
Harness integrity verified(rc 0);--jsontrả"status": "ok". - Harness global bị đổi/tamper so với pin →
HARNESS_INTEGRITY_DRIFT(rc 3).
verify-harness luôn tính lại hash từ file thật (không tin hash cache), nên
sửa lén một gate script sẽ bị phát hiện. Nên chạy verify-harness trong CI trước
khi tin bất kỳ trace nào là certified.
Bước làm mạnh tiếp theo (chưa bật mặc định): ký
.harness-hashbằng khóa tổ chức để verify cả chữ ký chứ không chỉ nội dung — dùng hạ tầng ký của Plan-16.
4. Chọn runtime mode
Vendored (casan init --runtime vendored) |
Managed (casan init) |
|
|---|---|---|
| Repo | Tự chứa Core production-only | Nhẹ, chỉ config/lock/hooks |
| Nâng cấp | Explicit theo từng repo | Tập trung ở $CASAN_HOME |
| Bảo mật | Core local + pin/hash verify | Core global + pin/hash verify |
| CI/offline | Phù hợp air-gapped | Runner phải cài đúng CASAN release |
| Khuyến nghị | Khách hàng offline/regulated | Mặc định cho workstation và managed CI |
Cả hai dùng đúng cùng production allowlist và lõi harness; không mode nào mang
theo tests, legacy level5, internal runners hay Platform-only helpers.
5. Kiểm thử
bash packages/casan-devkit/tests/hybrid-install-tests.sh