Người trình bày: Phuong · Team: C Tổng thời lượng: ~14–16 phút nói + Q&A Điều khiển: ←/→ chuyển slide · L đổi ngôn ngữ · N bật/tắt notes · F fullscreen
Mẹo: tập nói trước 1–2 lần cho khớp thời gian. Mỗi slide có mốc phút gợi ý. Câu in đậm là câu chốt — nói chậm và nhấn.
Chào mọi người. Hôm nay mình muốn nói về một thứ mà chắc ai ở đây cũng đang dùng hằng ngày rồi: làm việc với AI.
Nhưng không phải "AI là gì" hay "prompt sao cho hay". Mình muốn nói thẳng vào một câu hỏi thực tế hơn: tại sao cùng một con AI, cùng một task, có lúc nó làm cực tốt, có lúc nó làm ra thứ phải bỏ đi?
Câu trả lời ngắn gọn nằm ngay trên slide này: model thì đã đủ giỏi rồi. Thứ quyết định là *context* mình đưa cho nó — và quan trọng hơn, việc đưa context đó cứ mãi là làm tay, hay mình biến được nó thành tự động.
Bài này mình chia làm 3 phần: (1) những vấn đề ai cũng gặp khi dùng AI, (2) cách giải quyết thủ công, và (3) cách tự động hoá bằng một bộ kit.
Trước hết là tư duy nền, gói trong một dòng: Output = f(Context). Chất lượng đầu ra là hàm của context, chứ không phải hàm của độ thông minh của model.
Cách dễ nhất để hình dung: hãy coi AI như một bạn dev mới rất giỏi vừa vào công ty. Năng lực miễn bàn — tầm senior. Nhưng ngày đầu tiên, bạn ấy chưa biết gì về dự án của mình cả: không biết codebase, không biết convention, không biết nghiệp vụ.
Giờ nếu mình quăng cho bạn ấy một ticket một dòng, không giải thích gì — thì kể cả giỏi, bạn ấy vẫn làm ra thứ sai. Không phải vì kém, mà vì thiếu ngữ cảnh.
AI y hệt vậy. Nên câu hỏi thật không phải "model đủ giỏi chưa", mà là "làm sao mình giao context cho nó — một cách đáng tin cậy, lặp lại được". Cả bài hôm nay xoay quanh câu đó.
Vào phần một: những vấn đề. Mình gom lại thành 4 nỗi đau mà mình tin là ai trong phòng cũng từng gặp.
Một — thiếu context: AI chưa từng có codebase, convention hay nghiệp vụ, nên nó đoán.
Hai — lặp lại context: mình phải dán đi dán lại đúng những file và quy tắc đó vào mỗi cuộc chat mới, ngày nào cũng vậy.
Ba — AI quên: chat dài một chút là tràn context window; quyết định mình chốt cách đó một tiếng tự nhiên biến mất.
Bốn — hên xui khi prompt: mỗi người prompt một kiểu, nên cùng một task ra kết quả khác nhau, không lặp lại được.
*(Có thể hỏi khán giả)* — Mọi người thấy mình dính cái nào? … Thường là cả bốn. Giữ bốn cái này trong đầu, vì cả phần sau của bài chính là đi giải quyết từng cái.
Đào sâu hai nỗi đau đầu tiên, vì đây là thứ ăn mòn thời gian mỗi ngày.
Một cuộc chat mới luôn bắt đầu từ con số không. Nó không biết cấu trúc thư mục, không biết "team mình bọc mọi route admin trong withAdmin", không biết "team mình archive dữ liệu chứ không xoá cứng".
Nên mình làm gì? Mình dán file, giải thích convention, kể lại ticket. Mất chừng 10 phút *trước khi* công việc thật sự bắt đầu.
Rồi mai, chat mới, mình làm lại y hệt. Nhân con số đó với mọi dev, mọi task, mỗi ngày.
Gốc rễ là: kiến thức của mình đang nằm rải rác ở docs, ở ticket, ở Slack, và trong đầu mỗi người — không bao giờ nằm ở chỗ AI với tới được.
Hai nỗi đau còn lại nặng hơn, vì nó bào mòn niềm tin.
Context window là hữu hạn. Trong một task dài, những quyết định lúc đầu bị đẩy ra ngoài, và AI bắt đầu tự mâu thuẫn với chính nó.
Tệ hơn: đóng chat là mất sạch. Phiên làm việc sau lặp lại đúng cái lỗi mà mình đã sửa rồi.
Và vì không có chuẩn chung, prompt của mình với prompt của bạn cho ra code khác nhau trên cùng một ticket.
Cộng lại, cảm giác dùng AI giống như đánh bạc — lúc thì tuyệt vời, lúc thì phải làm lại. Và chính cái cảm giác hên xui đó mới là thứ giết chết việc cả team chịu dùng AI một cách nghiêm túc. Đây là lý do mình cần một hệ thống, chứ không chỉ mẹo cá nhân.
Phần hai: giải quyết thủ công. Và mình muốn nói thẳng — cách thủ công thật sự hiệu quả. Một bạn dev kỷ luật làm bốn việc này sẽ cho kết quả rất tốt.
Một, viết một file context bằng tay: stack, cấu trúc, convention — rồi dán vào mỗi chat.
Hai, giữ một prompt template tái sử dụng, kiểu "đây là task, đây là quy tắc", để prompt bớt tuỳ hứng.
Ba, ép AI nghiên cứu và lập kế hoạch *trước* khi code, và mình tự review cái plan đó.
Bốn, ghi lại các quyết định và cạm bẫy — "đã chốt X vì Y" — để dán lại về sau.
Nếu bạn đang làm mấy cái này rồi thì xin chúc mừng, bạn đang dùng AI đúng cách. Nhưng… *(chuyển sang slide sau)*
…nhưng kỷ luật thủ công không nhân rộng được. Đây là điểm mấu chốt.
Thứ nhất, nó dựa vào ý chí. Mà khi gấp deadline thì ai cũng bỏ qua bước cấp context — đúng lúc cần nhất thì lại bỏ.
Thứ hai, docs viết tay bị lỗi thời. Và một fact sai còn nguy hiểm hơn không có fact, vì nó dẫn AI đi sai một cách tự tin.
Thứ ba, nó là của cá nhân. Kỷ luật của bạn nằm trong đầu bạn — bạn nghỉ phép là team mất luôn.
Thứ tư, nó vẫn là lao động copy-paste — đúng cái sự lặp lại mà ngay từ đầu mình muốn loại bỏ.
Nên lời giải không phải là "cố gắng kỷ luật hơn". Lời giải là biến kỷ luật đó thành tự động và dùng chung cả team — biến nó thành một hệ thống, chứ không phải một thói quen. Và đó là phần ba.
Đây là một bộ kit open-source tên là *vibecode-pro-max-kit*. Nó đóng gói sẵn đúng cái kỷ luật mình vừa nói.
Điểm quan trọng: nó không phải một file prompt. Nó cài vào cả một hệ thống — 15 agent chuyên biệt, 33 skill, 10 hook an toàn, 36 validator, và một cây tri thức tên process/.
Slogan của nó tóm gọn cả bài mình: *"Your AI forgets. This remembers."* — AI của bạn quên, cái này thì nhớ.
Cách nó hoạt động: lập kế hoạch trước, ép theo quy trình, và tri thức sống trên đĩa nên sống sót qua cả khi mình đóng chat hay reset phiên. Cài bằng một lệnh, và dùng được trên nhiều tool — Claude Code, Codex, Cursor, Windsurf — với mọi tech stack.
Bốn slide tiếp theo mình sẽ soi từng cơ chế, và mỗi cơ chế gắn thẳng với một nỗi đau ở phần một.
Đầu tiên là bộ khung quy trình, gọi là RIPER-5. Nó chia công việc thành các pha có thứ tự: Research → Spec → Innovate → Plan → Execute → Update.
Cái hay nằm ở chỗ các pha *bị khoá* — mọi người thấy ổ khoá trên sơ đồ. Pha RESEARCH không được phép viết code, nó chỉ được tìm hiểu. Pha PLAN không được đụng vào source, nó chỉ được ghi vào thư mục process/.
Nghĩa là AI không thể "code non" — nhảy vào code khi chưa hiểu yêu cầu, vốn là lỗi số một khi dùng AI. Và nó chặn tự động, chứ không dựa vào việc mình nhớ nhắc. Đây chính là bước "ép lập kế hoạch trước" ở phần thủ công, giờ được tự động hoá.
Tiếp theo, định tuyến context — cái này giải quyết trực tiếp nỗi đau "thiếu" và "lặp lại".
Thay vì mình dán file, kit dùng các file router. Ví dụ all-context.md chỉ tới kiến trúc, tests/all-tests.md chỉ tới cách chạy test, container/all-container.md chỉ tới Docker và deploy.
AI chỉ đọc đúng router liên quan tới việc đang làm — không nạp cả kho tri thức mỗi phiên, nên không tốn context window vô ích.
Kết quả: mình ngừng dán file. Context viết trên đĩa một lần, và AI tự tìm tới nó mỗi lần. Một chủ đề mà phình to lên thì tự tách thành nhóm riêng; đổi tên thì chỉ sửa router, không đụng vào code.
Cơ chế thứ ba, bộ nhớ bền vững — giải quyết nỗi đau "AI quên".
Toàn bộ plan, spec, report không nằm trong context window mà nằm trên đĩa, trong cây process/, chia rõ active, completed, backlog.
Thêm nữa, mỗi pha ghi lại một "Context Envelope" — một snapshot 10 trường: đang làm feature nào, ở pha nào, branch nào, file plan ở đâu, chạy test bằng gì… Nhờ vậy một agent mới hoàn toàn có thể đọc vào và tiếp tục đúng chỗ đã dừng.
Nói cách khác: đóng chat, mai quay lại, AI đọc file và làm tiếp giữa chừng. Nó không lặp lại cái lỗi mình đã sửa nữa. Đây đúng là câu trả lời cho "AI quên".
Cơ chế cuối, các rào chắn giúp kết quả lặp lại được — tức là dẹp cái "hên xui".
Skill và agent tự nhận diện theo từ khoá. Mình nhắc "webhook" là skill bảo mật với skill kịch bản tự động gắn vào. Ai cũng chạy cùng một routine như nhau.
Có hai vòng kiểm định độc lập: PVL kiểm cái plan trước khi viết code; còn EVL thì có một tester *riêng* chạy lại test — nghĩa là lời "chạy xanh hết rồi" của người viết code không bao giờ được tin, luôn có người thứ hai xác nhận.
Autopilot có ba làn khớp mức nghi thức với rủi ro: Quick cho fix một dòng, Fast, và Full RIPER-5 — nên không ai bắt chạy cả quy trình cho một lỗi chính tả. Và MCP kết nối thẳng Jira, Drive, browser thành context trực tiếp, hết cảnh copy-paste từ tool khác.
Đây là slide chốt của cả bài. Mình đặt cạnh nhau: từng nỗi đau, cách làm tay, và cách kit làm.
Thiếu context — tay thì dán file mỗi lần; kit thì router tự lấy. Lặp lại — tay thì gõ lại quy tắc mỗi chat; kit thì viết một lần trên đĩa. Quên — tay thì mất khi đóng chat; kit thì Envelope với process/ cho tiếp tục. Hên xui — tay thì mỗi dev một kiểu; kit thì RIPER-5 với validator cho tất cả. Và kỷ luật — tay thì gấp là bỏ; kit thì khoá pha ép tuân thủ.
Thông điệp gọn một câu: vẫn là đúng cái kỷ luật đó — nhưng giờ không cần ý chí, và nó là tài sản dùng chung của cả team.
Để cụ thể, cùng một ticket, chạy hai lần.
Bên trái, prompt trần: "thêm một API admin để xoá sản phẩm." AI làm ra: thiếu guard xác thực, đặt sai thư mục, xoá cứng dữ liệu, quên i18n — tức là phải làm lại.
Bên phải, qua kit: cùng ticket đó, nó tự lấy context, lập plan, kiểm định, rồi mới thực thi. Kết quả: tự bọc withAdmin, archive thay vì xoá cứng, đúng convention, kèm i18n và test.
*(Nếu có bản quay thật thì mở tại đây)* — Đây là slide thuyết phục nhất, vì nó cho thấy khác biệt trên cùng một đầu vào.
Vậy team mình bắt đầu thế nào? Rất nhẹ nhàng.
Cài một lần cho mỗi repo bằng một lệnh. Repo mới thì chạy vc-setup để nó tự dò stack và dựng process/; repo cũ thì vc-update. Nó không ghi đè gì cả — sao lưu trước.
Nạp context từ chính những thứ mình đã có: trỏ router tới docs, ticket, convention hiện tại.
Rồi thử trên đúng một feature trong sprint này, và đo lượng làm lại so với cách prompt trần.
Và vì pha UPDATE tự cập nhật context sau mỗi feature, mình không tích nợ tài liệu lỗi thời — cái điểm yếu lớn nhất của cách thủ công.
Tóm lại bốn ý.
Một, output của AI chỉ tốt bằng context nó có — hãy đối xử với nó như onboarding một dev mới.
Hai, tất cả các nỗi đau — thiếu, lặp lại, bị quên, không nhất quán — thực ra đều là một vấn đề: giao context.
Ba, mình giải quyết bằng tay được, nhưng kỷ luật không nhân rộng. Tự động hoá để nó thành tài sản của team.
Bốn, bộ kit biến "hên xui khi prompt" thành một hệ thống lặp lại được — và con người vẫn là người quyết định, vẫn chịu trách nhiệm cuối cùng.
Đề xuất cụ thể của mình: pilot kit trên một feature ngay sprint này, đo rework, rồi báo cáo lại team.
Cảm ơn mọi người. Mình xin nhận câu hỏi.
.env, docs chỉ ghi tên biến. Memory được version trong git nên review được qua PR. Output của AI vẫn phải qua review và CI như thường.Presenter: Phuong · Team: C Total runtime: ~14–16 min talk + Q&A Controls: ←/→ change slide · L switch language · N toggle notes · F fullscreen
Tip: rehearse once or twice for timing. Each slide has a suggested minute mark. Bold lines are the punchlines — slow down and land them.
Hi everyone. Today I want to talk about something I'm pretty sure all of us already use every day: working with AI.
But not "what is AI" or "how to write clever prompts." I want to hit a more practical question: why does the same AI, on the same task, sometimes do great work and sometimes produce something you have to throw away?
The short answer is right on this slide. The model is already smart enough. What decides the outcome is the *context* you feed it — and, more importantly, whether feeding that context stays a manual chore forever or becomes automated.
I've split this into three parts: (1) the problems everyone hits with AI, (2) how we solve them by hand, and (3) how we automate it with a kit.
First, the mental model, in one line: Output = f(Context). Output quality is a function of context — not a function of how smart the model is.
The easiest way to picture it: treat AI like a brilliant new developer who just joined. Raw ability, no question — senior level. But on day one, they know nothing about your project: not the codebase, not the conventions, not the domain.
Now if you hand that person a one-line ticket with no explanation — even though they're good, they'll build the wrong thing. Not because they're weak, but because they lack context.
AI is exactly the same. So the real question isn't "is the model good enough" — it's "how do we deliver context to it, reliably and repeatably." That's what the whole talk is about.
On to part one: the problems. I've grouped them into four pains that I believe everyone in this room has felt.
One — missing context: the AI never had your codebase, conventions, or domain, so it guesses.
Two — repetitive context: you re-paste the same files and rules into every new chat, every single day.
Three — the AI forgets: a slightly long chat overflows the context window, and a decision you made an hour ago just vanishes.
Four — prompt luck: everyone prompts differently, so the same task gives different results — you can't reproduce it.
*(Optional — ask the audience)* — Which of these do you hit? … Usually all four. Keep these four in mind, because the rest of the talk is about solving each one.
Let's go deeper on the first two, because this is what eats your time every day.
A fresh chat always starts from zero. It doesn't know your folder structure, doesn't know "our team wraps every admin route in withAdmin," doesn't know "we archive data, we never hard-delete."
So what do we do? We paste files, explain conventions, restate the ticket. That's about 10 minutes *before* the real work even begins.
Then tomorrow, new chat, we do the exact same thing. Multiply that by every developer, every task, every day.
The root cause: our knowledge lives scattered across docs, tickets, Slack, and people's heads — never where the AI can actually reach it.
The other two pains are heavier, because they erode trust.
The context window is finite. In a long task, the early decisions get pushed out, and the AI starts contradicting itself.
Worse: close the chat and it's all gone. The next session repeats the exact mistake you already fixed.
And because there's no shared standard, my prompt and your prompt produce different code for the same ticket.
Add it all up, and using AI feels like gambling — sometimes brilliant, sometimes rework. And it's that gambling feeling that kills a team's willingness to adopt AI seriously. This is why we need a system, not just a personal trick.
Part two: solving it manually. And I want to say this plainly — the manual approach genuinely works. A disciplined developer who does these four things gets great results.
One, write a context file by hand: stack, structure, conventions — and paste it into each chat.
Two, keep a reusable prompt template, something like "here's the task, here are the rules," so prompts are less random.
Three, force the AI to research and plan *before* it codes, and review that plan yourself.
Four, log your decisions and gotchas — "we decided X because Y" — to paste back later.
If you're already doing these, congratulations, you're using AI the right way. But… *(advance to next slide)*
…but manual discipline doesn't scale. This is the crux.
First, it relies on willpower. And under deadline pressure, everyone skips the context step — right when it matters most, that's when we drop it.
Second, hand-written docs go stale. And a wrong fact is more dangerous than no fact, because it leads the AI astray with confidence.
Third, it's personal. Your discipline lives in your head — you take a day off and the team loses it.
Fourth, it's still copy-paste labor — the very repetition we were trying to eliminate in the first place.
So the fix isn't "try to be more disciplined." The fix is to make that discipline automatic and team-wide — turn it into a system, not a habit. And that's part three.
This is an open-source kit called *vibecode-pro-max-kit*. It packages up exactly the discipline we just described.
The key point: it's not a prompt file. It installs a whole system — 15 specialized agents, 33 skills, 10 safety hooks, 36 validators, and a knowledge tree called process/.
Its tagline sums up my whole talk: *"Your AI forgets. This remembers."*
How it works: plan first, enforce the process, and keep knowledge on disk so it survives even when you close the chat or reset the session. It installs with one command, and it works across multiple tools — Claude Code, Codex, Cursor, Windsurf — on any tech stack.
The next four slides walk through each mechanism, and each one maps straight back to a pain from part one.
First, the workflow harness, called RIPER-5. It breaks work into ordered phases: Research → Spec → Innovate → Plan → Execute → Update.
The beauty is that the phases are *locked* — you can see the padlocks on the diagram. The RESEARCH phase isn't allowed to write code, it can only gather facts. The PLAN phase can't touch source, it can only write to the process/ folder.
That means the AI can't "jump to code" before it understands the requirement — which is the number-one AI failure mode. And it blocks that automatically, not by relying on you to remember. This is the "force a plan first" step from the manual part — now automated.
Next, context routing — this directly solves the "missing" and "repetitive" pains.
Instead of you pasting files, the kit uses router files. For example, all-context.md points to the architecture, tests/all-tests.md points to how you run tests, container/all-container.md points to Docker and deployment.
The AI reads only the router relevant to the work at hand — it doesn't load the entire knowledge base every session, so it doesn't waste the context window.
The result: you stop pasting files. Context is written on disk once, and the AI routes to it every time. When a topic grows large, it auto-splits into its own group; renaming it only touches the router, not your code.
The third mechanism, persistent memory — this solves the "AI forgets" pain.
All plans, specs, and reports don't sit in the context window — they sit on disk, in the process/ tree, split into active, completed, backlog.
On top of that, each phase writes a "Context Envelope" — a 10-field snapshot: which feature, which phase, which branch, where the plan file is, how to run tests, and so on. That lets a completely fresh agent read it in and resume exactly where it stopped.
In other words: close the chat, come back tomorrow, and the AI reads the files and picks up mid-task. It stops repeating the mistake you already fixed. That's the direct answer to "the AI forgets."
The last mechanism, the guardrails that make results repeatable — that is, they kill the "luck."
Skills and agents auto-discover by keyword. Mention "webhook" and the security skill and scenario skill attach themselves. Everyone runs the exact same routine.
There are two independent quality loops: PVL validates the plan before any code is written; and EVL has a *separate* tester re-run the tests — meaning the coder's "everything's green" is never trusted; there's always a second party to confirm.
Autopilot has three lanes that match ceremony to risk: Quick for a one-line fix, Fast, and Full RIPER-5 — so nobody's forced to run the whole process for a typo. And MCP connects Jira, Drive, and the browser directly as first-class context — no more copy-pasting from other tools.
This is the payoff slide of the whole talk. I put them side by side: each pain, the manual way, and the kit's way.
Missing context — by hand you paste files each time; the kit's routers fetch it automatically. Repetition — by hand you re-type the rules every chat; the kit writes it once on disk. Forgetting — by hand it's lost when the chat closes; the kit resumes via the Envelope and process/. Prompt luck — by hand every dev differs; the kit gives everyone RIPER-5 plus validators. And discipline — by hand it's skipped under pressure; the kit enforces it with phase-locks.
The message in one sentence: it's the exact same discipline — but now it needs no willpower, and it's a shared asset for the whole team.
To make it concrete, here's the same ticket, run two ways.
On the left, the raw prompt: "add an admin API to delete a product." The AI produces: no auth guard, wrong folder, hard-deletes the data, forgets i18n — in other words, rework.
On the right, through the kit: same ticket, but it routes context, plans, validates, and only then executes. The result: it wraps withAdmin, archives instead of hard-deleting, uses the correct convention, and includes i18n and tests.
*(If you have a real recording, open it here)* — This is the most convincing slide, because it shows the difference on the exact same input.
So how does our team get started? Very lightly.
Install once per repo with a single command. A fresh repo runs vc-setup, which auto-detects the stack and scaffolds process/; an existing repo runs vc-update. It never overwrites anything — it backs up first.
Seed the context from what you already have: point the routers at your existing docs, tickets, and conventions.
Then pilot it on just one feature this sprint, and measure the rework against the raw-prompt baseline.
And because the UPDATE phase refreshes context after every feature, you don't pile up stale-doc debt — which is the biggest weakness of the manual approach.
To wrap up, four points.
One, the AI's output is only as good as the context it has — treat it like onboarding a new developer.
Two, all the pains — missing, repetitive, forgotten, inconsistent — are really one problem: delivering context.
Three, you can solve it by hand, but discipline doesn't scale. Automate it so it becomes a team asset.
Four, the kit turns "prompt luck" into a repeatable system — and humans still decide, and stay accountable for the final call.
My concrete proposal: pilot the kit on one feature this very sprint, measure rework, and report back to the team.
Thank you all. I'm happy to take questions.
.env, docs only record the variable names. Memory is versioned in git, so every change is reviewable in a PR. And the AI's output still goes through review and CI as usual.