4 điểm bởi GN⁺ 2 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Claude Code đọc trực tiếp codebase đang hoạt động bằng cách duyệt hệ thống tệp trên máy của lập trình viên cùng với grep và lần theo tham chiếu, mà không cần tải lên chỉ mục
  • Hiệu năng không chỉ phụ thuộc vào mô hình mà còn bị chi phối lớn bởi harness gồm CLAUDE.md, hooks, skills, plugins, máy chủ MCP và thứ tự triển khai chúng
  • Trong các kho mã lớn, CLAUDE.md mỏng và phân tầng, bắt đầu từ thư mục con, test/lint theo phạm vi và các quy tắc loại trừ giúp tăng hiệu quả khám phá
  • Tích hợp LSP cung cấp theo dõi định nghĩa và tham chiếu dựa trên symbol thay vì tìm kiếm chuỗi, giúp giảm việc điều hướng sai trong codebase đa ngôn ngữ và quy mô lớn
  • Để triển khai thành công, cần rà soát cấu hình mỗi 3–6 tháng và có DRI hoặc agent manager để quản lý plugin, quyền hạn và quy tắc

Claude Code điều hướng như thế nào trong các codebase quy mô lớn

  • Claude Code đi qua hệ thống tệp như một kỹ sư phần mềm, đọc tệp, dùng grep để tìm nội dung cần thiết và lần theo các tham chiếu trên toàn bộ codebase
  • chạy cục bộ trên máy của lập trình viên, không cần xây dựng, duy trì hay tải chỉ mục codebase lên máy chủ
  • Các công cụ AI coding dựa trên RAG nhúng toàn bộ codebase và truy xuất các đoạn liên quan tại thời điểm truy vấn, nhưng trong môi trường quy mô lớn, pipeline embedding có thể không theo kịp tốc độ phát triển rất cao
  • Nếu chỉ mục phản ánh trạng thái từ vài tuần, vài ngày hoặc vài giờ trước, nó có thể trả về các hàm đã đổi tên hoặc module đã bị xóa từ sprint trước, mà cũng không có tín hiệu nào cho biết thông tin đó đã lỗi thời
  • Tìm kiếm theo kiểu agent của Claude Code cho phép mỗi phiên bản của lập trình viên làm việc dựa trên codebase đang sống, không cần pipeline embedding hay chỉ mục tập trung
  • Tuy vậy cũng có nhược điểm: Claude hoạt động tốt nhất khi có đủ ngữ cảnh khởi đầu để biết nên nhìn vào đâu
  • Nếu yêu cầu nó tìm mọi trường hợp của một mẫu mơ hồ trong codebase một tỷ dòng, nó có thể chạm giới hạn cửa sổ ngữ cảnh trước cả khi công việc thật sự bắt đầu
  • Những đội ngũ thiết lập codebase tốt và phân tầng ngữ cảnh bằng các tệp CLAUDE.md cùng skills sẽ có kết quả tốt hơn

Harness quan trọng không kém mô hình

  • Hiệu năng của Claude Code phụ thuộc rất lớn vào harness được xây quanh mô hình hơn là bản thân mô hình
  • Harness gồm năm điểm mở rộng: CLAUDE.md, hooks, skills, plugins và máy chủ MCP
  • Mỗi lớp đều được xếp chồng lên lớp trước, vì vậy thứ tự mà đội ngũ xây dựng chúng cũng rất quan trọng
  • Tích hợp LSP và subagents hoạt động như những năng lực bổ sung cho cấu hình này
  • Tệp CLAUDE.md

    • CLAUDE.mdtệp ngữ cảnh mà Claude tự động đọc khi bắt đầu mọi phiên
    • Tệp ở thư mục gốc chứa bức tranh lớn, còn các tệp trong thư mục con chứa quy tắc cục bộ
    • Vì nó được nạp trong mọi phiên, nên cần tập trung vào nội dung áp dụng rộng để tránh làm giảm hiệu năng
  • Hooks

    • Hooks không chỉ là script ngăn Claude có hành vi sai, mà còn có giá trị lớn hơn trong việc liên tục cải thiện cấu hình
    • Stop hook có thể nhìn lại những gì đã xảy ra trong phiên và đề xuất cập nhật CLAUDE.md khi ngữ cảnh vẫn còn mới
    • Start hook có thể nạp động ngữ cảnh theo từng đội, để lập trình viên nhận được cấu hình phù hợp với module của mình mà không cần thiết lập thủ công
    • Các kiểm tra tự động như linting và formatting cho kết quả nhất quán hơn khi dùng hook để thực thi quy tắc một cách xác định, thay vì trông chờ Claude nhớ chỉ dẫn
  • Skills

    • Skills giúp giữ chuyên môn theo nhu cầu mà không làm mọi phiên bị phình to
    • Một codebase lớn có thể có hàng chục loại công việc, nhưng không cần mọi chuyên môn đều xuất hiện trong mọi phiên
    • Skills dùng progressive disclosure để giữ workflow chuyên biệt và tri thức miền ở ngoài không gian ngữ cảnh, chỉ nạp khi cần
    • Ví dụ, skill review bảo mật được nạp khi Claude đánh giá lỗ hổng, còn skill xử lý tài liệu được nạp khi cần cập nhật tài liệu sau thay đổi mã nguồn
    • Skills có thể được giới hạn theo đường dẫn cụ thể, để skill triển khai của đội dịch vụ thanh toán chỉ gắn với thư mục đó và không tự động nạp khi làm việc ở vùng khác của monorepo
  • Plugins

    • Plugins là cách phân phối để một cấu hình tốt không bị giữ lại như tri thức ngầm
    • Plugin đóng gói skills, hooks và cấu hình MCP thành một gói có thể cài đặt
    • Khi kỹ sư mới cài plugin ngay ngày đầu, họ lập tức có cùng ngữ cảnh và chức năng như những người đã dùng Claude từ trước
    • Các bản cập nhật plugin có thể được phân phối trên toàn tổ chức thông qua managed marketplaces
    • Một tổ chức bán lẻ lớn đã tạo skill kết nối Claude với nền tảng phân tích nội bộ để chuyên viên phân tích kinh doanh có thể lấy dữ liệu hiệu suất mà không rời workflow, rồi phân phối nó dưới dạng plugin trước khi rollout toàn doanh nghiệp
  • Tích hợp Language Server Protocol

    • Tích hợp Language Server Protocol (LSP) mang lại cho Claude khả năng điều hướng mã tương tự IDE của lập trình viên
    • Hầu hết IDE cho codebase lớn đã chạy LSP để hỗ trợ “go to definition” và “find all references”
    • Khi đưa điều này cho Claude, nó có được độ chính xác ở mức symbol để lần theo lời gọi hàm đến định nghĩa, theo dõi tham chiếu trên nhiều tệp và phân biệt các hàm cùng tên ở các ngôn ngữ khác nhau
    • Nếu không có LSP, Claude phải dựa vào so khớp mẫu văn bản và có thể đi tới nhầm symbol
    • Một công ty phần mềm doanh nghiệp đã triển khai tích hợp LSP trên toàn tổ chức trước khi rollout Claude Code để ổn định việc điều hướng C và C++ ở quy mô lớn
    • Trong codebase đa ngôn ngữ, đây là một trong những khoản đầu tư có giá trị cao nhất
  • Máy chủ MCP

    • Máy chủ MCP là cách Claude kết nối tới công cụ nội bộ, nguồn dữ liệu và API mà nó không thể tự chạm tới trực tiếp
    • Những đội ngũ trưởng thành nhất xây dựng máy chủ MCP để lộ ra tìm kiếm có cấu trúc như các công cụ mà Claude có thể gọi trực tiếp
    • Các đội khác dùng nó để kết nối Claude với tài liệu nội bộ, hệ thống ticket và nền tảng phân tích
  • Subagents

    • Subagents tách riêng việc khám phá và chỉnh sửa
    • Subagent là một phiên bản Claude biệt lập với cửa sổ ngữ cảnh riêng, nhận việc, thực hiện rồi chỉ trả kết quả cuối cùng về cho agent cha
    • Sau khi đã có harness, một số đội khởi chạy subagent chỉ đọc để lập bản đồ các subsystem và ghi kết quả ra tệp, rồi để agent chính chỉnh sửa dựa trên bức tranh tổng thể
  • Vai trò của từng thành phần và các nhầm lẫn thường gặp

    • CLAUDE.md: tệp ngữ cảnh mà Claude tự động đọc và được nạp trong mọi phiên. Phù hợp cho quy tắc theo dự án và tri thức về codebase, nhưng dễ bị nhồi cả chuyên môn tái sử dụng lẽ ra nên nằm trong skill
    • Hooks: script chạy tại các thời điểm then chốt và được kích hoạt bởi sự kiện. Phù hợp để tự động hóa hành vi nhất quán và ghi nhận bài học từ phiên, nhưng dễ biến thứ nên tự chạy thành thứ xử lý bằng prompt
    • Skills: chỉ dẫn được đóng gói cho các loại tác vụ cụ thể và được nạp theo nhu cầu khi liên quan. Phù hợp cho chuyên môn tái sử dụng qua nhiều phiên và dự án, nhưng dễ bị nhét mọi thứ vào CLAUDE.md
    • Plugins: gói bundle gồm skills, hooks và cấu hình MCP, luôn sẵn dùng sau khi thiết lập. Phù hợp để phân phối cấu hình hiệu quả trên toàn tổ chức, nhưng dễ để cấu hình tốt chỉ tồn tại như tri thức ngầm
    • LSP: code intelligence thời gian thực qua server theo ngôn ngữ, luôn sẵn dùng sau khi thiết lập. Phù hợp cho điều hướng mức symbol trong ngôn ngữ có kiểu và phát hiện lỗi tự động, nhưng dễ bị cho là mặc định đã hoạt động
    • Máy chủ MCP: kết nối tới công cụ và dữ liệu bên ngoài, luôn sẵn dùng sau khi thiết lập. Phù hợp để truy cập các công cụ nội bộ mà Claude không thể chạm trực tiếp, nhưng dễ lao vào làm kết nối MCP trước khi phần nền tảng cơ bản hoạt động
    • Subagents: các phiên bản Claude riêng cho tác vụ cụ thể, chạy khi được gọi. Phù hợp để tách khám phá và chỉnh sửa cũng như xử lý song song, nhưng dễ xử lý cả khám phá lẫn chỉnh sửa trong cùng một phiên
    • LSP được truy cập qua lớp plugin, còn subagents không phải là điểm mở rộng được cấu hình mà là năng lực ủy nhiệm

Ba mẫu cấu hình lặp lại trong các đợt triển khai thành công

  • Tạo codebase có thể khám phá ngay cả ở quy mô lớn

    • Mức độ mà Claude có thể hỗ trợ trong codebase lớn bị giới hạn bởi khả năng tìm đúng ngữ cảnh
    • Nếu nạp quá nhiều ngữ cảnh vào mọi phiên thì hiệu năng giảm, còn quá ít ngữ cảnh sẽ khiến Claude phải khám phá trong trạng thái “mù”
    • Các triển khai hiệu quả đầu tư sớm vào việc làm cho codebase dễ đọc đối với Claude
    • Giữ các tệp CLAUDE.md mỏng và có phân tầng

      • Claude nạp cộng dồn các tệp CLAUDE.md khi di chuyển trong codebase
      • Tệp ở thư mục gốc lo phần bức tranh lớn, còn các tệp ở thư mục con lo quy tắc cục bộ
      • Tệp gốc chỉ nên chứa các con trỏ và cảnh báo nghiêm trọng; mọi thứ khác dễ trở thành nhiễu
    • Bắt đầu từ thư mục con thay vì gốc của kho mã

      • Claude hoạt động tốt nhất khi phạm vi được giới hạn vào phần của codebase thực sự liên quan đến tác vụ
      • Trong monorepo, điều này có thể đi ngược trực giác vì nhiều công cụ giả định quyền truy cập từ thư mục gốc
      • Claude tự động đi ngược lên cây thư mục và nạp mọi tệp CLAUDE.md mà nó tìm thấy, vì vậy ngữ cảnh cấp root không bị mất
    • Giới hạn lệnh test và lint theo từng thư mục con

      • Nếu Claude chỉ thay đổi một service mà lại chạy toàn bộ test suite, nó sẽ bị timeout và lãng phí ngữ cảnh vào đầu ra không liên quan
      • Tệp CLAUDE.md của thư mục con nên chỉ rõ các lệnh áp dụng cho phần codebase đó
      • Cách này hoạt động tốt trong các codebase hướng dịch vụ nơi mỗi thư mục có test và lệnh build riêng
      • Với monorepo ngôn ngữ biên dịch có phụ thuộc chéo sâu giữa các thư mục, việc giới hạn theo thư mục con khó hơn và có thể cần cấu hình build theo từng dự án
    • Dùng tệp .ignore để loại trừ tệp sinh ra, đầu ra build và mã bên thứ ba

      • Nếu commit quy tắc permissions.deny vào .claude/settings.json, các quy tắc loại trừ sẽ được quản lý bằng version control
      • Mọi lập trình viên trong nhóm đều nhận được cùng hiệu quả giảm nhiễu mà không cần cấu hình riêng
      • Trong một số codebase, bản thân tệp sinh ra lại chính là đối tượng cần phát triển
      • Lập trình viên xử lý code generator có thể ghi đè các quy tắc loại trừ cấp dự án trong cấu hình cục bộ mà không ảnh hưởng phần còn lại của nhóm
    • Xây dựng bản đồ codebase nếu cấu trúc thư mục là chưa đủ

      • Ở các tổ chức nơi mã không được gom vào cấu trúc thư mục thông thường, một tệp Markdown nhẹ ở thư mục gốc có thể hữu ích
      • Một dòng mô tả cho từng thư mục cấp cao nhất và nội dung bên trong sẽ tạo thành mục lục để Claude lướt qua trước khi mở tệp
      • Nếu có hàng trăm thư mục cấp cao nhất, cách tốt nhất là tiếp cận phân tầng: tệp gốc chỉ mô tả cấu trúc cao nhất, còn CLAUDE.md trong thư mục con cung cấp chi tiết cấp tiếp theo theo nhu cầu
      • Trong trường hợp đơn giản hơn, chỉ cần nhắc tới các tệp hoặc thư mục cụ thể bằng @ mà Claude nên tham chiếu cũng có thể làm vai trò tương tự
    • Dùng máy chủ LSP để tìm kiếm theo symbol thay vì chuỗi

      • Nếu grep một tên hàm phổ biến trong codebase lớn, bạn có thể nhận hàng nghìn kết quả khớp, và Claude sẽ phải mở tệp để phán đoán điều gì quan trọng, từ đó tiêu tốn ngữ cảnh
      • LSP chỉ trả về các tham chiếu trỏ tới cùng một symbol, nên việc lọc diễn ra trước cả khi Claude phải đọc bất cứ thứ gì
      • Để thiết lập, cần cài code intelligence plugin cho ngôn ngữ đó và binary language server tương ứng
      • Tài liệu Claude Code có danh sách plugin khả dụng và cách khắc phục sự cố
    • Ngoại lệ

      • Cách tiếp cận CLAUDE.md phân tầng cũng có những edge case nơi nó không còn hiệu quả
      • Ví dụ là các codebase có hàng trăm nghìn thư mục và hàng triệu tệp, hoặc các hệ thống legacy dùng quản lý phiên bản không phải Git
  • Bảo trì các tệp CLAUDE.md theo sự thay đổi về trí tuệ mô hình

    • Khi mô hình phát triển, các chỉ dẫn được viết cho mô hình hiện tại có thể trở thành vật cản với mô hình tương lai
    • Các quy tắc trong CLAUDE.md từng giúp Claude với những mẫu khó trong quá khứ có thể trở nên không cần thiết hoặc thậm chí thành ràng buộc đối với mô hình mới
    • Ví dụ, một quy tắc yêu cầu chia mọi refactor thành thay đổi trong một tệp có thể từng giúp mô hình cũ giữ mạch, nhưng lại ngăn mô hình mới thực hiện tốt các chỉnh sửa nhiều tệp có phối hợp
    • Các skills và hooks được tạo để bù cho hạn chế cụ thể trong suy luận của mô hình hoặc công cụ Claude Code sẽ trở thành overhead khi những hạn chế đó biến mất
    • Một hook chặn ghi tệp để ép p4 edit trong codebase Perforce trở nên dư thừa sau khi Claude Code bổ sung chế độ Perforce gốc
    • Các đội nên dự kiến một đợt rà soát cấu hình có ý nghĩa mỗi 3–6 tháng
    • Sau các bản phát hành mô hình lớn, nếu cảm thấy hiệu năng đang chững lại thì việc rà soát cấu hình cũng rất đáng làm
  • Chỉ định quyền sở hữu cho quản trị và triển khai Claude Code

    • Chỉ có cấu hình kỹ thuật thôi thì chưa đủ để việc áp dụng xảy ra
    • Các đợt rollout lan nhanh nhất đều có đầu tư hạ tầng trước khi mở quyền truy cập rộng rãi
    • Một nhóm nhỏ, đôi khi chỉ một người, đã kết nối công cụ để khi lập trình viên chạm vào Claude lần đầu, nó đã vận hành theo đúng workflow của họ
    • Ở một công ty, vài kỹ sư đã xây sẵn gói plugin và MCP có thể dùng ngay từ ngày đầu
    • Ở công ty khác, một đội chuyên quản lý công cụ AI coding đã chuẩn bị hạ tầng trước rollout
    • Công việc này thường nằm trong tổ chức developer experience hoặc developer productivity, vốn cũng phụ trách onboarding kỹ sư mới và xây công cụ cho lập trình viên
    • Ở nhiều tổ chức, đang xuất hiện vai trò agent manager — một vai trò PM/kỹ sư lai để quản lý hệ sinh thái Claude Code
    • Nếu không có đội chuyên trách, hình thức tối thiểu khả thi là một DRI
    • DRI này cần sở hữu cấu hình Claude Code, các quyết định cấu hình, chính sách quyền hạn, plugin marketplace và trách nhiệm giữ cho các quy tắc CLAUDE.md luôn cập nhật
    • Việc áp dụng từ dưới lên giúp tạo nhiệt huyết, nhưng nếu không có ai tập trung hóa những gì hiệu quả thì dễ bị phân mảnh
    • Cần có một cá nhân hoặc đội ngũ để thu thập và lan truyền các quy ước Claude Code như phân tầng CLAUDE.md chuẩn hóa hoặc các skills và plugins đã được tuyển chọn
    • Nếu không có công việc này, tri thức sẽ tiếp tục là tri thức ngầm và việc áp dụng sẽ chững lại

Governance và rollout

  • Ở các tổ chức lớn, đặc biệt trong các ngành được quản lý, các câu hỏi về governance xuất hiện rất sớm
  • Những điểm chính bao gồm ai kiểm soát skills và plugins nào được phép dùng, cách tránh để hàng nghìn kỹ sư độc lập tạo lại cùng một thứ, và cách bảo đảm mã do AI tạo ra đi qua quy trình review như mã do con người viết
  • Giai đoạn đầu nên bắt đầu bằng một tập skills đã được phê duyệt, quy trình code review bắt buộc và quyền truy cập ban đầu bị giới hạn, rồi mở rộng dần khi niềm tin tăng lên
  • Những đợt triển khai mượt mà nhất đến từ các tổ chức sớm lập nhóm công tác liên chức năng với đại diện từ engineering, infosec và governance để cùng xác định yêu cầu và lộ trình rollout

Các giả định và giới hạn khi áp dụng vào tổ chức

  • Claude Code được thiết kế chủ yếu cho môi trường kỹ thuật phần mềm truyền thống, nơi kỹ sư là người đóng góp chính cho codebase, kho mã dùng Git và mã tuân theo cấu trúc thư mục chuẩn
  • Phần lớn codebase quy mô lớn phù hợp với khuôn mẫu này, nhưng game engine có tài sản nhị phân lớn, môi trường quản lý phiên bản phi truyền thống hoặc môi trường nơi người không phải kỹ sư cũng đóng góp vào codebase sẽ cần thêm công việc cấu hình
  • Các mẫu được trình bày giả định bối cảnh truyền thống và đã hoạt động trong nhiều môi trường khách hàng
  • Phần phức tạp còn lại cần được đánh giá theo codebase, công cụ và cấu trúc tổ chức của từng nơi
  • Đội Applied AI của Anthropic làm việc trực tiếp với các nhóm kỹ thuật để chuyển các mẫu này thành yêu cầu cụ thể của từng tổ chức

1 bình luận

 
Ý kiến Hacker News
  • Cách diễn đạt rằng nó khám phá codebase “như một kỹ sư phần mềm” có vẻ mâu thuẫn với chính kết luận
    Tự động hoàn thành hay LSP lúc nào cũng được dùng và hữu ích, mà đó cũng là một dạng lập chỉ mục phải không? Cũng khó hiểu vì sao Claude lại không thể dùng những thứ đó
    Kỹ sư phần mềm cũng ghi nhớ codebase, mà điều đó thực chất khá giống RAG, và còn có rất nhiều trí nhớ cơ bắp kiểu CMD+P tự động hoàn thành để tìm đúng file cần thiết
    Với toàn bộ codebase nơi hàng nghìn kỹ sư cùng thay đổi đồng thời thì không nhất thiết phải theo thời gian thực, chỉ cần nhìn tốt nhánh tôi đang làm là được
    Hiếm khi người ta đi duyệt file system ngay từ đầu để khám phá codebase, thường chỉ làm vậy với codebase mới, mà ngay cả khi đó cũng khó gọi là trải nghiệm tối ưu

    • Đó chính xác là cách tôi làm việc
      Tôi đã học cách khám phá các codebase lớn từ thời chưa có LSP, và dùng vim trong thời gian dài nên thường tìm các file liên quan bằng grep
      Khi lần đầu dùng Claude Code năm ngoái, cảm giác của tôi là “ủa, nó làm đúng hệt như cách mình định làm”
    • Câu trả lời nằm ngay ở phần mở đầu bài viết
      Tiền đề là Claude Code đang được vận hành trên các monorepo hàng triệu dòng, các hệ thống legacy lâu đời hàng chục năm, và kiến trúc phân tán trải rộng qua hàng chục repo
      Vì vậy nó được tối ưu cho trường hợp chung là dùng các công cụ bền bỉ hoạt động ở mọi nơi, đặc biệt là trong những codebase lớn và lộn xộn
      Tuy vậy, nhận xét rằng với repo nhỏ, được tổ chức tốt thì có thể và nên dùng công cụ tốt hơn cũng là đúng
      Ít nhất Codex hoạt động theo kiểu đó, ví dụ nó dùng go doc trước khi grep
    • Trong codebase thực sự lớn thì grep và find bị timeout
      Nếu làm việc ở quy mô đó, bạn sẽ nhanh chóng nhận ra Claude không dùng các công cụ vốn được tạo ra để giúp việc tìm kiếm khả thi
    • Có rất nhiều cách diễn đạt nghe hợp lý trong vài đoạn ngắn, nhưng thực tế nó giống những khẳng định mang tính kỳ vọng hơn
      Cụm “như một kỹ sư phần mềm” chỉ đúng một phần
      Con người cũng dùng tìm kiếm symbol, nhưng là để tìm các symbol mà họ đang nhớ trong bối cảnh công việc cụ thể
      Cách Claude Code hiện tại lục tung symbol một cách bừa bãi khác với cách kỹ sư làm việc
      Chỉ một lỗi chính tả cũng có thể khiến agent kết luận rằng nó phải triển khai lại thứ gì đó, và kể cả khi may mắn đọc đúng file thì nó vẫn dễ bị ảo giác
      Đây cũng không phải cách người ta làm việc với codebase lớn
      Phần “dùng grep để tìm chính xác thứ cần thiết” khiến tôi đặc biệt băn khoăn
      Muốn grep thì phải biết grep cái gì, và nếu kết quả ra đến hàng nghìn dòng thì phải kiểm tra hết
      Khi gặp kết quả như vậy, con người sẽ nghĩ cách thu hẹp đầu ra thay vì cắm đầu lướt qua chúng một cách máy móc
      Cách tiếp cận trong bài giống phần biện minh cho phương pháp hiện tại hơn là một khuyến nghị vững chắc
      Câu “không cần lập chỉ mục codebase” cũng đúng, nhưng chỉ theo nghĩa là cuối cùng rồi bạn vẫn có thể tìm ra đáp án bằng cách grep-read-grep và bơm dần ngữ cảnh
      Nó nghe giống như nói “vì lập trình viên có thể tự làm mà không cần Claude Code, nên không cần Claude Code”
      Tôi cho rằng thông điệp “không cần” này là sai ở chỗ nó truyền quyết định đó đến cộng đồng như một chân lý tuyệt đối
      Nhìn chung, bài viết khá thẳng thắn về chi phí tổ chức
      Họ nói rằng ở nhiều tổ chức đang xuất hiện vai trò “agent manager”, pha trộn giữa PM và kỹ sư, để quản lý hệ sinh thái Claude Code, và các team phải rà soát cấu hình có ý nghĩa mỗi 3–6 tháng
      Điều này cho thấy rất chính xác thực tế của việc dùng Claude Code ở quy mô lớn mà không có sẵn một lớp code intelligence được xây dựng từ trước
      Hướng đi có vẻ đúng, nhưng đọc xong vẫn để lại cảm giác “chúng tôi chưa giải được bài toán và đây là giới hạn của mình”
    • Ngay cả khi khám phá một phần codebase từ đầu, vẫn có những phần gần như không bao giờ thay đổi, nên việc thăm dò lại mỗi lần là lãng phí token rất lớn
      Điểm tôi hay tranh cãi với Claude cũng là làm sao để nó khám phá ít hơn nhiều
      Tôi hiểu các phần hầu như không đổi đó rõ hơn và nhanh hơn nhiều so với việc nó quét qua theo cách chậm và tốn kém
      Thế mà lần nào nó cũng chui vào cùng một kiểu hang thỏ
  • Một giai thoại: tôi đang thiết kế một dự án cho onboarding và orchestration bằng LLM, thì Claude chọn cách chỉ đọc 40 dòng đầu của mỗi file
    Sau đó ở một session khác, khi truy nguyên nguyên nhân chất lượng thấp, Claude phát hiện ra khuyết điểm đó và sửa code để thực hiện phân tích AST bằng cách dùng các dòng tài liệu và input/output của function signature làm đầu vào
    Cách tiếp cận ban đầu của Claude thực sự rất tệ
    Điều này khiến tôi tự hỏi Claude Code phải được chỉnh sửa và rà soát đến mức nào mới có thể trở nên tốt, và liệu ngay từ đầu nó có tạo ra được code tốt hay không
    Nói rộng ra, Claude có thể sửa những quyết định tệ cục bộ, dễ nhận diện như “chỉ đọc 40 dòng đầu”
    Vì lỗi được tách biệt và có thể truy ra một đoạn code cụ thể
    Nhưng vấn đề chất lượng phần mềm ngoài đời thường là nhiều quyết định nhỏ, từng cái riêng lẻ đều có vẻ hợp lý, cộng lại thành kết quả tệ
    Lúc đó sẽ không có một “lỗi” nào rõ ràng cả, nên một công cụ tạo ra từng mảnh cấu phần chất lượng thấp có thể sẽ không hội tụ được thành code tốt, bởi vì từng mảnh tách riêng ra đều trông có vẻ ổn

    • Có vẻ nó được huấn luyện để nhìn mã nguồn qua một khe rất hẹp nhằm giữ ngữ cảnh
      Trong trường hợp như vậy, logic cấp dưới hoặc các sub-agent hoàn chỉnh có thể sẽ phù hợp
      Ví dụ có thể giao cho sub-agent kiểu “hãy quét file này và tóm tắt cho tôi, đánh dấu những phần liên quan đến X và Y, rồi tôi sẽ xem trong ngữ cảnh chính”
      Cũng có thể để nó định kỳ quan sát luồng công việc chính, rồi chen vào nếu thấy điều gì đó trong file mà nó đang nghĩ tới có liên quan đến tác vụ hiện tại hoặc có thể làm đổi hướng công việc
  • Claude Code hoạt động thế nào trên codebase lớn à? Đơn giản thôi
    Ngay cả với dự án nhỏ, chỉ prompt đầu tiên đã ăn tới 35% giới hạn sử dụng 5 giờ, và nếu nó không trả lời nhanh trong vòng 5 phút thì cache biến mất, prompt tiếp theo lại phải trả thêm 12–15%

    • Bài được liên kết giải thích cách tránh điều này
      Nếu thả nó vào codebase lớn một cách ngây thơ thì đúng là nó sẽ đốt rất nhiều token trong lúc tìm kiếm
  • Chẳng lẽ Claude Code không thể tự kiểm tra codebase rồi tự động tạo ra một harness hiệu quả sao?
    Tôi đã thử định nghĩa CLAUDE.md, AGENTS.md, skills và plugin, nhưng không đạt được hiệu quả như người khác nói
    Ví dụ dù có plugin LSP, Claude Code vẫn không dùng tính năng đổi tên symbol của LSP mà lại sửa file từng cái một theo cách chậm chạp, hoặc dù prompt có ghi rõ rằng khi có một số dấu hiệu nhất định thì phải gọi skill, nó vẫn không gọi
    Tôi đang dùng sai cách à? Không biết có ví dụ harness nào đủ vững để có thể sao chép dùng luôn không

    • Đây là một điểm đau kéo dài nhiều năm và đến giờ vẫn chưa được giải quyết chút nào
      Dù bạn bảo “nếu A thì làm X. Làm B, C, D. Làm A” thì nó vẫn đơn giản là không dùng X
      Lý do là vì nó “quên mất”
      Không thể tin rằng thời gian bỏ ra để tạo quy tắc rồi sẽ được đền đáp, nhưng lại có thể tin rằng sớm muộn gì nó cũng sẽ thất bại
      RAG, harness và skills đều từng hứa sẽ sửa được chuyện này, nhưng thực tế thì không
    • Tôi đã ngừng dùng /init và cũng không còn để file CLAUDE.md hay AGENTS.md mô tả codebase nữa
      Thứ duy nhất tôi giữ lại là cách khám phá codebase và nhắc dùng git log khi điều tra, mà ngay cả vậy có lẽ cũng bị trùng lặp
      Tôi cũng không biết câu trả lời là gì
      Codebase tôi đang làm vào khoảng 100 nghìn dòng, không chắc có tính là lớn hay không, nhưng cá nhân tôi thì đó là repo lớn nhất mình từng làm
    • Trong một số trường hợp, hooks có gắn script dường như hiệu quả vì chúng đưa thông tin vào cửa sổ ngữ cảnh
      Tôi đã phải loại bớt vài thông báo linter không cần thiết để giới hạn ngữ cảnh
      Các linter hoặc công cụ kiểm tra theo ngôn ngữ có thể cài qua kho gói của hệ điều hành rồi gọi từ script cũng hữu ích
      Sự kết hợp giữa model và ngữ cảnh skill cũng có thể tạo khác biệt
      Một skill từng “hoạt động” ở 4.6 có thể không còn hợp với 4.7; 4.7 cần chỉ dẫn tường minh hơn nhưng lại tương đối ổn định hơn 4.6
      Cập nhật skill cũng có thể giúp ích, và nên so sánh việc test và chạy trước/sau
      Claude Code còn đưa cả các lần gọi công cụ không cần thiết vào ngữ cảnh, nên ví dụ nếu bạn thích beads thì có thể phải kìm bớt tác vụ lại
  • Tôi không đồng ý với các khẳng định về lập chỉ mục codebase
    Trong PHPStorm hay các IDE JetBrains khác, lập chỉ mục hoạt động khá tốt

    • Lập chỉ mục của PHPStorm thật sự rất tuyệt
      Rất hiếm khi nó bị hỏng, mà có hỏng cũng sửa dễ dàng, và tôi chưa từng nhận được kết quả lỗi thời
      Nếu từng dùng công cụ tìm kiếm của Claude, bạn sẽ không ngạc nhiên khi thấy team đó chẳng hiểu gì về lập chỉ mục
      Tôi không hiểu nổi tại sao một công ty mà sản phẩm chủ lực là chat dạng văn bản lại khiến người dùng khó tìm kiếm văn bản ngay trong chính cuộc chat đó
    • Claude Code có thể dùng MCP của JetBrains để tận dụng phần lập chỉ mục đó
    • Khẳng định này thật kỳ lạ
      Có phải là bài AI rác không? GitHub Copilot cũng có lập chỉ mục cục bộ khá tốt
      Đưa code vào cơ sở dữ liệu vector đâu phải bài toán khó đến thế
  • Bài này chắc chắn là do Claude viết
    Có quá nhiều sự rườm rà mà nội dung thực chất thì chẳng bao nhiêu

  • Cách diễn đạt rằng nó còn bao gồm những ngôn ngữ như C, C++, C#, Java, PHP, tức các ngôn ngữ mà team không phải lúc nào cũng liên hệ với công cụ coding AI, nghe thật kỳ lạ
    Tại sao lại phải kỳ vọng Claude Code không hoạt động tốt với những ngôn ngữ đó? Vậy người ta đang nghĩ đến ngôn ngữ nào, Python và JavaScript à?

  • Trong một ngành mà cục diện thay đổi theo tháng chứ không chỉ vài tuần, thật thú vị khi đã có đủ thời gian để xuất hiện các mẫu hình rõ ràng, và rằng các mẫu hình đó lại thành công trên codebase lớn
    Tiêu chí thành công là gì? Không xóa nhầm database production à, hay là tốc độ của team tăng lên, vòng đời codebase dài hơn, hay đội vận hành hạnh phúc hơn?

    • Nếu công cụ AI làm bay database production, thì tôi cứ muốn nhắc mãi rằng đó là thất bại của chính bạn và tổ chức của bạn khi trao cho lập trình viên quyền production có thể xóa tài nguyên vận hành
      Tôi chưa từng làm ở công ty nào mà được cấp quyền truy cập không giới hạn ở mức đó
  • Dạo này mọi căng thẳng của tôi đều đến từ việc Claude Code không làm theo chỉ dẫn, và codebase càng lớn thì càng tệ
    Không nên hiểu lầm, Claude rất ấn tượng và tôi rất thích nó
    Nhưng hoàn toàn không thể chỉ thuê riêng Claude Code để bảo trì codebase hay thêm tính năng
    Tôi liên tục thêm các mục ghi nhớ về lỗi trước đây, nhưng vấn đề bỏ qua chỉ dẫn quan trọng vẫn xảy ra với xác suất khoảng 90%
    Cách duy nhất để tránh là ngồi giám sát mọi tác vụ và rà soát kết quả cực kỳ kỹ
    Claude Code rất tuyệt cho việc tài liệu hóa hoặc hiểu các codebase lớn, nhưng yếu ở những thay đổi đòi hỏi phải hiểu toàn cục
    Ví dụ trên toàn codebase có khoảng 10 mẫu registry dùng cho nhiều entity, và dù đã có quy tắc rõ ràng là “hãy dùng một mẫu registry này”, Claude Code vẫn tự triển khai riêng 4 registry độc lập cho từng entity
    Tôi đã gần như quát vào mặt Claude Code suốt nửa ngày để bắt nó làm đúng tác vụ đơn giản này, rồi cuối cùng tự sửa luôn để đỡ tốn thời gian và đỡ stress

  • Họ thậm chí còn không giải thích bằng thuật ngữ cụ thể rằng chính xác mỗi file CLAUDE.md cần chứa gì, nên tôi cũng không biết những file đó quan trọng đến mức nào

    • Cho cá: có thể đọc ở đây https://code.claude.com/docs/en/best-practices#write-an-effe...
      Dạy cách câu cá: 1) cài skill-creator chính thức 2) dùng liên kết trên để tạo claude-md-improver 3) bảo nó nghiên cứu chủ đề progressive-disclosure trong tài liệu chính thức để cải thiện skill 4) áp dụng skill mới vào file CLAUDE.md và chấp nhận thay đổi