Sử dụng Ferret

Dự án và URL

Một dự án là một thư mục (thường là thư mục gốc của repo). Mỗi dự án giữ các URL đã lưu của riêng nó, nên local, dev và production chỉ cách nhau một cú bấm.

#Thêm dự án

  1. Tệp → Mở thư mục dự án… (⌘O / CtrlO), Thêm dự án ở thanh bên, hoặc Thêm dự án trong menu dự án ở thanh tiêu đề.
  2. Chọn nguồn của dự án:
    • Trên máy tính này: chọn một thư mục.
    • Clone từ GitHub / GitLab: chọn một repository của bạn (được liệt kê qua thông tin đăng nhập gh hoặc glab) hoặc dán URL, chọn thư mục cha, rồi Ferret sẽ clone và mở nó.
    • Mở qua SSH: chọn một host từ ~/.ssh/config. Terminal và agent chạy trên máy từ xa; các review vẫn nằm trên máy tính này.

Tên mặc định là tên thư mục. Thêm một thư mục đã được đăng ký thì Ferret sẽ mở nó thay vì thêm lại (trên macOS và Windows, đường dẫn được so sánh không phân biệt chữ hoa chữ thường). Từ menu ở thanh bên, bạn có thể Đổi tên dự án hoặc Xóa khỏi danh sách. Việc xóa không bao giờ xóa thư mục.

Terminal mở trong thư mục dự án, và các review được lưu dưới <project>/.ferret/.

#Lưu URL

  1. Mở trang trong trình duyệt tích hợp.
  2. Bấm + (Lưu URL hiện tại) trên thanh công cụ của trình duyệt. URL hiện tại được điền sẵn.
  3. Nhập Tên rồi bấm Lưu.

Mỗi URL đã lưu có một loại trong Nội dung xem lại: Ứng dụng (ứng dụng bạn đang xây dựng), Thiết kế (Figma, Penpot, Canva, một bản prototype) hoặc Tài liệu / đặc tả (Google Docs, Notion, Confluence, một đặc tả Markdown trên GitHub, một tệp PDF). Loại được đoán từ URL và bạn có thể đổi. Xem Review cả thiết kế và tài liệu, không chỉ code.

Chỉ chấp nhận URL http:// và https://. Với URL của ứng dụng, nếu bạn giữ nguyên tên được gợi ý, tên sẽ được đoán từ host:

HostTên
localhost, 127.*, ::1, 0.0.0.0, *.localhostlocal
chứa dev, develop, developmentdev
chứa stg, stage, stagingstg
mọi trường hợp khácprd
URL đã lưu trên thanh công cụ của trình duyệt
URL đã lưu trên thanh công cụ của trình duyệt

#Panel mục tiêu review

Chuyển mục tiêu review và trang mà không dừng ghi.

Trong chế độ Feedback, panel Mục tiêu review ở bên phải liệt kê mọi thứ bạn có thể review trong dự án hiện tại. Chuyển mục tiêu không làm dừng việc ghi. Bật/tắt panel bằng Xem → Bật/tắt mục tiêu review (⌘⇧K / CtrlShiftK) hoặc Ẩn panel.

  • Đích: các URL đã lưu của dự án. Dưới mỗi URL là cây các trang bạn đã truy cập trên site đó. Những site bạn đã truy cập nhưng chưa lưu xuất hiện thành nhóm riêng.
  • Tệp: thư mục dự án. Một tệp được mở dưới dạng xem trước (Markdown và Mermaid được hiển thị, văn bản khác ở chế độ chỉ đọc), nên bạn cũng có thể review tài liệu. Biểu tượng bút chì (Mở trong editor) mở tệp trong editor.

Lọc mục tiêu lọc cùng lúc mục tiêu, trang và tệp, với cách khớp gần đúng giống Đi đến tệp…. Trong danh sách, ↑ ↓ Enter hoặc 1–9 để chuyển mục tiêu. Mở URL… mở một URL dùng một lần, và Lưu vào URL của dự án giữ lại URL đó.

Mục tiêu lấy từ projects[].urls trong settings.json (xem ví dụ). Mỗi mục cần một url, một launchCommand (chạy trong terminal, ví dụ để khởi động ứng dụng desktop), hoặc một windowMatch (cửa sổ cần ghi), và có thể có purpose (app, design hoặc doc). Chọn một mục tiêu là cửa sổ sẽ đặt nó làm nguồn ghi, nên không thể làm việc này trong lúc đang ghi. Các trang đã truy cập được ghi nhớ theo từng dự án, chỉ trên máy này (tối đa 200).

#Mở và chuyển môi trường

Bấm vào một URL đã lưu để mở nó. Nếu trang hiện tại nằm dưới một URL đã lưu khác, Ferret giữ nguyên path, query và hash, chỉ đổi origin. Ví dụ, đang ở http://localhost:3000/pricing?plan=pro, bấm prd sẽ mở https://example.com/pricing?plan=pro.

Chip khớp với trang hiện tại (tiền tố dài nhất) được làm nổi bật. Nhấp chuột phải vào chip hoặc dùng biểu tượng bút chì của nó để sửa hoặc Xóa. Khi mở một dự án mà chưa có URL trước đó, URL đã lưu đầu tiên của dự án sẽ được tải.

Các chip được nhóm theo loại: URL của ứng dụng trước, rồi đến thiết kế, rồi đến tài liệu, với một đường phân cách và một biểu tượng cho mỗi loại. Khi chuyển sang hoặc rời khỏi một thiết kế hay tài liệu, URL đã lưu của nó được mở nguyên dạng, không mang path theo.

#Review cả thiết kế và tài liệu, không chỉ code

Góp ý không nhất thiết phải về code. Bất cứ thứ gì mở được trong trình duyệt tích hợp đều có thể được ghi và đánh dấu bằng bút theo cùng cách: một thiết kế Figma hoặc Penpot, một bản prototype, một đặc tả trên Google Docs hoặc Notion, một tài liệu thiết kế trên GitHub, một tệp PDF. Hãy lưu các URL đó vào dự án trước buổi review, cạnh local và dev.

  1. Mở Sửa dự án… từ menu ở thanh bên (hoặc bấm + trên thanh công cụ của trình duyệt) rồi chọn Thêm đích.
  2. Dán URL. Liên kết figma.com trở thành Thiết kế, còn liên kết docs.google.com hoặc notion.so trở thành Tài liệu / đặc tả, với tên Figma hoặc Spec. Nếu đoán sai (ví dụ một bản prototype trên server của bạn), đổi loại trong Nội dung xem lại.
  3. Mở đích đó và đăng nhập một lần trong trình duyệt tích hợp nếu trang cần. Trình duyệt giữ cookie giữa các lần khởi động, nên bạn vẫn được đăng nhập.
  4. Ghi như bình thường: nói, chỉ vào, vẽ lên thiết kế hoặc tài liệu.

Góp ý ghi trên một thiết kế hay tài liệu được gắn nhãn loại đó trong tab Góp ý và trong feedback.md, và chỉ dẫn gửi tới agent cũng nói rõ điều này. Khi đó agent sửa thiết kế hoặc tài liệu thay vì sửa code:

  • Nếu tài liệu nằm trong dự án (một đặc tả Markdown, một ADR), agent sửa trực tiếp tệp đó.
  • Nếu agent không sửa được (một tệp Figma, một Google Doc), agent đánh dấu góp ý là Agent hỏi kèm chính xác thay đổi cần làm, để bạn tự áp dụng hoặc chuyển cho người khác.

Ví dụ: khi đọc đặc tả bảng giá trên Google Docs, bạn khoanh bảng các gói và nói "gói Pro bây giờ là 9.800 yên, không phải 8.800". feedback.md liệt kê góp ý dưới đích Spec với Kind: document, và agent trả lời bằng câu đã sửa cho đặc tả thay vì động vào code của trang bảng giá. Ghi đặc tả và ứng dụng đang chạy trong cùng một lần ghi, góp ý sẽ được tách theo đích, nên agent có thể cập nhật đặc tả trước rồi đến code hiện thực nó.

Các trang chưa lưu trên figma.com, docs.google.com, notion.so và các host tương tự cũng được nhận ra. Tệp trong thư mục dự án (Markdown, Mermaid) được review từ danh sách Tệp trong panel Mục tiêu review.

Giúp dịch trang này trên GitHub (mở trong tab mới)