Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Đường ống Hook

Binary precc-hook là cốt lõi của PRECC. Nó nằm giữa Claude Code và shell, xử lý mọi lệnh bash trong vòng dưới 5 mili giây.

Cách Claude Code gọi Hook

Claude Code hỗ trợ các hook PreToolUse – chương trình bên ngoài có thể kiểm tra và sửa đổi đầu vào công cụ trước khi thực thi. Khi Claude sắp chạy lệnh bash, nó gửi JSON đến precc-hook qua stdin và đọc phản hồi từ stdout.

Các giai đoạn Pipeline

Claude Code
    |
    v
+---------------------------+
| 1. Parse JSON stdin       |  Read the command from Claude Code
+---------------------------+
    |
    v
+---------------------------+
| 2. Skill matching         |  Query heuristics.db for matching skills (Pillar 4)
+---------------------------+
    |
    v
+---------------------------+
| 3. Directory correction   |  Resolve correct working directory (Pillar 1)
+---------------------------+
    |
    v
+---------------------------+
| 4. GDB check              |  Detect debug opportunities (Pillar 2)
+---------------------------+
    |
    v
+---------------------------+
| 5. RTK rewriting          |  Apply command rewrites for token savings
+---------------------------+
    |
    v
+---------------------------+
| 6. Emit JSON stdout       |  Return modified command to Claude Code
+---------------------------+
    |
    v
  Shell executes corrected command

Ví dụ: Đầu vào và đầu ra JSON

Đầu vào (từ Claude Code)

{
  "tool_input": {
    "command": "cargo build"
  }
}

PRECC phát hiện thư mục hiện tại không có Cargo.toml, nhưng ./myapp/Cargo.toml tồn tại.

Đầu ra (đến Claude Code)

{
  "hookSpecificOutput": {
    "updatedInput": {
      "command": "cd /home/user/projects/myapp && cargo build"
    }
  }
}

Nếu không cần sửa đổi, updatedInput.command sẽ trống và Claude Code sử dụng lệnh gốc.

Chi tiết các giai đoạn

Giai đoạn 1: Phân tích JSON

Đọc toàn bộ đối tượng JSON từ stdin. Trích xuất tool_input.command. Nếu phân tích thất bại, hook thoát ngay lập tức và Claude Code sử dụng lệnh gốc (thiết kế fail-open).

Giai đoạn 2: Khớp kỹ năng

Truy vấn cơ sở dữ liệu heuristic SQLite để tìm các kỹ năng có mẫu kích hoạt khớp với lệnh. Các kỹ năng được kiểm tra theo thứ tự ưu tiên. Cả kỹ năng TOML tích hợp và kỹ năng đã khai thác đều được đánh giá.

Giai đoạn 3: Sửa thư mục

Đối với các lệnh build (cargo, go, make, npm, python, v.v.), kiểm tra xem tệp dự án mong đợi có tồn tại trong thư mục hiện tại không. Nếu không, quét các thư mục lân cận để tìm kết quả khớp gần nhất và thêm cd <dir> && vào đầu.

Quá trình quét thư mục sử dụng chỉ mục hệ thống tệp được lưu trong bộ nhớ đệm với TTL 5 giây để duy trì tốc độ.

Giai đoạn 4: Kiểm tra GDB

Nếu lệnh có khả năng gây ra sự cố (ví dụ: chạy binary debug), PRECC có thể đề xuất hoặc chèn các wrapper GDB để thu thập đầu ra debug có cấu trúc thay vì log crash thô.

Giai đoạn 5: Viết lại RTK

Áp dụng các quy tắc RTK (Rewrite Toolkit) để rút ngắn lệnh dài dòng, loại bỏ đầu ra nhiễu hoặc tái cấu trúc lệnh để tiết kiệm token.

Backend tùy chọn bật: lowfat

Việc nén đầu ra có thể cắm thêm được. Theo mặc định, PRECC dùng RTK, và ủy quyền cho lean-ctx hoặc nushell khi chúng được cài đặt. lowfat là một backend tùy chọn bật bổ sung: cài đặt tệp nhị phân lowfat, đặt PRECC_LOWFAT=1, và PRECC sẽ bao các lệnh đủ điều kiện thành lowfat <command> — coi lowfat như một chế độ nén nữa mà bộ chọn thích ứng đo lường so với các chế độ khác và chọn theo từng lớp lệnh. Nó mặc định tắt; nếu không có PRECC_LOWFAT=1 thì không có gì thay đổi. Đừng cài đặt thêm hook Claude Code riêng của lowfat — cả hai sẽ cùng viết lại lệnh. precc doctor sẽ cảnh báo nếu phát hiện xung đột đó.

# Install lowfat (separately), then opt in:
export PRECC_LOWFAT=1

Giai đoạn 6: Phát JSON

Tuần tự hóa lệnh đã sửa đổi thành JSON và ghi ra stdout. Nếu không có thay đổi, đầu ra báo hiệu cho Claude Code sử dụng lệnh gốc.

Hiệu suất

Toàn bộ pipeline hoàn thành trong dưới 5 mili giây (p99). Các tối ưu hóa chính:

  • SQLite ở chế độ WAL cho đọc đồng thời không khóa
  • Các mẫu regex biên dịch trước để khớp kỹ năng
  • Quét hệ thống tệp được lưu trong bộ nhớ đệm (TTL 5 giây)
  • Không có cuộc gọi mạng trong đường dẫn nóng
  • Fail-open: mọi lỗi đều chuyển về lệnh gốc

Kiểm tra Hook thủ công

Bạn có thể gọi hook trực tiếp:

$ echo '{"tool_input":{"command":"cargo build"}}' | precc-hook
{"hookSpecificOutput":{"updatedInput":{"command":"cd /home/user/myapp && cargo build"}}}