Vì sao Pi thành coding agent hằng ngày, chạy trong container
Dựng pi-container để chạy Pi coding agent cô lập, cài extension web access, Context7, todo, chỉnh Open TUI, rồi build một app Next.js và sửa lỗi bằng Pi.
✓ Đã duyệt độc lập · cập nhật 31/10/2026 · 16 min
1. Pi: một coding harness tối giản và dễ mở rộng
Pål-Kristian Hamre mở đầu video bằng việc giới thiệu Pi, mà anh gọi là một coding harness, hay coding agent, mã nguồn mở và tối giản (theo video đăng ngày 30/10/2026). Anh hứa sẽ giải thích Pi là gì, project cá nhân pi-container của anh là gì, rồi kể vì sao Pi đã trở thành coding agent yêu thích mới của anh và vì sao anh dùng nó mỗi ngày.

Theo anh (video đăng ngày 30/10/2026), Pi là một AI coding agent rất đơn giản, hay một coding harness, tuỳ cách bạn gọi. Thứ cuốn anh tới với Pi là sự đơn giản và khả năng mở rộng (extensibility). Ngay khi cài xong, Pi là một project rất gọn: bạn nối nó với một model, và nó có thể đọc file, sửa code, chạy lệnh. Nó hiểu context, gửi truy vấn tới model, đọc phản hồi, và về cơ bản chỉ có vậy. Để biến Pi thành của riêng mình, bạn cài thêm extension từ một kho rất lớn.
Anh mô tả agent loop của Pi thật ra khá đơn giản (theo video đăng ngày 30/10/2026): nó gom context lại và gửi request tới model, nhận phản hồi, rồi chạy tool hoặc lặp lại nếu cần. Pi lưu các session một cách bền vững dưới dạng JSONL với cấu trúc cây, nhờ đó bạn có thể rẽ nhánh (branching) từ những đoạn trước đó của cuộc hội thoại.
2. pi-container: Pi chạy cô lập trong một container
Daily driver của anh là pi-container (theo video đăng ngày 30/10/2026): project này lấy Pi coding agent, cô lập nó bên trong một container và bọc thêm một lớp bảo mật quanh nó. Anh bắt đầu xem cách cài và cách chạy.
Project nằm trên GitHub. Anh mở trang repo trong trình duyệt và copy URL ở đó. Theo lời anh (video đăng ngày 30/10/2026), repo có tài liệu rất đầy đủ, gọn và dễ đọc nếu bạn muốn tìm hiểu thêm về cách nó hoạt động và những gì có thể tuỳ chỉnh.

3. Clone repo và build image
Quay lại terminal, anh tạo một thư mục git, clone project pi-container vào đó, rồi đi vào thư mục pi-container. Theo lời anh, ở đây có thể gõ lệnh build latest (README của repo ghi là make build-latest), hoặc thật ra chỉ cần gõ make build, vì bản Pi mới nhất đã nằm sẵn trong commit mới nhất của repo (tính đến video đăng ngày 30/10/2026). Trên màn hình, anh gõ make build.
Các lệnh trên màn hình:
mkdir git cd git/ git clone https://github.com/pkhamre/pi-container cd pi-container/ make build
Anh nói bước này sẽ mất vài phút. Theo anh (video đăng ngày 30/10/2026), image dựa trên một Debian distroless image: quá trình build dựng container, build mọi tool cần thiết và gói tất cả các binary vào trong image distroless đó. Kết quả là một image rất cô lập và an toàn hơn so với chạy Pi trực tiếp trên máy của bạn. Cách này rất giống cách anh chạy OpenCode trong container, và anh chỉ dựng lại cùng kiểu cô lập container đó cho Pi coding agent.
Trong lúc build chạy, anh quay lại trang repo trong trình duyệt để xem phần cần dùng tiếp: anh copy cả hai dòng lệnh ở đó, quay về terminal và dán vào. Sau đó pi-container đã được cài vào môi trường của anh (demo trong video đăng ngày 30/10/2026).

Hai dòng lệnh anh dán vào, như trên màn hình:
export PATH="$PWD/bin:$PATH" pi-container --version
4. Đăng nhập OpenAI Codex và chọn model
Anh khởi động pi-container lần đầu. Lúc này chưa có model nào khả dụng, nên phải đăng nhập: anh gõ login và chọn đăng nhập bằng OpenAI Codex (legacy). Anh chọn cách đăng nhập headless bằng device code, copy mã hiện ra, mở một trình duyệt khác và cấp quyền cho Codex trên tài khoản của mình (demo trong video đăng ngày 30/10/2026).
Anh kể mình đã bắt đầu dùng gói ChatGPT subscription, và theo anh, ít nhất là với anh, đó là lựa chọn tốt nhất lúc này (tính đến video đăng ngày 30/10/2026). Anh rất thích các model GPT: theo anh, Luna khá tốt, và 6.1 Terra rất tốt.
Khi đã được cấp quyền, mọi thứ sẵn sàng để bắt đầu build. Nhưng trước đó, anh chỉ cách gõ Ctrl+L để chọn model. Anh nói trong phần lớn video này anh có lẽ sẽ dùng GPT 6.1 Terra, vì với anh nó có vẻ đáng giá nhất lúc này (tính đến video đăng ngày 30/10/2026). Nếu cần thứ nâng cao hơn, anh có lẽ sẽ chọn 6.1 Sol; còn việc đơn giản thì GPT-6 Luna. Rồi anh nói "nhưng sao cũng được" và chuyển tiếp.

5. Tìm extension trên pi.dev
Tiếp theo, anh xem các extension có thể cài vào môi trường Pi. Anh quay lại trình duyệt, gõ pi.dev, trang web chính thức của Pi, rồi vào mục Packages. Ở đó có thể sắp xếp theo lượt tải nhiều nhất (Most downloads), và theo anh, cách đó thường đưa lên một số extension tốt nhất (theo video đăng ngày 30/10/2026).

curl -fsSL https://pi.dev/install.sh | sh và các mục Documentation, Changelog, Models, Packages, Radius.Extension đầu tiên anh dùng là web access. Trên trang package có sẵn dòng lệnh để copy; anh copy nó, quay lại terminal và dán vào, nhưng thay pi bằng pi-container. Theo anh (video đăng ngày 30/10/2026), extension này cho pi-container, hay Pi coding agent, quyền tìm kiếm trên internet, và nó đã tỏ ra rất hữu ích với anh để tìm tài liệu và những thứ khác.
Anh chọn thêm vài extension khác (mô tả theo lời anh, video đăng ngày 30/10/2026):
- Open TUI: làm giao diện người dùng chi tiết hơn một chút (video đăng ngày 30/10/2026).
- Context7: coding agent có thể lấy tài liệu mới nhất của các thư viện, hay bất cứ thứ gì nó cần (video đăng ngày 30/10/2026).
- Ask user question (rpiv): bạn có thể bảo model hỏi lại bạn để hiểu context tốt hơn, và bạn có một phần tương tác rất gọn để trả lời câu hỏi (video đăng ngày 30/10/2026).
- Todo: anh thấy extension to-do cũng khá hay (video đăng ngày 30/10/2026).
Anh nói thế là đủ cho lúc đầu. Ngoài ra, anh thích cài một bộ theme đẹp hơn theme mặc định, nên tìm thêm gói theme phù hợp.
6. Cài năm extension và một bộ theme
Anh quay lại terminal để cài các extension đã chọn. Hai gói ask user question và to-do list anh copy thẳng từ trang package. Bộ theme anh cài bằng gói pi-curated-themes. Các lệnh trên màn hình:
pi-container install npm:pi-web-access pi-container install npm:pi-open-tui pi-container install npm:@upstash/context7-pi pi-container install npm:@juicesharp/rpiv-ask-user-question pi-container install npm:@juicesharp/rpiv-todo pi-container install npm:@victor-software-house/pi-curated-themes

pi-container install npm:... in ra số package đã thêm và dòng "Installed npm:..." khi xong.7. Chọn theme và chỉnh Open TUI
Anh mở lại pi-container và chỉnh giao diện một chút (demo trong video đăng ngày 30/10/2026). Vào settings, gõ themes và chọn theme bạn thích. Riêng anh thích theme Programmer, vì trông đẹp và đơn giản. Anh bấm Escape để quay lại màn hình chính.
Sau đó anh gõ open và chọn Open TUI settings (demo trong video đăng ngày 30/10/2026). Tab General có vài thiết lập chung đơn giản; anh để mặc định. Rồi anh sang tab Appearance. Ở đây anh thích chọn nerd fonts; bạn cũng có thể chọn font Unicode hoặc ASCII, nhưng anh thích nerd fonts. Anh đổi kiểu con trỏ (cursor style) sang underline.
Theo lời anh, Open TUI settings là nơi anh tuỳ chỉnh nhiều nhất. Những gì anh chọn (demo trong video đăng ngày 30/10/2026):
- Không in thư mục làm việc hiện tại: vì pi-container chạy cô lập, thư mục làm việc luôn là
/workspace, nên không cần hiện (video đăng ngày 30/10/2026). - Không hiện hostname, vì đó là một hostname ngẫu nhiên của Podman (video đăng ngày 30/10/2026).
- Git branch: nên hiện. Session name: anh không quan tâm lúc này. Git status: nên hiện. Git tag: bật nếu bạn muốn, bình thường anh không bật (demo trong video đăng ngày 30/10/2026).
- Project runtime: không hiện. Context usage: rất nên xem. Session token và session cost: hay (demo trong video đăng ngày 30/10/2026).
- Capitalize provider name: anh đặt Off. Extra space after Nerd icons: anh nói có thể dùng, "sao lại không" (demo trong video đăng ngày 30/10/2026).
- Footer in editor border (trên màn hình nằm ở tab General): anh thấy cái này hay (demo trong video đăng ngày 30/10/2026).

Thế là xong. Trong demo (video đăng ngày 30/10/2026), màn hình chào của Pi ghi "Let's build something great", và anh nói giờ đã sẵn sàng để build một thứ thật tuyệt như dòng chữ đó. Từ đây có thể bắt đầu dùng nó làm daily driver: build project, nhờ nó giúp công việc.
8. Prompt cho Awesome Blossom
Để trình diễn (demo trong video đăng ngày 30/10/2026), anh build một app tên là Awesome Blossom: một ứng dụng web đơn giản tạo và hiển thị các tác phẩm generative art dạng lưới chấm, theo phong cách các bố cục chấm tròn pointillist hay kiểu bảng thử mù màu Ishihara, giống những bản in mỹ thuật phiên bản giới hạn. Anh yêu cầu bootstrap app bằng Next.js bản mới nhất và bảo Pi hỏi anh để nắm đúng context. Prompt trên màn hình:
Today we are building awesome-blossom with extra awesome. This is a simple web application that generates and displays generative dot-grid artworks in the style of circular pointillist / Ishihara-test compositions. like limited edition fine-art prints. Bootstrap the app with NextJS latest version. Ask me questions to get the context right.
Anh gửi prompt tới model và đoán sẽ nhận lại khoảng bốn câu hỏi (demo trong video đăng ngày 30/10/2026), rồi build một thứ cho vui ngay tại đó.

9. Bốn câu hỏi, danh sách todo và Context7
Ngay lúc đó, extension to-do và extension hỏi câu hỏi hiện ra trong thực tế (demo trong video đăng ngày 30/10/2026). Pi tạo ba việc: làm rõ hướng nghệ thuật và phạm vi app, kiểm tra workspace và bootstrap Next.js bản mới nhất, rồi build và kiểm chứng trải nghiệm artwork. Sau đó Pi hỏi bốn câu, mỗi câu một tab (Art direction, Experience, Features, Artwork):
- Awesome Blossom nên mang cảm giác thế nào? Anh chọn luôn phương án đầu tiên (demo trong video đăng ngày 30/10/2026).
- Người xem nên tạo và khám phá artwork ra sao? Anh chọn Studio + Collection, thấy khá ổn (demo trong video đăng ngày 30/10/2026).
- Phiên bản đầu nên có những tính năng nào? Curated palettes (anh nói "ổn"), Composition controls ("ổn"), Print-ready export và Saved editions: anh nói như vậy là được (demo trong video đăng ngày 30/10/2026).
- Artwork: anh chọn Abstract organic, rồi submit các câu trả lời để xem nhận lại gì (demo trong video đăng ngày 30/10/2026).
Vì prompt có chuỗi "Bootstrap the app with NextJS latest version", model đã tự truy vấn Context7 để lấy tài liệu của Next.js. Theo anh (demo trong video đăng ngày 30/10/2026), như vậy là anh đã tận dụng được tất cả các extension vừa cài.

Trong lúc agent chạy, anh chỉ vào thanh trạng thái: có thể thấy context window, thấy mình đang đốt bao nhiêu token mỗi giây, và chi phí của các truy vấn tới lúc đó. Anh thấy như vậy khá hay. Giờ chỉ việc chờ và để model làm hết. Nó bắt đầu dựng các bảng màu; anh nhận xét chúng có lẽ mang kiểu bảng màu rất "AI", nhưng vẫn ổn, vì đây chỉ là một proof of concept để cho thấy các extension khác nhau hoạt động thế nào trong lúc build một thứ gì đó (demo trong video đăng ngày 30/10/2026).
10. Đổi theme trong lúc chờ, và tốc độ token
Trong lúc Pi làm việc (demo trong video đăng ngày 30/10/2026), anh đổi theme ngay giữa chừng để cho thấy chúng rất khác nhau. Theo anh, có rất nhiều theme đẹp, cứ chọn cái nào bạn thấy hợp. Anh cũng thích một theme khác, và nói nhiều theme trong số đó thật ra rất đẹp. Cuối cùng anh chọn jellybeans, vì anh thích cái tên.
Vẫn đang chờ build thì anh phát hiện mình đã huỷ thao tác (aborted) (demo trong video đăng ngày 30/10/2026). Anh nói "Continue" và cho chạy tiếp. Anh không biết vì sao mình huỷ; có lẽ anh đã bấm Escape thừa một lần, và theo lời anh, chuyện này tiếc là xảy ra suốt.
Theo số đo anh đọc trong video đăng ngày 30/10/2026, model chạy khoảng 50 đến 60 token mỗi giây, có lúc 70 (dòng tổng kết cuối lượt build trên màn hình ghi TPS 43.0 tok/s). Anh đoán tốc độ này phụ thuộc vào thời điểm trong ngày bạn dùng. Anh háo hức xem chuyện gì sẽ xảy ra và project trông thế nào. Như đã nói, đây chỉ là bản demo, để cho thấy bạn có thể build bằng Pi và bằng những extension anh thích nhất như thế nào.
11. Một video quay không có kịch bản
Trong lúc chờ, anh kể video này (đăng ngày 30/10/2026) thật ra là video đầu tiên anh cứ thế bấm quay và ứng biến. Anh không dùng tool AI nào để giúp làm nội dung hay bất cứ thứ gì. Anh chỉ bấm record, bắt đầu nói, và cố làm video tự nhiên hơn, con người hơn.
Anh nói có lẽ sẽ tiếp tục làm vậy với mọi video để giữ được, theo lời anh, "phần con người", dù anh không biết gọi nó là gì cho đúng. Lý do anh đưa ra: rất nhiều video trên YouTube ngày nay có nội dung do AI viết, kịch bản do AI viết, có quá nhiều AI, quá nhiều bài blog do AI viết (nhận xét của anh trong video đăng ngày 30/10/2026). Anh muốn làm mọi thứ mang tính cá nhân, cứ thuận theo dòng, nói đúng điều anh thực sự muốn nói và nghĩ ra để nói.
Anh hy vọng người xem thích cách này, vì chính anh thích nó: anh đang làm những video mà bản thân anh muốn xem.
12. Chạy app và dán lỗi console trở lại cho Pi
Pi báo hoàn tất, và anh nói "giờ nó đã build xong, hoàn hảo". Bản tổng kết trên màn hình ghi app được build trong /workspace/awesome-blossom với Next.js 16.4.3, gồm bốn bảng màu chọn sẵn và ba bố cục organic, điều khiển lưới chấm trực tiếp với seed tái lập được, lưu edition cục bộ, export SVG và PNG 3600px, thiết kế responsive kiểu xưởng in; phần Verified ghi production build, lint, năm unit test và bốn browser test (demo trong video đăng ngày 30/10/2026).
Anh sang tab terminal còn lại, gõ npm install (anh đoán việc này có lẽ đã xong), rồi npm run dev. Anh copy network URL, mở một tab mới trong trình duyệt, dán vào và bấm Enter. Awesome Blossom hiện ra, theo lời anh, "đúng như tôi hình dung" (demo trong video đăng ngày 30/10/2026). Collection của anh lúc này đang là không.

Nhưng các nút điều khiển không làm gì cả, và anh không biết vì sao. Anh mở Inspect và xem console: hoá ra trình duyệt không kết nối được tới web socket (demo trong video đăng ngày 30/10/2026). Anh dán thẳng các thông báo lỗi đó vào terminal, vào Pi, không kèm thêm context gì ngoài chính các thông báo lỗi từ console, và đoán nó có lẽ sẽ tự tìm ra.

Anh nói dù đây chỉ là một project demo, đó thường là vòng lặp làm việc của anh (theo video đăng ngày 30/10/2026): deploy một thứ, tìm ra vài bug hay vài thông báo lỗi, rồi dán thông báo lỗi vào, cho nó thêm một chút context, và về cơ bản là vậy.
Pi sửa bằng cách thêm allowedDevOrigins vào cấu hình Next.js (demo trong video đăng ngày 30/10/2026). Trên màn hình, Pi giải thích log của server cho thấy Next.js đang chặn hai LAN origin, vì dev server chạy bên ngoài network namespace của container, và nó cho phép hai origin phát triển cụ thể đó; lint và kiểm tra TypeScript đều qua. Anh chạy lại project bằng npm run dev, quay lại trình duyệt và hard refresh. Giờ thì app chạy được. Anh nói "hoàn hảo".
13. Sửa lỗi lưu vào collection và export SVG
Anh thử các điều khiển (demo trong video đăng ngày 30/10/2026): đổi mật độ (density), đổi kích thước chấm, chỉnh organic flow, và anh thấy ổn. Nút "A new possibility" đổi seed. Anh nói rất thích bản này và bấm lưu vào collection. Việc lưu lại không chạy.
Anh lại xem console, thấy một lỗi, copy lỗi đó, quay lại Pi và gõ "I tried to save to my collection, but got this", rồi dán lỗi vào. Anh đoán nó có lẽ sẽ sửa khá nhanh. Lần này anh cho thêm context cùng với chính thông báo lỗi. Anh nói đôi khi anh chỉ dán đúng thông báo lỗi và nó cứ thế chạy, vì phần lớn thời gian thông báo lỗi đã khá rõ ràng (nhận xét của anh trong video đăng ngày 30/10/2026).
I tried to save to my collection, but got this
Lỗi được sửa (demo trong video đăng ngày 30/10/2026). Anh quay lại terminal chạy lại, sang trình duyệt hard refresh, rồi lưu: tác phẩm đã vào collection. Anh tạo thêm một bản mới với kiểu xoáy (swirl), mật độ thấp hơn nhiều, chấm to hơn, organic flow khác, đổi seed, rồi lưu. Anh cũng tải bản in xuống dưới dạng SVG, và nó có vẻ chạy được. Các bản đều nằm trong collection của anh, lưu cũng được.

Anh khép lại video đăng ngày 30/10/2026: đó là một phần trình diễn rất đơn giản về Pi và cách dùng nó để build project, biến ý tưởng thành hiện thực. Anh hy vọng người xem thích video và học được điều gì đó, và cảm ơn mọi người.
Nguồn và liên kết 6 nguồn
- Tên gốc: Why I Switched to Pi as My Daily AI Coding Agent
- Sự kiện: YouTube
- Video gốc: https://www.youtube.com/watch?v=y9V8Lh_28Ek youtube.com
- Kênh YouTube Pål-Kristian Hamre (Pål-Kristian Hamre): youtube.com/channel/UCymDFAeODxFLf1mhSoJztmw youtube.com
- Repo pi-container, mô tả là môi trường container được làm cứng về bảo mật để chạy Pi coding agent CLI trong cô lập hoàn toàn, README có các lệnh build và phần Troubleshooting (đọc ngày 31/10/2026): github.com/pkhamre/pi-container github.com
- Trang chính thức của Pi, "a minimal agent harness", có mục Documentation và Packages (đọc ngày 31/10/2026): pi.dev pi.dev