- Published on
Day 01 - Mindset: Claude Code không phải chatbot
- Authors

- Name
- Trần Mạnh Thắng
- @TranManhThang96
1. Mục tiêu bài học
Sau khoảng 2 tiếng, học viên cần làm được các việc sau:
- Hiểu Claude Code là một
agentic terminal toollàm việc trong repo, không phải chatbot để hỏi đáp rời rạc. - Phân biệt AI chat, autocomplete và agentic coding.
- Áp dụng vòng lặp
observe -> plan -> act -> verifycho một task nhỏ trong project xuyên suốttaskflow-ai. - Viết prompt có context, constraints và acceptance criteria thay vì prompt mơ hồ.
- Nhìn đúng vai trò của developer: owner, reviewer, architect.
- Biết khi nào chỉ cho Claude Code đọc/lập plan, khi nào mới cho phép sửa file hoặc chạy command.
Kết quả cuối ngày: bạn có một workflow có kiểm soát để bắt đầu dùng Claude Code. Mục tiêu không phải tạo thật nhiều file, mà là biết giao việc, kiểm chứng và giữ quyền quyết định kỹ thuật.
2. Bối cảnh thực tế
Nhiều developer mới dùng AI coding assistant theo kiểu chatbot:
- "Viết giúp tôi app quản lý task."
- "Fix bug này."
- "Tối ưu code này."
Các prompt này tạo cảm giác nhanh, nhưng trong repo thật chúng thường dẫn đến scope phình to, code khó review, thiếu test, hoặc agent tự ý sửa file không liên quan. Vấn đề không chỉ là AI đúng hay sai; vấn đề là developer chưa thiết kế workflow đủ rõ.
Claude Code khác chatbot ở chỗ nó chạy trong terminal và làm việc trực tiếp với codebase. Khi được cấp quyền, nó có thể đọc file, tìm conventions, sửa code, chạy command và hỗ trợ Git workflow. Vì vậy, bạn không nên dùng nó như nơi hỏi đáp. Bạn cần dùng nó như một agent có khả năng hành động, còn bạn là người sở hữu kết quả.
Nên dùng Claude Code khi:
- Cần đọc nhanh một repo mới.
- Cần lập plan cho feature, bug fix, refactor nhỏ.
- Cần tạo thay đổi có scope rõ và có cách verify.
- Cần viết test, review diff, giải thích architecture.
- Cần tự động hóa thao tác lặp lại trong sandbox.
Không nên dùng Claude Code khi:
- Repo có secret, production credential hoặc dữ liệu khách hàng chưa được xử lý an toàn.
- Task liên quan auth, payment, migration phá dữ liệu, security boundary mà chưa có reviewer.
- Bạn chưa biết acceptance criteria nhưng vẫn muốn agent implement ngay.
- Bạn không có thời gian đọc diff, chạy test hoặc rollback.
Trong Day 01, project taskflow-ai chỉ đóng vai trò sandbox để luyện mindset. Việc setup full backend/frontend sẽ để sang Day 02.
3. Kiến thức nền
Claude Code là gì
Claude Code là công cụ agentic chạy trong terminal. Bạn mở nó trong thư mục project bằng lệnh claude, sau đó giao việc bằng ngôn ngữ tự nhiên. Điểm khác biệt quan trọng là Claude Code có thể quan sát repo và thực hiện hành động nếu bạn cho phép.
So sánh ngắn:
- AI chat: trả lời dựa trên nội dung bạn nhập hoặc paste vào.
- Autocomplete: gợi ý đoạn code tiếp theo trong editor.
- Claude Code: đọc codebase, lập plan, sửa file, chạy command, verify bằng diff/test.
Agentic coding là gì
Agentic coding là cách dùng AI theo vòng lặp:
observe -> plan -> act -> verify
observe: đọc file, xem cấu trúc repo, xem README, xem command, xem lỗi.plan: đề xuất hướng làm, file sẽ chạm vào, rủi ro, cách verify.act: sửa file hoặc chạy command trong phạm vi đã được duyệt.verify: chạy test/lint/build, xem diff, đối chiếu acceptance criteria.
Nếu bỏ qua observe, agent dễ đoán sai architecture. Nếu bỏ qua plan, developer khó kiểm soát scope. Nếu bỏ qua verify, output chỉ là "có vẻ đúng".
Vai trò của developer
Developer không biến mất khỏi workflow. Vai trò của bạn rõ hơn:
Owner: chịu trách nhiệm cuối cùng về thay đổi được merge.Reviewer: đọc diff, kiểm tra edge cases, phát hiện hallucination hoặc test yếu.Architect: giữ module boundary, convention, security rule và maintainability.
Một cách nghĩ thực tế: Claude Code có thể là người thực hiện nhiều thao tác, nhưng không phải người ký duyệt architecture.
Vibe Coding và Vibe Engineering
Vibe Coding là đưa yêu cầu mơ hồ rồi accept output vì "nhìn có vẻ ổn". Cách này có thể dùng cho prototype rất nhỏ, nhưng nguy hiểm trong codebase thật.
Vibe Engineering là dùng AI để tăng tốc nhưng vẫn giữ kỷ luật engineering:
- Task có context và mục tiêu rõ.
- Scope có giới hạn.
- Có constraints và non-goals.
- Có acceptance criteria có thể kiểm chứng.
- Có diff, test, rollback.
Trong khóa học này, ta chọn Vibe Engineering.
Prompt mơ hồ và prompt có acceptance criteria
Prompt mơ hồ:
Tạo giúp tôi app quản lý task cho team.
Vấn đề:
- Không nói stack.
- Không nói hôm nay chỉ cần scope nào.
- Không nói file nào được sửa.
- Không nói output kỳ vọng.
- Không nói cách verify.
- Không chặn agent tự ý tạo architecture lớn.
Prompt tốt hơn:
Context:
Tôi đang ở Day 01 của khóa học Claude Code. Project xuyên suốt là taskflow-ai, nhưng hôm nay chỉ học mindset và agentic loop.
Goal:
Hãy đọc trạng thái repo hiện tại và đề xuất plan ngắn cho việc khởi tạo taskflow-ai ở Day 02.
Constraints:
- Không sửa file.
- Không chạy command ghi file.
- Stack mặc định: Node.js + TypeScript + Fastify, React + Vite, PostgreSQL, Redis.
- Nếu thiếu thông tin, hỏi lại trước.
Acceptance criteria:
- Trả lời gồm current state, proposed modules, commands dự kiến, risks.
- Nêu rõ file nào đã đọc.
- Không bịa file chưa tồn tại.
Prompt này buộc Claude Code observe trước, giới hạn quyền act, và tạo output để developer review.
4. Step-by-step thực hành
Thời lượng gợi ý:
- 15 phút: chuẩn bị sandbox và mở Claude Code.
- 25 phút: yêu cầu Claude Code observe repo.
- 25 phút: so sánh prompt mơ hồ và prompt có acceptance criteria.
- 35 phút: thực hành agentic loop với một thay đổi tài liệu nhỏ.
- 20 phút: review diff, thử rollback, ghi reflection.
Bước 1 — Chuẩn bị thư mục học tập
Chạy trong terminal tại thư mục bạn muốn đặt project học tập, ví dụ D:\my-source\learning trên Windows hoặc ~/learning trên macOS/Linux.
mkdir taskflow-ai
cd taskflow-ai
git init
Lệnh làm gì:
mkdir taskflow-ai: tạo thư mục sandbox cho project xuyên suốt.cd taskflow-ai: chuyển terminal vào đúng thư mục project.git init: khởi tạo Git để có thể xem diff và rollback.
Kết quả kỳ vọng:
- Thư mục
taskflow-aitồn tại. git initbáo đã khởi tạo repository mới.- Terminal đang đứng trong
taskflow-ai.
Rủi ro:
- Nếu thư mục đã tồn tại,
mkdircó thể báo lỗi. Khi đó chỉ cầncd taskflow-ai. - Không chạy trong repo công ty nếu bạn chỉ đang học.
- Không xóa thư mục cũ chỉ để làm lại nếu chưa kiểm tra bên trong có gì.
Nếu muốn có context tối thiểu, tạo thủ công file PRODUCT_BRIEF.md:
# taskflow-ai
taskflow-ai là ứng dụng quản lý task mini cho team kỹ thuật.
Stack dự kiến:
- Backend: Node.js + TypeScript + Fastify
- Frontend: React + Vite
- Database: PostgreSQL
- Cache: Redis
- Test: Vitest, Playwright
Đây chỉ là file học tập. Day 02 mới bắt đầu setup project có cấu trúc.
Bước 2 — Mở Claude Code trong project
Chạy tại root của taskflow-ai:
claude
Lệnh làm gì:
- Mở Claude Code interactive session trong project hiện tại.
- Claude Code sẽ dùng thư mục đang đứng làm context làm việc.
Kết quả kỳ vọng:
- Giao diện Claude Code xuất hiện trong terminal.
- Bạn có thể nhập prompt hoặc slash command.
Rủi ro:
- Nếu chạy
claudengoài thư mục project, agent có thể observe nhầm context. - Nếu CLI chưa cài hoặc chưa đăng nhập, lệnh sẽ báo lỗi. Ghi lại lỗi và xử lý kỹ hơn ở Day 02.
Trong Claude Code, thử:
/help
/help giúp xem slash command có sẵn. Day 01 chưa cần khởi tạo convention hay memory cho project; mục tiêu là mở đúng thư mục, quan sát repo và giữ quyền quyết định trước khi agent sửa file.
Nếu đóng terminal và muốn quay lại:
claude --continue
Lệnh làm gì:
- Tiếp tục session gần nhất trong thư mục hiện tại.
- Phù hợp khi bạn đang làm tiếp đúng project
taskflow-ai.
Nếu muốn chọn session cụ thể:
claude --resume
Hoặc dùng trong Claude Code:
/resume
Rủi ro:
- Chỉ resume khi terminal đang ở đúng root
taskflow-ai; nếu đứng sai thư mục, context có thể lệch. - Nếu session cũ chứa task không liên quan, hãy cân nhắc bắt đầu session mới hoặc dùng
/clear.
Bước 3 — Yêu cầu observe, chưa cho sửa file
Nhập prompt:
Hãy observe repo hiện tại trước.
Yêu cầu:
- Chỉ đọc file và chạy lệnh read-only nếu cần.
- Không sửa file.
- Không tạo file mới.
- Liệt kê file đã đọc.
- Kết luận repo hiện đang ở trạng thái nào.
- Đề xuất 3 bước tiếp theo cho project taskflow-ai, nhưng chưa thực hiện.
Kết quả kỳ vọng:
- Claude Code nói rõ repo rỗng hay có file nào.
- Nếu có
PRODUCT_BRIEF.md, nó tóm tắt đúng nội dung. - Nó đề xuất bước tiếp theo nhưng chưa sửa file.
Rủi ro:
- Nếu prompt không ghi "không sửa file", agent có thể tự tạo file.
- Nếu agent nói về file không tồn tại, đó là dấu hiệu hallucination. Hãy yêu cầu bằng chứng: path file, nội dung liên quan, lệnh đã dùng.
Bước 4 — So sánh prompt mơ hồ và prompt có acceptance criteria
Lần 1, thử prompt mơ hồ:
Tạo giúp tôi project taskflow-ai.
Không accept bất kỳ thay đổi nào nếu Claude muốn sửa file. Chỉ đọc plan/output.
Đánh giá:
- Claude có hỏi lại stack không?
- Claude có nói file sẽ sửa không?
- Claude có nêu cách verify không?
- Scope có quá lớn cho Day 01 không?
Lần 2, thử prompt có acceptance criteria:
Context:
Tôi đang ở Day 01 của khóa học Claude Code. Project xuyên suốt là taskflow-ai, nhưng hôm nay chỉ học mindset và agentic loop.
Goal:
Hãy tạo một plan ngắn cho việc khởi tạo taskflow-ai ở Day 02, chưa sửa file.
Constraints:
- Không edit file.
- Không chạy command ghi file.
- Stack mặc định: Node.js + TypeScript + Fastify, React + Vite, PostgreSQL, Redis.
- Plan phải chia thành các bước nhỏ có thể review.
Acceptance criteria:
- Có tối đa 7 bước.
- Mỗi bước có mục tiêu, file/folder dự kiến, command dự kiến, cách verify.
- Nêu rủi ro permission/security nếu để agent tự chạy toàn bộ.
So sánh:
- Prompt thứ hai có output dễ review hơn không?
- Claude có tôn trọng non-goal "chưa sửa file" không?
- Bạn có thể đưa plan này vào Day 02 không?
Bước 5 — Thực hành agentic loop với thay đổi nhỏ
Nếu muốn cho Claude Code thực hiện một act nhỏ trong Day 01, chỉ dùng với file tài liệu sandbox, ví dụ LEARNING_NOTES.md.
Prompt:
Observe:
Đọc PRODUCT_BRIEF.md nếu có và tóm tắt trạng thái repo.
Plan:
Đề xuất nội dung file LEARNING_NOTES.md để ghi lại mindset Day 01.
Act:
Sau khi tôi đồng ý, tạo hoặc cập nhật LEARNING_NOTES.md. Không sửa file khác.
Verify:
Sau khi sửa, chạy git diff -- LEARNING_NOTES.md và đối chiếu với acceptance criteria.
Acceptance criteria:
- File có 4 mục: mindset, agentic loop, prompt lessons, risks.
- Không quá 80 dòng.
- Không chứa secret hoặc thông tin công ty.
- Nội dung bằng tiếng Việt.
Chỉ approve khi plan đúng. Sau khi Claude sửa file, chạy:
git diff -- LEARNING_NOTES.md
Lệnh làm gì:
- Hiển thị thay đổi của riêng file
LEARNING_NOTES.md. - Giúp bạn review đúng phạm vi trước khi commit.
Kết quả kỳ vọng:
- Diff chỉ có
LEARNING_NOTES.md. - Nội dung khớp 4 mục trong acceptance criteria.
Rủi ro:
- Nếu diff có file khác, dừng lại và yêu cầu Claude giải thích vì sao chạm file ngoài scope.
- Không commit nếu bạn chưa đọc diff.
Bước 6 — Rollback khi Claude Code làm sai
Nếu thay đổi chưa commit và bạn muốn hủy riêng file đã được Git track:
git restore -- LEARNING_NOTES.md
Lệnh làm gì:
- Đưa file
LEARNING_NOTES.mdvề trạng thái gần nhất trong Git.
Kết quả kỳ vọng:
- Thường không có output nếu thành công.
git diff -- LEARNING_NOTES.mdkhông còn hiển thị thay đổi.
Rủi ro:
- Lệnh này xóa thay đổi chưa commit của file đó. Chỉ chạy khi chắc chắn không cần giữ nội dung.
- Không chạy
git restore .trong repo có nhiều thay đổi nếu chưa kiểm tra diff.
Kiểm tra trạng thái:
git status --short
Lệnh làm gì:
- Liệt kê file đang thay đổi ở dạng ngắn gọn.
Kết quả kỳ vọng:
- Nếu đã rollback hết, output trống.
- Nếu giữ file mới, có thể thấy
?? LEARNING_NOTES.md.
Rủi ro:
- Kết quả trống không có nghĩa logic đúng; nó chỉ nói Git không còn thấy thay đổi.
5. Prompt mẫu nên dùng
Prompt khám phá codebase
Hãy khám phá repo hiện tại như một senior engineer mới join team.
Constraints:
- Chỉ đọc file và chạy lệnh read-only.
- Không sửa file.
- Không suy đoán nếu chưa có bằng chứng trong repo.
Kết quả:
- Entry points nếu có.
- Cấu trúc folder chính.
- Build/test commands nếu tìm thấy.
- Rủi ro hoặc điểm thiếu context.
- Danh sách file đã đọc.
Prompt lập plan
Từ context repo hiện tại, hãy lập plan cho bước khởi tạo taskflow-ai ở Day 02.
Constraints:
- Chưa implement.
- Mỗi bước phải nhỏ, review được.
- Ghi rõ file/folder dự kiến sẽ tạo.
- Ghi rõ command dự kiến sẽ chạy và rủi ro của từng command.
Acceptance criteria:
- Plan tối đa 7 bước.
- Có phần verify cho từng bước.
- Có non-goals để tránh scope creep.
Prompt implement
Hãy thực hiện đúng plan đã được duyệt.
Scope:
- Chỉ tạo/cập nhật LEARNING_NOTES.md.
- Không sửa file khác.
Rules:
- Trước khi edit, nhắc lại nội dung sẽ thay đổi.
- Sau khi edit, chạy git diff -- LEARNING_NOTES.md.
- Nếu cần sửa ngoài scope, dừng lại và hỏi.
Acceptance criteria:
- File có các mục mindset, agentic loop, prompt lessons, risks.
- Nội dung ngắn, bằng tiếng Việt.
Prompt review
Review diff hiện tại như code reviewer.
Yêu cầu:
- Chỉ nhận xét dựa trên diff.
- Ưu tiên bug, rủi ro, thiếu test, lệch scope.
- Nếu không có issue nghiêm trọng, nói rõ.
- Trích path file cụ thể.
Không sửa file trong lượt này.
Prompt viết test hoặc verification
Đề xuất cách verify thay đổi hiện tại.
Context:
Day 01 chỉ có tài liệu học tập, chưa có app runtime.
Kết quả cần có:
- Lệnh Git để xem diff.
- Checklist đọc nội dung.
- Tiêu chí pass/fail.
- Rủi ro còn lại nếu chưa có test tự động.
6. Trade-offs
Lợi ích khi dùng Claude Code như agent:
- Đọc repo nhanh hơn, nhất là khi mới join codebase.
- Giảm thời gian viết boilerplate, test skeleton, tài liệu.
- Giúp lập plan và review diff có cấu trúc.
- Giữ workflow gần terminal, Git và command thật.
Rủi ro:
- Agent có thể sửa file ngoài ý muốn nếu scope mơ hồ.
- Agent có thể chạy command tốn thời gian hoặc có side effect.
- Kết quả có vẻ hợp lý nhưng sai architecture.
- Context dài làm Claude bám vào thông tin cũ, không còn liên quan.
- Developer dễ bị automation bias: thấy AI tự tin thì tin theo.
Khi nên chọn cách khác:
- Task là quyết định sản phẩm chưa rõ: nói chuyện với stakeholder trước.
- Task là production incident: ưu tiên runbook, log, rollback, human review.
- Task liên quan security/payment/auth: dùng Claude Code để phân tích hoặc review, không auto-approve implement.
- Repo có secret hoặc data nhạy cảm: làm sạch môi trường trước khi mở agent.
Quy tắc thực dụng: cho Claude Code làm nhanh, nhưng bắt nó để lại bằng chứng. Bằng chứng gồm file đã đọc, plan, diff, test output và mapping với acceptance criteria.
7. Best practices
- Bắt đầu bằng observe. Dùng prompt "chỉ đọc, không sửa file" khi chưa hiểu repo.
- Yêu cầu plan trước khi act. Plan phải nói rõ file nào sẽ chạm vào và lệnh nào sẽ chạy.
- Dùng acceptance criteria cụ thể. Nếu không verify được, agent cũng không biết thế nào là xong.
- Chia task nhỏ. Một prompt không nên yêu cầu tạo full backend, frontend, database, auth và deploy.
- Review diff như review code của đồng nghiệp. Không accept vì "AI viết".
- Không đưa secret, token, production credential hoặc customer data vào prompt/repo sandbox.
- Với Day 01, ưu tiên để Claude hỏi trước khi edit file hoặc chạy tool có side effect.
- Khi đang ở sandbox
taskflow-ai, scope nhỏ và đã có Git, có thể mở bằngclaude --permission-mode acceptEdits; mode này cho phép tạo/sửa file và tự approve một số filesystem command thông dụng trong working directory, nên vẫn phải review diff. - Nếu team muốn đặt mặc định ở cấp project, dùng
.claude/settings.jsonvớipermissions.defaultModelàautocó kiểm soát; không áp dụng cho repo có secret, production data hoặc scope chưa rõ. - Ghi lại prompt tốt và prompt tệ. Đây là tài sản workflow của team.
- Khi context bị nhiễu, dùng
/clearcho task không liên quan hoặc/compact <instructions>để tóm tắt có định hướng. - Nếu Claude nói "có thể", "thường là", "có lẽ", hãy yêu cầu bằng chứng trong repo hoặc docs.
Guardrails cho team:
- Mỗi task AI phải có owner là developer.
- Mọi thay đổi cần diff review.
- Mọi command có side effect cần nêu mục đích và rủi ro.
- Không cho agent tự ý chạy lệnh destructive.
- Không để agent sửa nhiều module khi acceptance criteria chỉ yêu cầu một module.
8. Performance / cost / context
Claude Code có context window. Mọi thông tin đưa vào context đều có chi phí về token, thời gian và độ tập trung của model.
Các thói quen làm tốn context:
- Bảo agent đọc toàn bộ repo khi chỉ cần một module.
- Paste log dài nhưng không chỉ ra error chính.
- Trộn nhiều task không liên quan trong cùng session.
- Giữ lịch sử tranh luận cũ sau khi task đã kết thúc.
Cách tối ưu:
- Nói rõ file/folder cần đọc trước.
- Yêu cầu agent tóm tắt những gì đã observe thành bullet ngắn.
- Dùng
/clearkhi chuyển sang task không liên quan. - Dùng
/compact <instructions>khi session dài nhưng vẫn cần giữ quyết định quan trọng. - Sau này ghi project rules vào
CLAUDE.mdhoặc.claude/CLAUDE.md; Day 01 chỉ cần hiểu đây là nơi lưu coding standards, testing requirements và common commands cho Claude Code.
Prompt tiết kiệm context:
Chỉ đọc PRODUCT_BRIEF.md và git status. Không scan toàn repo. Mục tiêu là xác định Day 01 cần ghi chú gì, không khởi tạo app.
Prompt tốn context:
Đọc hết repo và cho tôi biết nên làm gì tiếp theo.
Trong taskflow-ai, mỗi ngày nên bắt đầu bằng context nhỏ: mục tiêu ngày học, file được chạm vào, command verify. Cách này giúp chi phí thấp hơn và output dễ review hơn.
9. Checklist cuối bài
- Tôi hiểu Claude Code là agentic terminal tool, không phải chatbot.
- Tôi giải thích được
observe -> plan -> act -> verify. - Tôi biết bắt Claude Code liệt kê file đã đọc.
- Tôi đã thử một prompt mơ hồ và nhận ra rủi ro.
- Tôi đã viết một prompt có context, constraints, acceptance criteria.
- Tôi biết xem diff bằng
git diff. - Tôi biết rollback file cụ thể bằng
git restore -- <path>. - Tôi biết dùng
claude --continueđể tiếp tục session gần nhất vàclaude --resumehoặc/resumeđể chọn session. - Tôi hiểu
acceptEdits/autochỉ nên dùng khi scope rõ, có Git diff và không có dữ liệu nhạy cảm. - Tôi không để Claude Code chạm vào secret, production data hoặc file ngoài scope.
- Tôi biết khi nào dùng
/clearvà/compact <instructions>ở mức khái niệm. - Tôi có ghi chú riêng về cách mình sẽ đóng vai owner/reviewer/architect.
10. Bài tập
Bài tập chi tiết nằm trong exercise.md. Tóm tắt:
- Bài 1: dùng Claude Code observe
taskflow-aivà báo cáo repo state. - Bài 2: so sánh prompt mơ hồ với prompt có acceptance criteria cho việc chuẩn bị Day 02.
- Bài 3: cho Claude Code tạo
LEARNING_NOTES.mdtheo agentic loop và review diff. - Bài 4: viết reflection ngắn về vai trò owner/reviewer/architect và rủi ro cá nhân khi dùng AI coding.
Điều quan trọng nhất của Day 01 không phải có nhiều file được tạo. Điều quan trọng là bạn bắt đầu hình thành kỷ luật: agent có thể act, nhưng developer phải own.
Tài liệu
Tóm tắt kiến thức
Day 01 đặt nền tảng mindset cho toàn khóa học: Claude Code không phải chatbot. Claude Code là agentic terminal tool làm việc trong repo, có thể đọc codebase, chỉnh file, chạy command và hỗ trợ Git workflow nếu bạn cấp quyền.
Ba cách dùng AI trong coding:
- AI chat: hỏi đáp, giải thích, sinh snippet dựa trên nội dung bạn cung cấp.
- Autocomplete: gợi ý code tiếp theo trong editor.
- Agentic coding: agent quan sát repo, lập plan, hành động và verify bằng command/diff/test.
Loop cần ghi nhớ:
observe -> plan -> act -> verify
Vai trò của developer:
Owner: chịu trách nhiệm về thay đổi cuối cùng.Reviewer: đọc diff, kiểm tra edge cases, phát hiện hallucination hoặc test yếu.Architect: giữ architecture, convention, security boundary và maintainability.
Nguyên tắc Day 01:
- Bắt đầu bằng observe, chưa sửa file.
- Yêu cầu plan trước khi act.
- Dùng acceptance criteria rõ.
- Verify sau mỗi thay đổi.
- Không auto-approve command có side effect khi chưa hiểu rủi ro.
Sơ đồ tư duy hoặc luồng xử lý
Luồng làm việc khuyến nghị:
Developer xác định task
|
v
Prompt có context + constraints + acceptance criteria
|
v
Claude Code observe repo
|
v
Claude Code đề xuất plan
|
v
Developer review plan
|
+---- plan sai/thiếu ---> yêu cầu sửa plan
|
v
Approve hành động nhỏ, đúng scope
|
v
Claude Code act: edit file/chạy command
|
v
Verify: git diff/test/lint/build/checklist
|
+---- fail ---> quay lại observe/plan
|
v
Developer accept hoặc rollback
Luồng quyết định permission:
Chưa hiểu repo?
-> dùng plan/default, chỉ read-only
Plan đã rõ và thay đổi nhỏ?
-> approve edit cụ thể
Lệnh có side effect?
-> đọc mục đích, output kỳ vọng, rủi ro trước
Môi trường sandbox cô lập?
-> có thể cân nhắc quyền mạnh hơn, vẫn review diff
Repo production/công ty?
-> không bypass, không auto-approve lệnh destructive
Bảng so sánh
AI chat, autocomplete và Claude Code
| Tiêu chí | AI chat | Autocomplete | Claude Code |
|---|---|---|---|
| Nơi chạy | Web/app chat | Editor | Terminal trong repo |
| Context mặc định | Nội dung bạn paste | File đang mở và context editor | Codebase, file, command, Git theo quyền |
| Khả năng hành động | Thường chỉ trả lời | Chèn/gợi ý code | Đọc file, edit file, chạy command, hỗ trợ Git |
| Rủi ro chính | Trả lời thiếu context | Gợi ý sai local logic | Sửa nhầm file, chạy command có side effect |
| Cách kiểm soát | Đặt câu hỏi rõ | Review code gợi ý | Plan, permission, diff, test, rollback |
| Phù hợp | Giải thích, brainstorming | Viết nhanh đoạn code nhỏ | Task coding có workflow và verify |
Prompt mơ hồ và prompt có acceptance criteria
| Tiêu chí | Prompt mơ hồ | Prompt có acceptance criteria |
|---|---|---|
| Ví dụ | "Tạo project taskflow-ai" | "Lập plan Day 02, chưa sửa file, tối đa 7 bước, mỗi bước có verify" |
| Scope | Mở, dễ phình to | Giới hạn rõ |
| Kết quả | Khó review | Có thể đối chiếu |
| Rủi ro | Agent tự quyết định quá nhiều | Developer giữ quyền quyết định |
| Khi dùng | Prototype nhanh trong sandbox | Team workflow, repo thật, task cần chất lượng |
Permission nên hiểu sớm
| Cơ chế | Ý nghĩa ngắn | Nên dùng khi | Guardrail |
|---|---|---|---|
| Hỏi trước khi hành động | Claude hỏi trước khi edit hoặc chạy tool có side effect | Mới bắt đầu, repo chưa quen, task rủi ro | Bắt agent nêu file/command trước khi approve |
claude --permission-mode acceptEdits | Cho phép tạo/sửa file và auto-approve một số filesystem command thông dụng trong working directory | Sandbox nhỏ, scope đã rõ, đã có Git diff để review | Không dùng cho repo có secret, production data hoặc task chưa có acceptance criteria |
.claude/settings.json với permissions.defaultMode: "auto" | Đặt default permission mode ở cấp project | Team đã thống nhất guardrails và repo đủ an toàn | Review config trong PR; không để auto thành mặc định vô thức |
| Prompt read-only | Ràng buộc bằng prompt: chỉ đọc, không sửa file, không chạy command ghi file | Khám phá repo, lập plan, review architecture | Nếu Claude muốn act, dừng và yêu cầu plan lại |
Lỗi thường gặp
- Mở Claude Code sai thư mục, khiến agent đọc nhầm repo.
- Yêu cầu "làm giúp tôi" nhưng không nói file nào được sửa.
- Không bắt agent liệt kê file đã đọc, nên khó phát hiện hallucination.
- Để agent implement trước khi có plan.
- Không chạy
git diffsau khi edit. - Accept output vì nhìn hợp lý, không đối chiếu acceptance criteria.
- Trộn nhiều task không liên quan trong cùng session làm context bị nhiễu.
- Để secret hoặc credential trong repo sandbox rồi cho agent scan.
- Bật
acceptEditshoặcautongoài sandbox khi chưa có guardrails. - Xem Claude Code như junior developer tự trị, thay vì agent cần owner/reviewer/architect.
Cách debug
Khi Claude Code hiểu sai repo
Kiểm tra:
pwd
git status --short
Chạy ở đâu:
- Chạy trong terminal của project
taskflow-ai.
Lệnh làm gì:
pwdcho biết thư mục hiện tại.git status --shortcho biết file nào đang thay đổi.
Kết quả kỳ vọng:
pwdkết thúc bằngtaskflow-ai.git status --shortchỉ hiện file bạn mong đợi hoặc trống nếu chưa sửa gì.
Rủi ro:
git status --shortkhông kiểm tra logic, chỉ kiểm tra trạng thái file.
Khi Claude Code nói về file không tồn tại
Hỏi lại:
Hãy chỉ ra bằng chứng trong repo: path file, đoạn nội dung liên quan, và command/read operation nào đã dùng. Nếu không có bằng chứng, hãy sửa lại kết luận.
Kiểm tra thủ công:
git ls-files
Lệnh làm gì:
- Liệt kê file đang được Git track.
Kết quả kỳ vọng:
- Chỉ có các file thật trong repo.
Rủi ro:
- File mới chưa track sẽ không xuất hiện. Nếu cần xem cả file chưa track, dùng
git status --short.
Khi agent sửa ngoài scope
Kiểm tra diff:
git diff --stat
git diff
Chạy ở đâu:
- Chạy trong root repo
taskflow-ai.
Lệnh làm gì:
git diff --stattóm tắt file nào bị sửa và số dòng thay đổi.git diffhiển thị chi tiết thay đổi.
Kết quả kỳ vọng:
- Chỉ có file nằm trong scope của prompt.
Rủi ro:
- Diff dài dễ bỏ sót. Nếu diff quá lớn, dừng lại và chia task nhỏ hơn.
Rollback file cụ thể:
git restore -- path/to/file
Lệnh làm gì:
- Hủy thay đổi chưa commit của file được chỉ định.
Kết quả kỳ vọng:
- Thường không có output nếu thành công.
Rủi ro:
- Mất thay đổi chưa commit của file đó. Không dùng với file người khác đang sửa nếu làm trong repo chung.
Khi cần quay lại session
Tiếp tục session gần nhất trong thư mục hiện tại:
claude --continue
Chọn session cụ thể:
claude --resume
Hoặc dùng trong Claude Code:
/resume
Kết quả kỳ vọng:
- Claude Code quay lại đúng conversation liên quan đến
taskflow-ai. - Bạn vẫn có thể yêu cầu nó tóm tắt context trước khi làm tiếp.
Rủi ro:
- Resume nhầm session có thể kéo theo context cũ không liên quan. Hãy kiểm tra
pwd,git status --shortvà yêu cầu Claude tóm tắt current assumptions.
Khi context bị nhiễu
Dùng trong Claude Code:
/clear
Dùng khi:
- Chuyển sang task không liên quan.
- Agent liên tục đưa thông tin cũ vào câu trả lời.
Dùng trong Claude Code:
/compact Tóm tắt các quyết định quan trọng về taskflow-ai, giữ lại stack, scope Day 01, file đã tạo và acceptance criteria đang dùng.
Dùng khi:
- Session dài nhưng vẫn cần giữ một số quyết định.
Rủi ro:
- Compact quá chung chung có thể làm mất chi tiết quan trọng. Hãy đưa instructions cụ thể.
Link tài liệu nên đọc
- Claude Code Quickstart: https://code.claude.com/docs/en/quickstart
- Claude Code Best Practices: https://code.claude.com/docs/en/best-practices
- Claude Code Permissions: https://code.claude.com/docs/en/permissions
Gợi ý cách đọc:
- Đọc Quickstart để nắm cách
cd /path/to/your/project, chạyclaude, dùng/help,claude --continue,claude --resumevà/resume. - Đọc Best Practices để nắm cách quản lý context, dùng
/clearcho task không liên quan và/compact <instructions>khi cần tóm tắt session. - Đọc Permissions để hiểu
claude --permission-mode acceptEdits,.claude/settings.json,permissions.defaultMode: "auto", và vì sao permission mạnh phải đi kèm scope nhỏ, Git diff và review.
Bài tập
Bài 1 — Cơ bản
Mục tiêu: dùng Claude Code để observe repo taskflow-ai mà không sửa file.
Thời gian: 20-25 phút.
Yêu cầu
- Mở terminal tại thư mục học tập.
- Tạo hoặc vào sandbox
taskflow-ai. - Mở Claude Code trong thư mục đó.
- Yêu cầu Claude Code đọc repo và báo cáo trạng thái hiện tại.
Lệnh
Chạy trong thư mục học tập, ví dụ D:\my-source\learning hoặc ~/learning:
mkdir taskflow-ai
cd taskflow-ai
git init
claude
Lệnh làm gì:
mkdir taskflow-ai: tạo sandbox cho project xuyên suốt.cd taskflow-ai: vào đúng context project.git init: bật Git để có diff/rollback.claude: mở Claude Code trong repo.
Kết quả kỳ vọng:
- Git repo mới được khởi tạo.
- Claude Code mở interactive session.
Nếu đóng terminal và muốn làm tiếp đúng session gần nhất trong taskflow-ai, chạy:
claude --continue
Nếu muốn chọn session cụ thể, chạy:
claude --resume
Hoặc dùng trong Claude Code:
/resume
Rủi ro:
- Nếu
taskflow-aiđã tồn tại, không xóa thư mục. Hãycd taskflow-aivà kiểm tragit status --short. - Nếu
claudebáo lỗi chưa cài đặt hoặc chưa đăng nhập, ghi lại lỗi. Phần setup sẽ xử lý kỹ hơn ở Day 02. - Chỉ resume khi terminal đang đứng đúng root
taskflow-ai; nếu không chắc, kiểm tra thư mục trước.
Prompt
Nhập trong Claude Code:
Hãy observe repo hiện tại.
Rules:
- Chỉ đọc file và chạy lệnh read-only nếu cần.
- Không sửa file.
- Không tạo file.
- Không chạy install/build/test.
Kết quả:
- Repo đang ở trạng thái nào?
- File nào đã đọc?
- Có dấu hiệu stack/framework nào chưa?
- 3 câu hỏi cần làm rõ trước khi khởi tạo taskflow-ai ở Day 02.
Sản phẩm cần nộp
- Ghi lại output của Claude Code vào note cá nhân.
- Đánh dấu Claude có nói rõ file đã đọc hay không.
- Nếu Claude bịa file, ghi lại ví dụ đó.
Bài 2 — Thực tế
Mục tiêu: so sánh prompt mơ hồ với prompt có acceptance criteria.
Thời gian: 30 phút.
Yêu cầu
Trong cùng session Claude Code, chạy hai prompt sau. Không accept bất kỳ edit nào.
Prompt A:
Tạo giúp tôi project taskflow-ai.
Prompt B:
Context:
Tôi đang học Day 01 về mindset Claude Code. Project xuyên suốt là taskflow-ai, nhưng hôm nay chưa khởi tạo full stack.
Goal:
Lập plan cho Day 02 để khởi tạo project taskflow-ai.
Constraints:
- Không sửa file.
- Không chạy command ghi file.
- Stack mặc định: Node.js + TypeScript + Fastify, React + Vite, PostgreSQL, Redis.
- Nếu thiếu thông tin, hỏi lại trước.
Acceptance criteria:
- Plan tối đa 7 bước.
- Mỗi bước có: mục tiêu, file/folder dự kiến, command dự kiến, output kỳ vọng, rủi ro.
- Có phần non-goals cho những việc chưa làm ở Day 02.
Bảng đánh giá
Điền bảng sau vào note cá nhân:
| Tiêu chí | Prompt A | Prompt B |
|---|---|---|
| Có hỏi lại khi thiếu context không? | ||
| Có giới hạn scope không? | ||
| Có nói file/command dự kiến không? | ||
| Có cách verify không? | ||
| Có rủi ro agent tự ý làm quá nhiều không? |
Sản phẩm cần nộp
- Một đoạn nhận xét 5-7 dòng: prompt nào tốt hơn và vì sao.
- Một phiên bản Prompt B do bạn tự cải tiến thêm.
Bài 3 — Nâng cao
Mục tiêu: thực hành đầy đủ observe -> plan -> act -> verify với một thay đổi nhỏ, có rollback nếu cần.
Thời gian: 40-45 phút.
Yêu cầu
Cho Claude Code tạo file LEARNING_NOTES.md trong sandbox taskflow-ai.
Phạm vi được phép:
- Chỉ tạo hoặc sửa
LEARNING_NOTES.md. - Không sửa file khác.
- Không install package.
- Không tạo backend/frontend.
Prompt
Nhập trong Claude Code:
Task:
Tạo file LEARNING_NOTES.md để ghi lại bài học Day 01.
Agentic loop bắt buộc:
1. Observe: đọc trạng thái repo và nói file nào đã đọc.
2. Plan: đề xuất outline file LEARNING_NOTES.md, chưa edit.
3. Act: chỉ sau khi tôi đồng ý, tạo file LEARNING_NOTES.md.
4. Verify: chạy git diff -- LEARNING_NOTES.md và đối chiếu với acceptance criteria.
Scope:
- Chỉ được sửa LEARNING_NOTES.md.
- Không tạo file khác.
Acceptance criteria:
- File có 4 heading: Mindset, Agentic loop, Prompt lessons, Risks.
- Nội dung bằng tiếng Việt.
- Không quá 80 dòng.
- Có ít nhất 1 ví dụ prompt mơ hồ và 1 prompt cải thiện.
- Không chứa secret, credential, thông tin công ty.
Sau khi Claude đưa plan, nếu đúng thì trả lời:
Plan đúng. Hãy thực hiện đúng scope và verify bằng git diff -- LEARNING_NOTES.md.
Lệnh kiểm tra thủ công
Chạy trong root taskflow-ai:
git diff --stat
git diff -- LEARNING_NOTES.md
git status --short
Lệnh làm gì:
git diff --stat: xem danh sách file thay đổi và quy mô thay đổi.git diff -- LEARNING_NOTES.md: đọc chi tiết thay đổi của file bài tập.git status --short: xem file mới/chưa commit.
Kết quả kỳ vọng:
- Chỉ có
LEARNING_NOTES.mdtrong diff. - Nội dung có đủ 4 heading.
- Không có file khác bị sửa.
Rủi ro:
- Nếu
git diff --stathiện file khác, dừng lại. Yêu cầu Claude giải thích và rollback file ngoài scope. - Nếu bạn chạy
git restorevới file mới chưa track, Git có thể không xóa file đó. Với file mới chưa track, cần xóa thủ công sau khi chắc chắn không cần nữa.
Rollback nếu agent làm sai
Nếu file đã được Git track:
git restore -- LEARNING_NOTES.md
Nếu file mới chưa được Git track và bạn chắc chắn muốn xóa:
rm LEARNING_NOTES.md
Trên Windows PowerShell có thể dùng:
Remove-Item .\LEARNING_NOTES.md
Lệnh làm gì:
git restore -- LEARNING_NOTES.md: hủy thay đổi của file đã track.rm LEARNING_NOTES.mdhoặcRemove-Item .\LEARNING_NOTES.md: xóa file mới chưa track.
Kết quả kỳ vọng:
- Thường không có output khi thành công.
git status --shortkhông còn hiệnLEARNING_NOTES.mdnếu đã rollback/xóa.
Rủi ro:
- Đây là thao tác xóa/hủy thay đổi. Chỉ chạy sau khi đọc diff và chắc chắn không cần giữ nội dung.
- Không dùng lệnh xóa hàng loạt như
rm -rftrong bài này.
Bài 4 — Review & Reflection
Mục tiêu: đánh giá lại cách bạn điều khiển agent và vai trò của mình trong workflow.
Thời gian: 20 phút.
Yêu cầu
Trả lời ngắn gọn các câu hỏi sau trong note cá nhân hoặc trong LEARNING_NOTES.md nếu bạn đã tạo file:
- Trong bài hôm nay, lúc nào Claude Code đang observe, plan, act, verify?
- Có lúc nào Claude muốn làm quá scope không? Bạn xử lý thế nào?
- Nếu đưa Prompt A vào repo công ty, rủi ro lớn nhất là gì?
- Bạn sẽ đóng vai owner như thế nào khi dùng Claude Code?
- Bạn sẽ đóng vai reviewer như thế nào?
- Bạn sẽ đóng vai architect như thế nào?
Prompt review gợi ý
Nhập trong Claude Code:
Review workflow Day 01 của tôi dựa trên diff và ghi chú hiện tại.
Yêu cầu:
- Không sửa file.
- Chỉ ra chỗ tôi đã kiểm soát scope tốt.
- Chỉ ra rủi ro còn lại.
- Đề xuất 3 quy tắc cá nhân trước khi tôi dùng Claude Code cho Day 02.
Tiêu chí hoàn thành
Bạn hoàn thành Day 01 khi:
- Đã mở Claude Code trong đúng thư mục
taskflow-ai. - Đã yêu cầu Claude observe repo mà không sửa file.
- Đã so sánh ít nhất 1 prompt mơ hồ và 1 prompt có acceptance criteria.
- Đã thực hành hoặc mô phỏng được loop
observe -> plan -> act -> verify. - Đã xem diff bằng Git sau khi có thay đổi.
- Đã biết cách rollback file cụ thể nếu agent làm sai.
- Đã viết reflection về vai trò owner/reviewer/architect.
Không bắt buộc phải commit trong Day 01. Nếu commit, commit message nên rõ:
git add LEARNING_NOTES.md
git commit -m "docs: add day 01 learning notes"
Lệnh làm gì:
git add LEARNING_NOTES.md: đưa file vào staging area.git commit -m "...":tạo commit với message ngắn.
Kết quả kỳ vọng:
- Git báo tạo commit mới.
Rủi ro:
- Chỉ commit sau khi đã review diff. Không dùng
git add .nếu repo có file ngoài scope.
Gợi ý nếu bí
- Nếu Claude Code bắt đầu sửa file ngay: nhập "Stop. Do not continue. First show the plan and touched files."
- Nếu Claude nói về file không có thật: yêu cầu "Show evidence: exact path and quote a short relevant line."
- Nếu output quá dài: yêu cầu "Summarize in 10 bullets, keep only decisions and risks."
- Nếu plan quá lớn: yêu cầu "Split into Day 01 observe-only and Day 02 setup. Today do not implement."
- Nếu không biết verify: bắt đầu bằng
git status --short,git diff --stat,git diff -- <file>. - Nếu lỡ đóng session: vào lại root
taskflow-ai, dùngclaude --continuecho session gần nhất hoặcclaude --resume//resumeđể chọn session. - Nếu context bị nhiễu: dùng
/clearcho task mới không liên quan hoặc/compact <instructions>nếu cần giữ tóm tắt.
Đáp án tham khảo hoặc kết quả kỳ vọng
Kết quả kỳ vọng Bài 1
Claude Code nên báo cáo theo hướng:
Repo hiện tại đang rỗng hoặc chỉ có một vài file tài liệu.
Tôi đã đọc: PRODUCT_BRIEF.md nếu tồn tại.
Chưa thấy package.json, src/, test/, docker-compose.yml nên chưa thể kết luận app đã được setup.
Trước Day 02 cần quyết định package manager, backend framework, frontend folder layout.
Nếu Claude khẳng định đã có API/frontend trong khi repo không có file tương ứng, kết quả không đạt.
Kết quả kỳ vọng Bài 2
Nhận xét hợp lý:
Prompt A tạo rủi ro scope creep vì không nói rõ hôm nay chỉ cần plan, không nói stack, không có acceptance criteria và không cấm edit file.
Prompt B tốt hơn vì giới hạn hành động, yêu cầu plan nhỏ, buộc nêu command/output/rủi ro và tạo cơ sở để review trước Day 02.
Kết quả kỳ vọng Bài 3
git diff --stat chỉ nên hiện:
LEARNING_NOTES.md | <số dòng> +++++++++++++++++
LEARNING_NOTES.md nên có cấu trúc:
# Learning Notes - Day 01
## Mindset
...
## Agentic loop
...
## Prompt lessons
...
## Risks
...
Nếu diff có file khác như package.json, src/, README.md, bài tập chưa đạt vì agent đã vượt scope.
Kết quả kỳ vọng Bài 4
Reflection đạt yêu cầu nếu có các ý:
- Developer vẫn là owner của kết quả, không giao trách nhiệm cho AI.
- Reviewer phải đọc diff và kiểm tra acceptance criteria.
- Architect phải giữ scope, stack, module boundary và security rules.
- Prompt tốt cần có context, goal, constraints, acceptance criteria, verification.
- Permission mạnh như
acceptEditshoặc defaultautotrong.claude/settings.jsonchỉ hợp lý khi scope nhỏ, có Git diff và repo không chứa dữ liệu nhạy cảm.