- Claude Code đã tiến hóa vượt ra ngoài một công cụ lập trình đơn thuần để trở thành hệ điều hành tác nhân, một hệ thống đột phá hỗ trợ nhiều quy trình làm việc khác nhau thông qua truy cập hệ thống tệp và tích hợp lệnh Unix
- Đặc biệt, thông qua tích hợp với hệ thống ghi chú Obsidian, công cụ này tự động hóa việc ghi chép, nghiên cứu và sắp xếp tư duy, đồng thời hiện thực hóa một hệ điều hành ghi chú hoàn chỉnh có thể truy cập cả trên di động qua kết nối SSH
- Khả năng truy cập hệ thống tệp là yếu tố khác biệt cốt lõi, cho phép duy trì bộ nhớ và trạng thái giữa các cuộc hội thoại, từ đó giải quyết giới hạn cửa sổ ngữ cảnh và hạn chế bộ nhớ vốn là điểm yếu chí mạng của ChatGPT hay Claude chạy trên trình duyệt
- Triết lý Unix (tính đơn giản, khả năng kết hợp, xử lý luồng văn bản) khớp hoàn hảo với cách LLM sử dụng công cụ, cho thấy các nguyên tắc thiết kế từ 50 năm trước đang được tái khám phá như kiến trúc tối ưu cho các hệ thống AI hiện đại
- Thông qua các trường hợp ứng dụng thực tiễn như tự động hóa quản lý email (Inbox Magic) hay công cụ mã nguồn mở (Claudesidian), bài viết nhấn mạnh rằng hệ thống tác nhân dựa trên hệ thống tệp là nền tảng để xây dựng ứng dụng AI đáng tin cậy và có thể debug, hơn là những cấu trúc đa tác nhân phức tạp
Điều gì làm Claude Code trở nên đặc biệt
- Gần đây, trong các cuộc trò chuyện về AI, tôi luôn say sưa nói về những khả năng đáng kinh ngạc của Claude Code, và giải thích rằng công cụ này đã phát triển từ một trợ lý lập trình đơn thuần thành một hệ điều hành tác nhân hoàn chỉnh
- Điểm cốt lõi đặc biệt là tích hợp với ứng dụng ghi chú Obsidian; khác với Notion hay Evernote, Obsidian lưu toàn bộ tệp trên ổ cứng cục bộ dưới dạng tệp Markdown thông thường
- Nhờ đặc tính đó, nó trở thành mục tiêu lý tưởng cho các công cụ lập trình AI; ban đầu tôi bắt đầu với Cursor nhưng nhanh chóng chuyển sang Claude Code
- Tôi đã phụ thuộc vào hệ thống này đến mức cuối cùng còn dựng một máy chủ ở nhà, truy cập bằng SSH từ điện thoại thông minh để có thể ghi chú, đọc và sắp xếp suy nghĩ ngay cả khi đang di chuyển
- Vài tuần trước, tôi đã xuất hiện trên podcast AI & I của Dan Shipper để giải thích sâu hơn về hệ thống này; trong bài viết này, tôi chia sẻ thêm những insight mà tôi nhận ra sau đó
Vì sao Claude Code vượt trội hơn Cursor
- Rất khó trả lời câu hỏi “Điều gì khiến Claude Code đặc biệt?”, nhưng kết luận là không hẳn nó tốt hơn Cursor ở mọi mặt, mà là sự kết hợp của một số yếu tố cụ thể hoạt động cực kỳ xuất sắc
- Gần đây, tôi dùng nó nhiều hơn để xây dựng những thứ hoàn toàn mới trên nền các khả năng của Claude Code, thay vì chỉ làm việc với các codebase sẵn có
-
Sự hòa hợp hoàn hảo với triết lý Unix
- Bí mật của Claude Code nằm ở cách tiếp cận công cụ: thay vì hy sinh khả năng tiếp cận vì là ứng dụng chạy trên terminal, nó cung cấp năng lực mạnh mẽ là tích hợp lệnh Unix nguyên bản
- Triết lý Unix được Doug McIlroy ghi lại trong Bell System Technical Journal năm 1978, với bốn nguyên tắc cốt lõi:
- 1. Hãy tạo mỗi chương trình để nó làm tốt một việc. Với công việc mới, hãy xây mới thay vì thêm tính năng vào chương trình cũ
- 2. Hãy kỳ vọng đầu ra của mọi chương trình sẽ trở thành đầu vào cho một chương trình khác, kể cả khi chương trình đó còn chưa được biết đến
- 3. Hãy thiết kế và xây dựng phần mềm để có thể thử nghiệm sớm, lý tưởng là trong vòng vài tuần
- 4. Hãy dùng công cụ để làm nhẹ công việc lập trình thay vì dựa vào lao động thiếu kỹ năng
- Phiên bản được Peter H. Salus tóm tắt trong “A Quarter-Century of Unix” năm 1994:
- Hãy viết những chương trình làm tốt một việc
- Hãy viết những chương trình có thể hoạt động cùng nhau
- Hãy viết những chương trình xử lý luồng văn bản (vì đó là giao diện phổ dụng)
-
LLM và lệnh Unix là cặp đôi hoàn hảo
- Các nguyên tắc 50 năm tuổi này khớp chính xác với cách LLM sử dụng công cụ
- Các mô hình liên tục “pipe” đầu ra thành đầu vào (ở giữa có dùng một chút sự mơ hồ nội tại của chính chúng), kết nối đầu ra của một lệnh thành đầu vào của lệnh khác, giống như toán tử
| trong Unix
- Khi mô hình không thể kết hợp công cụ hiệu quả, nguyên nhân gần như luôn là vì công cụ quá phức tạp
- Phần đầu tiên lý giải vì sao Claude Code đáng kinh ngạc: các lệnh vận hành Unix phù hợp hoàn hảo với việc sử dụng bởi LLM
- Không chỉ đơn giản, các lệnh này còn được tài liệu hóa rất tốt, nên mô hình có đủ nguồn dữ liệu để học
-
Cuộc cách mạng của truy cập hệ thống tệp
- Yếu tố còn lại là khả năng viết mã của Claude Code, và gần đây còn cả khả năng viết văn xuôi
- Tôi tìm ra câu trả lời khi đọc bài phân tích chuyên sâu của Pragmatic Engineer về cách Claude Code được xây dựng: đó là truy cập hệ thống tệp
- Hệ thống tệp thay đổi mọi thứ
- Hai khiếm khuyết chí mạng của ChatGPT và Claude chạy trên trình duyệt: không có bộ nhớ giữa các cuộc hội thoại và cửa sổ ngữ cảnh hẹp
- Hệ thống tệp giải quyết cả hai: Claude Code có thể tự viết ghi chú cho chính mình, tích lũy tri thức và duy trì các bản tổng hợp đang chạy
- Nó có trạng thái và bộ nhớ, và có thể suy nghĩ vượt ra ngoài một cuộc hội thoại đơn lẻ
AI overhang
- Khi lần đầu dùng API GPT-3 vào năm 2022, tôi dự đoán rằng ngay cả khi mô hình không cải thiện thêm so với thời điểm đó, cũng sẽ mất 10 năm để khám phá các trường hợp sử dụng
- Trên thực tế, mô hình đã được cải thiện (các mô hình suy luận giúp việc gọi công cụ trở nên đáng tin cậy), và khám phá về hệ thống tệp đã chứng minh nhận định đó
- Trong cuộc phỏng vấn của Pragmatic Engineer, Boris Cherney, người xây dựng phiên bản đầu của Claude Code, giải thích bằng khái niệm “product overhang”:
- Product overhang là trạng thái trong đó mô hình đã có thể thực hiện một công việc nhất định, nhưng sản phẩm nơi AI được triển khai chưa được xây dựng để nắm bắt năng lực đó
- Mô hình vốn đã có thể điều hướng hệ thống tệp, nhưng chưa có sản phẩm nào được xây quanh khả năng này
- Tác giả cho rằng đó là sự kết hợp giữa hệ thống tệp và lệnh Unix, nhưng cốt lõi là năng lực của mô hình vốn đã tồn tại và chỉ chờ được đánh thức
- Claude Code hoạt động như một bản thiết kế để xây dựng các hệ thống tác nhân đáng tin cậy, vì nó nắm bắt năng lực của mô hình thay vì giới hạn chúng bằng giao diện bị thiết kế quá mức
Vượt ra ngoài code
Dự án mã nguồn mở Claudesidian
- Tôi đã nói về cấu hình Claude Code + Obsidian của mình, và thực tế còn tiến thêm một bước khi mã nguồn mở hóa “Claudesidian”
- Nó bao gồm nhiều công cụ và lệnh mà tôi dùng trong thiết lập Claude Code + Obsidian của mình
- Tôi dùng nó như một sân chơi thử nghiệm, đặc biệt là để xây dựng công cụ nâng cấp ban đầu
- Khi có thay đổi ở trung tâm, tôi có thể mang chúng vào Claudesidian của mình; AI sẽ kiểm tra xem các tệp được cập nhật có thay đổi hay không, và nếu có thì cố gắng hợp nhất thông minh giữa bản cập nhật mới và các thay đổi hiện có
- Cả hai dự án đều tuân theo cùng các nguyên tắc của triết lý Unix: đơn giản, có thể kết hợp, làm tốt một việc và hoạt động cùng nhau
Inbox Magic - hệ thống tự động hóa email
- Tôi đang thực hiện một dự án tên là “Inbox Magic” (sẽ nghĩ ra cái tên hay hơn sau), chưa sẵn sàng phát hành nhưng sẽ sớm được công bố
- Đây là một kho Claude Code có thể truy cập bộ công cụ Gmail, hoạt động như một trợ lý email thông qua nhiều prompt và lệnh
- Chức năng hiện tại khá đơn giản:
- Có thể chạy tìm kiếm hoặc gửi email thay bạn
- Có thể chạy toàn bộ quá trình huấn luyện để phân loại email và học phong cách viết email của bạn
- Cả Claude Code và ChatGPT đều có thể truy cập email, nhưng chủ yếu chỉ lấy từng một hoặc hai thư một lần
- Hệ thống này có thể ghi vào tệp và dùng nhiều thủ thuật khác nhau, nên có thể thực hiện các tác vụ như: “tìm tất cả email liên quan đến du lịch trong hộp thư đến, xây dựng hồ sơ về thói quen du lịch, rồi dùng nó như prompt để ChatGPT/Claude nghiên cứu chuyến đi phù hợp với sở thích thực tế”
- Nếu muốn thử, hãy gửi tên người dùng GitHub của bạn; tôi sẽ chia sẻ ngay khi nó sẵn sàng để test
Bài học cốt lõi
- Thường thì tôi tránh viết phần kết luận, nhưng ở đây có vài bài học đáng để nhấn mạnh lại:
- 1. Hệ thống tệp là công cụ tuyệt vời để giải quyết sự thiếu hụt về bộ nhớ và trạng thái của LLM, và nên được dùng thường xuyên hơn
- 2. Để việc gọi công cụ hoạt động hiệu quả, cần tập trung vào việc tuân theo triết lý Unix
- 3. Claude Code đại diện cho bản thiết kế của các hệ thống tác nhân trong tương lai
- Hệ thống tệp + triết lý Unix nên là khuôn mẫu để xây dựng tác nhân AI đáng tin cậy và có thể debug hơn là các hệ thống đa tác nhân phức tạp đang trôi nổi hiện nay
- Về mặt chiến thuật, khi xây dựng việc gọi công cụ cho dự án của mình, điều cốt lõi là giữ nó đơn giản và để luồng mô hình chính có thể “pipe” chúng
- Vấn đề lớn mà mọi tác nhân/chatbot đều cần giải quyết: khả năng pipe mà không phải đi qua cửa sổ ngữ cảnh
- 4. Những ai chưa tìm ra trường hợp sử dụng cho LLM là vì chưa nỗ lực đủ
1 bình luận
Ý kiến Hacker News
Tôi thực sự thích việc Claude Code hoạt động theo kiểu Unix, có thể dễ dàng tạo các công cụ phong cách Unix khác và Claude dùng ngay được mà không cần thêm bước tích hợp nào, chỉ cần đưa man page của công cụ là Claude sử dụng rất thành thạo, có thể làm việc mà không cần MCP hay định nghĩa công cụ phức tạp, thậm chí cũng hoạt động ổn với công cụ truy cập trình duyệt tôi tự tạo
Gần đây, nhân thời đại LLM, tôi đã cập nhật một công cụ giúp tìm kiếm manpage tốt hơn là Mansnip, tôi nghĩ bọc nó lại thành STDIO MCP cũng là một cách hay, có lẽ chỉ cần thêm API cho đoạn mã này và đưa server lên pip là ổn, có vẻ không quá khó
Tôi tò mò Claude Code sử dụng trình duyệt như thế nào từ script hay công cụ của tôi, tôi muốn điều khiển trực tiếp các cửa sổ phiên Safari đang có sẵn, nhưng phần lớn chỉ xử lý Chrome hoặc một instance mới riêng biệt
Có lúc tôi nhận ra thay vì bảo Claude tự đi tìm vấn đề, việc dạy nó cách dùng linter hiệu quả hơn nhiều, thậm chí không cần chỉ định dùng linter nào, chỉ cần đưa danh sách rồi cài đặt là nó dùng ngay, khi thử code với ChatGPT tôi từng không kỳ vọng vì phải tốn quá nhiều công sức mới ra kết quả hữu ích, nhưng với Claude Code thì đó thật sự là một trải nghiệm đáng kinh ngạc
Mỗi ứng dụng GUI đều khác nhau và tồn tại như một tòa thành có tường bao riêng, giống như những lãnh địa cô lập bên trong hệ điều hành, trong khi CLI là quảng trường chung nơi mọi thứ hội tụ, là chợ thông tin nơi dữ liệu và tín hiệu được trao đổi, để bước vào quảng trường này bạn thậm chí không cần thuộc về phe nào cả, thứ gần giống vậy ở phía GUI là Smalltalk, nhưng ngay cả nó cũng đòi hỏi phải tuyên thệ trung thành trước mới được vào
Thực ra trong GUI cũng có những hệ thống có tính tương tác liên thông và khả năng kết hợp khá cao, ví dụ như NextSTEP hay dbus, nếu muốn thì GUI cũng có thể được xây dựng dựa trên API mở rồi chỉ phủ thêm lớp đồ họa lên trên, tuy hiếm nhưng về mặt kỹ thuật là khả thi
Dù trông như những pháo đài bị nhốt trong hệ điều hành, từ góc nhìn người dùng phổ thông thì GUI vẫn được ưa chuộng hơn CLI rất nhiều, nếu chỉ có CLI thì tốc độ phổ cập máy tính hẳn đã chậm hơn đáng kể
Chỉ vì một công cụ mới nổi chạy trong terminal không có nghĩa nó tự động là “hiện thân đích thực của triết lý UNIX”, bản thân phép so sánh này đã không hợp lý, coi như tôi cũng mắc câu một bài giật tít kiểu Hacker News
Triết lý UNIX ở đây không chỉ đơn giản có nghĩa là ứng dụng terminal, mà điểm quan trọng là LLM hiện đại có thể trực tiếp thực thi lệnh shell, nhờ đó LLM đang ở giai đoạn có thể làm gần như mọi hoạt động mà con người có thể làm trong shell
Nếu nhìn vào cốt lõi của triết lý UNIX thì có 1) các chương trình nhỏ chỉ làm một việc, 2) chúng có thể kết hợp để làm những việc phức tạp hơn, 3) dùng luồng văn bản làm giao diện phổ quát, những điểm này hợp với LLM một cách đáng ngạc nhiên, nhờ một giao diện văn bản thống nhất như
exec(), mọi công cụ đều làm việc với tệp và có thể nhập xuất bằng văn bản nên LLM dùng được ngay, cấu trúc phần mềm như vậy vốn không phải điều tất yếu, nhưng lại vô cùng vừa vặn với LLMCả 3 bình luận đứng đầu cũng khiến tôi có cảm giác như được LLM sai đi tự quảng bá cho chính nó
Đã từng có rất nhiều lời nói rằng CLI đã chết, nhưng gần đây nhờ những công cụ như claude code mà ngược lại CLI lại trở thành giao diện vượt trội, tất nhiên tôi không định biến chuyện này thành một cuộc đối đầu với ai, chỉ thấy sự thay đổi cục diện này rất thú vị
Thật ra với người dùng thành thạo, bao gồm cả lập trình viên, tôi chưa từng nghe ai nói “CLI is dead”, với người dùng phổ thông thì sau khi GUI xuất hiện có thể CLI trông như đã biến mất, nhưng trên thực tế CLI luôn tồn tại ở hậu trường, OS X mang đến một Unix shell thực thụ, Windows có PowerShell, còn Linux thì gần như thống trị hẳn thị trường máy chủ
Tôi cũng đang tự xây dựng các giao diện GUI tùy biến, tức là tạo hẳn cả môi trường desktop theo đúng sở thích sử dụng máy tính của mình, trước đây vì các công cụ GUI phổ biến bất tiện nên tôi thường dùng terminal, nhưng dạo này môi trường UI của tôi ngày càng được cải thiện
Sự kết hợp giữa Claude và Obsidian tạo ra một quy trình làm việc cực kỳ tốt, tôi giao toàn bộ các công việc quản lý ghi chú lặp đi lặp lại cho AI, tôi lưu daily note theo kiểu dòng ý thức, rồi từ đó trích xuất các ý tưởng mới, dự án và tài liệu, Gemini cũng hoạt động đủ tốt
Điều nhất định phải nhắc đến trong việc tích hợp LLM với Obsidian là plugin, plugin Obsidian rất dễ tùy biến và có thể chạy script JavaScript từ thư mục cục bộ, Claude Code đặc biệt giỏi trong việc viết và chỉnh sửa các plugin như vậy, ví dụ tôi đã tạo một chương trình tùy chỉnh tự động đồng bộ tệp Obsidian sang Github repo dựa trên cờ publish, nhờ đó mỗi khi cập nhật ghi chú thì Netlify cũng cập nhật website của tôi ngay lập tức
Với tác giả, có lẽ một dịch vụ như omnara.com, nơi có thể truy cập trực tiếp từ điện thoại mà không cần SSH, sẽ phù hợp hơn, tôi đang dùng một môi trường tương tự với Obsidian và Claude Code chạy headless liên tục, rồi truy cập thẳng bằng ứng dụng trên điện thoại
Tôi muốn dùng Claude Code nhưng không biết chính xác bao nhiêu dữ liệu cục bộ và tệp sẽ bị gửi qua mạng, nên trong một số tình huống rất khó triển khai
Tôi đã tự triển khai qua MCP chức năng sau
{ "name": "unshare_exec", "description": "thực thi binary trong Linux namespace bằng unshare", "inputSchema": { "type": "object", "properties": { "binary": {"type": "string"}, "args": {"type": "array", "items": {"type": "string"}} }, "required": ["binary"], "additionalProperties": false } }
Ban đầu tôi chỉ dùng unshare, rồi có trải qua kha khá màn yak shaving, nhưng cuối cùng tôi đã có thể chạy gemma3 cục bộ và tự do vận hành các tiện ích nền Debian, cho ra kết quả đáng kinh ngạc
Tôi muốn một môi trường hoàn toàn cục bộ với Obsidian, LLM cục bộ, và mọi thứ đều là mã nguồn mở, tôi mong chờ một tương lai như vậy
Nhờ LLM mà khả năng khai thác và giá trị của phần mềm mã nguồn mở đang tăng lên hơn nữa, trước đây dù là mã nguồn mở thì việc hiểu cấu trúc mã cũng khó nên không dễ tự sửa, còn bây giờ với LLM, những việc như vá lỗi nhỏ hay thêm tính năng mới đã dễ hơn rất nhiều, nghĩa là chương trình phải là mã nguồn mở thì tôi mới có thể chỉnh theo ý mình, và điểm này quan trọng hơn bao giờ hết
Chỉ open-weights thôi là chưa đủ, cần phải có cả dataset và pipeline huấn luyện để có thể trực tiếp xử lý thì mới thực sự có ý nghĩa, tất nhiên người bình thường sẽ thiếu hạ tầng để tự chạy pipeline huấn luyện, nhưng vẫn cần biết minh bạch dữ liệu được dùng thế nào và mô hình được huấn luyện ra sao thì mới có thể thật sự nói đến quyền sở hữu và đánh giá thiên lệch
Một môi trường với Org mode cục bộ, LLM cục bộ, mọi thứ được điều phối bằng Emacs và chạy hoàn toàn bằng phần mềm tự do thì sẽ tuyệt vời biết bao, nếu nghỉ hưu và có nhiều thời gian thì đó là giấc mơ tôi rất muốn thử
Nếu bạn quan tâm thì tôi gợi ý bài này https://laurentcazanove.com/blog/obsidian-rag-api
Tôi tự hỏi liệu việc chạy cục bộ một mô hình có kích thước đủ để thực sự dùng được có phải là điều bất khả thi về mặt thực tế không, đặc biệt với máy phát triển chỉ có 64GB RAM và thiết lập một GPU duy nhất