Kun introduces an agentic engineering workflow built around Herder and FirstMate, tools that manage multiple AI agent sessions and reduce cognitive load. He outlines the requirements for Eddie's Wallet, an iOS allowance-tracking app for his son, and explains his choice of model and reasoning settings.
Kun giới thiệu một quy trình kỹ thuật tác tử được xây dựng xoay quanh Herder và FirstMate, những công cụ quản lý nhiều phiên tác tử AI và giảm tải nhận thức. Ông phác thảo các yêu cầu cho Eddie's Wallet, một ứng dụng theo dõi tiền trợ cấp trên iOS cho con trai mình, và giải thích lựa chọn mô hình cùng cài đặt suy luận của mình.
Hello everyone.
Xin chào mọi người.
My name is Kun.
Tên tôi là Kun.
I worked at Meta, Microsoft, and Atlassian as an L8 principal engineer.
Tôi từng làm việc tại Meta, Microsoft và Atlassian với vai trò kỹ sư chính cấp L8.
And a few weeks ago, I made a video about my agentic engineering workflow, which got 600,000 views.
Và vài tuần trước, tôi đã làm một video về quy trình kỹ thuật tác tử của mình, video đó đạt 600.000 lượt xem.
And one of the most popular ask from the video was to make another video about me using my agentic engineering workflow to build a real project from scratch.
Và một trong những yêu cầu phổ biến nhất từ video là làm thêm một video về việc tôi sử dụng quy trình kỹ thuật tác tử của mình để xây dựng một dự án thực tế từ đầu.
And that's what we will be
Và đó chính là điều chúng ta sẽ
doing today.
Làm ngày hôm nay.
Let's dive in.
Hãy bắt đầu thôi.
All right, let's begin.
Được rồi, chúng ta bắt đầu.
Um I'm starting from an empty terminal here, and I already have my tools and environment set up, uh but I haven't created any project files yet.
Ừm, tôi đang bắt đầu từ một terminal trống, và tôi đã thiết lập sẵn các công cụ và môi trường của mình rồi, ừ nhưng tôi chưa tạo file dự án nào cả.
So, I'm going to start with that.
Vậy nên, tôi sẽ bắt đầu với việc đó.
Uh the first thing I'm going to do is to launch Herder.
Ừ, việc đầu tiên tôi sẽ làm là khởi chạy Herder.
Um Herder is kind of like my new tmux.
Ừm, Herder kiểu như là tmux mới của tôi vậy.
It's my replacement for tmux.
Nó là thứ thay thế tmux của tôi.
It's just better.
Nó đơn giản là tốt hơn.
Um it manages my agent sessions for me, and you will see uh later why uh that gives me a really good experience.
Ừm, nó quản lý các phiên tác tử cho tôi, và bạn sẽ thấy ừ lát nữa tại sao ừ điều đó mang lại cho tôi trải nghiệm thực sự tốt.
Um and this is an empty session I just started.
Ừm và đây là một phiên trống tôi vừa mới khởi tạo.
Uh so, uh the next thing I'm going to do is to set up FirstMate.
Ừ, vậy ừ, việc tiếp theo tôi sẽ làm là thiết lập FirstMate.
Um FirstMate, if you haven't heard of it yet, um it's an open-source project that I created, uh which gained some popularity, which is nice.
Ừm, FirstMate, nếu bạn chưa từng nghe đến, ừm nó là một dự án mã nguồn mở mà tôi tạo ra, ừ nó cũng khá phổ biến, điều đó thật tuyệt.
Um it's a new way of working that allows me, uh the captain, uh to talk to only one agent, which is the FirstMate.
Ừm, đó là một cách làm việc mới cho phép tôi, ừ thuyền trưởng, ừ chỉ nói chuyện với một tác tử duy nhất, đó là FirstMate.
And the FirstMate will juggle everything for me, uh which really reduces the um cognitive load that I have and the burden of context switch.
Và FirstMate sẽ xoay xở mọi thứ cho tôi, ừ điều đó thực sự giảm ừ tải nhận thức của tôi và gánh nặng chuyển đổi ngữ cảnh.
So, it makes me uh my life a lot easier.
Vậy nên, nó khiến cuộc sống của tôi ừ dễ dàng hơn rất nhiều.
Uh the way to set this up is really easy.
Ừ, cách thiết lập việc này thực sự dễ dàng.
Um so, I just come here and clone the repo.
Ừm, vậy tôi chỉ cần đến đây và clone repo.
I'll just come here and do a git clone and get this FirstMate repo cloned.
Tôi sẽ đến đây và thực hiện git clone để lấy repo FirstMate này về.
And I'm going to just uh go into the FirstMate repo and launch my agent in here.
Và tôi sẽ ừ đi vào repo FirstMate và khởi chạy tác tử của mình trong đó.
That's how you use FirstMate.
Đó là cách bạn sử dụng FirstMate.
Um and today I'm going to use the Pi agent, uh because I want to use the GPT model, and Pi is my favorite harness for running any model that is not Claude.
Ừm và hôm nay tôi sẽ dùng tác tử Pi, ừ vì tôi muốn dùng model GPT, và Pi là harness yêu thích của tôi để chạy bất kỳ model nào không phải Claude.
Um so, I uh I will launch Pi, and you can
Ừm vậy, tôi ừ tôi sẽ khởi chạy Pi, và bạn có thể
see here um my current model is GPT-5.6 Soul on X High.
Thấy ở đây ừm model hiện tại của tôi là GPT-5.6 Soul ở mức X High.
And uh I do use this model a lot, uh but today uh I actually want to give myself a challenge and make this a little bit more uh fun and uh uncertain.
Và ừ tôi dùng model này rất nhiều, ừ nhưng hôm nay ừ thực ra tôi muốn tự thử thách bản thân và làm việc này thú vị hơn một chút ừ và ừ bất định hơn.
Uh so, I'm going to use Luna instead.
Ừ vậy nên, tôi sẽ dùng Luna thay vào đó.
Um, the reason is that um I think a lot of the time we try to use the best model possible for everything, uh because that's just going to be able
Ừm, lý do là vì ừm tôi nghĩ phần lớn thời gian chúng ta cố gắng dùng model tốt nhất có thể cho mọi thứ, ừ vì điều đó sẽ có thể
to get give us the better results, right?
Mang lại cho chúng ta kết quả tốt hơn, đúng chứ?
Um, but actually I want to demonstrate that you don't really need the best model for everything.
Ừm, nhưng thực ra tôi muốn chứng minh rằng bạn không thực sự cần model tốt nhất cho mọi thứ.
Um, you actually can get a lot out of these more efficient models.
Ừm, bạn thực sự có thể khai thác được rất nhiều từ những model hiệu quả hơn này.
I hope Luna doesn't backfire on me.
Tôi hy vọng Luna không phản tác dụng với tôi.
Um, so uh the first thing uh I will do uh with FirstMate is to probably lay down the ground rule here that I just want to use Luna.
Ừm, vậy ừ việc đầu tiên ừ tôi sẽ làm ừ với FirstMate có lẽ là đặt ra nguyên tắc ở đây rằng tôi chỉ muốn dùng Luna.
Uh
Ừ
so, I'll yeah, I'll do a few things.
Vậy, ừ, tôi sẽ làm vài việc.
Hey FirstMate, uh let's uh set up a new project here, uh a new repo called Eddie's Wallet.
Này FirstMate, ừ chúng ta hãy ừ thiết lập một dự án mới ở đây, ừ một repo mới tên là Eddie's Wallet.
And it's going to be just a local repo for now, um probably put a dummy readme file in it and make a commit uh just to get it started.
Và hiện tại nó sẽ chỉ là một repo cục bộ thôi, ừm có lẽ đặt một file readme giả vào đó và commit ừ chỉ để khởi động nó.
Um, and uh I want to lay down some ground rule here that today every task, every crewmate will be dispatched to a Pi agent running GPT-5.6 Luna um X High reasoning um level.
Ừm, và ừ tôi muốn đặt ra vài nguyên tắc ở đây rằng hôm nay mọi nhiệm vụ, mọi crewmate sẽ được điều phối đến một tác tử Pi chạy GPT-5.6 Luna ừm ở mức suy luận X High.
So, yeah, get that set up as well.
Vậy, ừ, thiết lập luôn cả việc đó nữa.
All right, just give this prompt to um Luna and let uh Luna start doing its work.
Được rồi, chỉ cần đưa prompt này cho ừm Luna và để ừ Luna bắt đầu làm việc.
So, um yeah, it's running a session start script.
Vậy, ừm ừ, nó đang chạy script khởi động phiên.
This is how FirstMate works.
Đây là cách FirstMate hoạt động.
Uh FirstMate has a bunch of scripts to handle the deterministic uh aspect of uh running this uh whole FirstMate thing.
Ừ FirstMate có một loạt script để xử lý ừ khía cạnh tất định ừ của việc ừ vận hành toàn bộ thứ FirstMate này.
Um, and it will call some skills, it will do some of the scripts.
Ừm, và nó sẽ gọi một số skill, nó sẽ chạy một số script.
What I typically actually do is to ignore all this noise because FirstMate is just calling the tools, calling the scripts it needs, calling the skills to do its work, right?
Điều tôi thường thực sự làm là bỏ qua tất cả những tiếng ồn này vì FirstMate chỉ đang gọi các công cụ, gọi các script nó cần, gọi các skill để làm việc của nó, đúng chứ?
I don't really need to look at which tools it called and etc.
Tôi thực sự không cần phải xem nó đã gọi những công cụ nào, v.v.
etc.
V.v.
That's not super useful for me.
Điều đó không thực sự hữu ích với tôi.
So, I actually have this calm mode.
Vậy nên, tôi thực ra có chế độ yên tĩnh này.
This is something that comes with FirstMate and it's only possible for the Pi agent.
Đây là thứ đi kèm với FirstMate và chỉ khả dụng cho Pi agent.
It's not available for other agent harnesses yet.
Nó chưa khả dụng cho các agent harness khác.
In the Pi agent, FirstMate comes with this calm mode.
Trong Pi agent, FirstMate đi kèm với chế độ yên tĩnh này.
If I turn this on, then all those noise disappears.
Nếu tôi bật cái này lên, thì tất cả những tiếng ồn đó biến mất.
The only thing that's going to show in the terminal is my prompt and FirstMate's response.
Thứ duy nhất hiển thị trên terminal là câu lệnh của tôi và phản hồi của FirstMate.
So, I don't really need to look at all the tool calls and everything, which makes the experience really clean.
Vậy nên, tôi thực sự không cần phải xem tất cả các lệnh gọi công cụ và mọi thứ, điều này làm cho trải nghiệm thực sự gọn gàng.
And that is how I want to work with FirstMate typically.
Và đó là cách tôi muốn làm việc với FirstMate thông thường.
I think with less intelligent models that we had maybe like a year ago, two years ago, it's really useful to look at what the
Tôi nghĩ với những mô hình kém thông minh hơn mà chúng ta có cách đây khoảng một năm, hai năm, thì thực sự hữu ích khi xem
agent is doing, which tools is calling, which files is reading, etc.
Agent đang làm gì, đang gọi những công cụ nào, đang đọc những tệp nào, v.v.
etc.
V.v.
because sometimes it will make mistakes, right?
Bởi vì đôi khi nó sẽ mắc lỗi, đúng không?
It will go down a wrong path.
Nó sẽ đi sai đường.
And if we can look at what it's doing, we can steer it.
Và nếu chúng ta có thể xem nó đang làm gì, chúng ta có thể điều hướng nó.
We can actually ask it to say, "Hey, stop.
Chúng ta thực sự có thể yêu cầu nó nói, "Này, dừng lại.
That's the wrong thing to do." But with today's models, it's actually more and more rare that I need to steer the agent that way.
Đó là điều sai cần làm." Nhưng với các mô hình ngày nay, tôi ngày càng ít cần phải điều hướng agent theo cách đó.
So, I just find it's less useful now to look at the tool calls and everything.
Vậy nên, tôi thấy bây giờ việc xem các lệnh gọi công cụ và mọi thứ ít hữu ích hơn.
So, I did this calm mode to just help me ignore all those noise.
Vậy nên, tôi đã làm chế độ yên tĩnh này để giúp tôi bỏ qua tất cả những tiếng ồn đó.
So, now yeah, FirstMate said, "Captain, Eddie's wallet is set up." Um Okay.
Vậy nên, bây giờ đúng rồi, FirstMate nói, "Thuyền trưởng, ví của Eddie đã được thiết lập." Ừm Được rồi.
Um It's locally in here and readme stairs initial commits.
Ừm Nó nằm cục bộ ở đây và readme stairs initial commits.
Okay.
Được rồi.
Crew dispatch.
Crew dispatch.
Okay, so it's basically done what I asked, which is good.
Được rồi, vậy về cơ bản nó đã làm những gì tôi yêu cầu, điều đó tốt.
Now, I'm going to talk to first mate about this project, what I really want to build, right?
Bây giờ, tôi sẽ nói với first mate về dự án này, những gì tôi thực sự muốn xây dựng, đúng không?
So I'll just tell first mate the same time I tell you guys.
Vậy nên tôi sẽ chỉ nói với first mate cùng lúc tôi nói với các bạn.
Hey first mate.
Này first mate.
Now this Eddie's wallet project is a um it's an app that my son Eddie told me to build for him.
Bây giờ dự án ví của Eddie này là một ừm nó là một ứng dụng mà con trai tôi Eddie bảo tôi xây dựng cho nó.
Uh it's a it's an app for children to manage their allowances.
Uh nó là một nó là một ứng dụng để trẻ em quản lý tiền tiêu vặt của chúng.
Um so right now we sometimes write this down in a notebook.
Ừm vậy hiện tại đôi khi chúng tôi ghi cái này vào sổ tay.
Sometimes we just try to remember it, but it's really hard to manage once we have like a bunch of things, a bunch of rules for how he gets
Đôi khi chúng tôi chỉ cố gắng ghi nhớ nó, nhưng thực sự khó quản lý khi chúng tôi có một đống thứ, một đống quy tắc về cách nó nhận
allowance and how he spends it.
Tiền tiêu vặt và cách nó tiêu nó.
So I want to use this app for as a tracker for Eddie to manage his balance.
Vậy nên tôi muốn dùng ứng dụng này như một công cụ theo dõi để Eddie quản lý số dư của nó.
Um I also want to actually take this as an opportunity have this app have some educational value to teach Eddie the basic financial concepts like balance, loans, and how credit cards work, right?
Ừm tôi cũng muốn thực sự tận dụng cơ hội này để ứng dụng này có chút giá trị giáo dục nhằm dạy Eddie các khái niệm tài chính cơ bản như số dư, khoản vay, và cách thẻ tín dụng hoạt động, đúng không?
How he makes payment back for a loan, things like that and interest for the money he's saving in the in the in the account.
Cách nó trả lại tiền cho một khoản vay, những thứ như vậy và lãi suất cho số tiền nó tiết kiệm trong trong trong tài khoản.
So I think we should try to have this app introduce kids to these concepts gradually in a natural way in a way that they can understand.
Vậy nên tôi nghĩ chúng ta nên cố gắng để ứng dụng này giới thiệu cho trẻ em những khái niệm này dần dần một cách tự nhiên theo cách mà chúng có thể hiểu được.
So this app is probably iOS only for now because Eddie uses an iPad most of the time.
Vậy nên ứng dụng này có lẽ chỉ dành cho iOS vào lúc này vì Eddie dùng iPad hầu hết thời gian.
And I want this app to have a parent mode and a child mode.
Và tôi muốn ứng dụng này có chế độ phụ huynh và chế độ trẻ em.
So in the parent mode I can deposit and I can manage withdrawal.
Vậy nên trong chế độ phụ huynh tôi có thể nạp tiền và tôi có thể quản lý việc rút tiền.
In child mode that's what Eddie use Uh and Eddie can use the child mode to um look around and see how much balance he balance he has.
Trong chế độ trẻ em đó là cái mà Eddie dùng Uh và Eddie có thể dùng chế độ trẻ em để ừm xem xung quanh và xem nó có bao nhiêu số dư số dư.
Uh is he taking a loan, etc.
Uh nó có đang vay một khoản không, v.v.
etc.
V.v.
It's basically a read-only mode.
Về cơ bản nó là một chế độ chỉ đọc.
Um So, that's probably like the high-level requirements.
Ừm Vậy nên, đó có lẽ là những yêu cầu cấp cao.
Um I haven't thought through all the details yet.
Ừm tôi chưa nghĩ thấu đáo tất cả các chi tiết.
Um but there's a few things I want to do.
Ừm nhưng có một vài thứ tôi muốn làm.
Um first, I want to do a market research to see whether such an app already exist.
Ừm đầu tiên, tôi muốn làm một nghiên cứu thị trường để xem liệu một ứng dụng như vậy đã tồn tại chưa.
Because if it already exists that does exactly what I described, then I'll just install the app for him.
Bởi vì nếu nó đã tồn tại và làm chính xác những gì tôi mô tả, thì tôi sẽ chỉ cài ứng dụng đó cho nó.
Uh if it doesn't exist, then that's an unique uh gap that we can build an app to fill.
Uh nếu nó chưa tồn tại, thì đó là một khoảng trống độc đáo mà chúng ta có thể xây dựng một ứng dụng để lấp đầy.
Um but pay attention that I want to um make sure the money in this app is virtual, it's not real money, right?
Um nhưng hãy chú ý rằng tôi muốn đảm bảo số tiền trong ứng dụng này là ảo, không phải tiền thật, đúng không?
It's just a virtual wallet tracking these numbers.
Nó chỉ là một ví ảo theo dõi những con số này.
Uh the other thing I want to make sure is like uh the data is portable and stored in the cloud.
Uh điều khác tôi muốn đảm bảo là dữ liệu có thể di động và được lưu trữ trên đám mây.
Because uh I may want to use my phone to manage uh the deposit and withdraw not on the same device as Eddie's iPad.
Bởi vì uh tôi có thể muốn dùng điện thoại của mình để quản lý việc nạp và rút tiền, không phải trên cùng thiết bị với iPad của Eddie.
Uh and Eddie sometimes may switch devices.
Uh và đôi khi Eddie có thể đổi thiết bị.
Uh and the data should be visible on all the devices he use.
Uh và dữ liệu nên hiển thị trên tất cả các thiết bị anh ấy sử dụng.
Uh he has a Mac um and has a an iPad.
Uh anh ấy có một chiếc Mac um và có một chiếc iPad.
Uh for now, we just worry about iOS.
Uh hiện tại, chúng ta chỉ quan tâm đến iOS.
Um but uh knowing that he has multiple devices, I think we have to persist the data in in the cloud.
Um nhưng uh biết rằng anh ấy có nhiều thiết bị, tôi nghĩ chúng ta phải lưu trữ dữ liệu trên đám mây.