- Published on
Day 02 - Setup môi trường và workflow cơ bản
- 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ó thể:
- Cài hoặc kiểm tra Claude Code CLI trên máy local.
- Mở Claude Code đúng cách từ thư mục project bằng lệnh
claude. - Dùng
/help,/initvà biết cách tiếp tục session bằngclaude --continue,claude --resumehoặc/resume. - Tạo repo thực hành
taskflow-aibằng Git. - Scaffold backend và frontend ở mức an toàn, chưa đụng production data.
- Yêu cầu Claude Code tạo
README.md,.gitignore, cấu trúc folder và guideline ban đầu. - Biết dùng permission mode phù hợp cho giai đoạn setup.
- Biết không đưa secret, production credential, token, private key hoặc dữ liệu khách hàng vào prompt.
Kết quả cuối bài là một repo taskflow-ai có cấu trúc ban đầu rõ ràng, có Git, có README, có .gitignore, có scaffold backend/frontend tối thiểu, và có thể mở lại bằng Claude Code.
2. Bối cảnh thực tế
Setup môi trường là phần dễ bị xem nhẹ. Developer thường mở AI coding tool trong một thư mục lộn xộn, prompt quá rộng, để AI tự chạy lệnh install hoặc sửa nhiều file không kiểm soát. Sau 30 phút, repo đã có nhiều dependency, nhiều file sinh ra, nhưng không ai biết quyết định kiến trúc nào là chủ ý của team và quyết định nào là do AI đoán.
Claude Code giải quyết tốt phần setup khi bạn cho nó một project boundary rõ:
- Project đang nằm ở đâu.
- Stack nào được phép dùng.
- File nào được phép tạo.
- Lệnh nào được phép chạy.
- Tiêu chí scaffold ban đầu là gì.
- Việc nào cần hỏi lại trước khi thực hiện.
Không nên dùng Claude Code để setup nếu bạn đang ở máy production, đang có secret thật trong terminal, đang mở repo công ty có dữ liệu nhạy cảm mà chưa có policy, hoặc chưa biết cách review diff và rollback.
Trong khóa học này, mọi thao tác thực hành nằm trong repo sandbox taskflow-ai. Mục tiêu không phải tạo app hoàn chỉnh ngay Day 02, mà là dựng nền móng đủ sạch để các ngày sau build tiếp.
3. Kiến thức nền
Claude Code CLI
Claude Code là agentic coding tool chạy trong terminal. Workflow cơ bản là:
- Bạn vào thư mục project.
- Chạy
claude. - Claude đọc ngữ cảnh được phép đọc.
- Bạn giao task bằng prompt.
- Claude đề xuất plan, đọc file, sửa file hoặc chạy command tùy quyền bạn cấp.
- Bạn review output, diff, command result rồi mới tiếp tục.
Điểm quan trọng: Claude Code làm việc theo thư mục hiện tại. Nếu bạn chạy claude ở nhầm nơi, nó có thể hiểu sai project boundary. Luôn kiểm tra pwd hoặc Get-Location trước khi mở session.
Slash command và resume cơ bản
/help: xem command và khả năng hiện có trong Claude Code./init: yêu cầu Claude đọc project và tạo guideline nhưCLAUDE.mdhoặc.claude/CLAUDE.md. File này có thể chứa coding standards, command thường dùng, testing requirements, security rules.claude --continue: chạy từ terminal trong thư mục project để tiếp tục session gần nhất của thư mục hiện tại.claude --resumehoặc/resume: chọn một session cụ thể để mở lại khi bạn có nhiều session.
Day 02 chỉ dùng các command này ở mức nhập môn. Các ngày sau sẽ học kỹ session, context, permission và CLAUDE.md.
Permission mode cần biết sớm
Day 02 không cần học hết hệ permission. Cần nắm các điểm thực tế sau:
Trong Day 02, ưu tiên:
- Phiên mặc định: phù hợp khi mới setup, vì Claude sẽ hỏi trước các thao tác cần quyền.
- Prompt chỉ đọc hoặc chỉ lập plan: dùng khi chưa chắc nên scaffold kiểu gì. Đây là ràng buộc trong prompt, không thay thế review diff.
claude --permission-mode acceptEdits: dùng được trong sandbox khi bạn đã giới hạn rõ file được phép tạo/sửa. Mode này cho phép Claude tạo/sửa file và auto-approve các common filesystem commands trong working directory..claude/settings.jsoncó thể đặtpermissions.defaultModelàauto, nhưng chỉ nên làm sau khi team thống nhất rule và hiểu rủi ro.
Không bật mode tự động hơn trong repo thật nếu bạn chưa biết Claude sắp sửa file nào, chạy command nào, và rollback ra sao.
Secret và dữ liệu nhạy cảm
Không đưa các nội dung sau vào prompt:
- API key, database password, OAuth secret, SSH private key.
- Production credential.
- Token trong
.env. - Log có chứa user data, email, số điện thoại, payment data.
- Connection string thật.
Trong project học, nếu cần biến môi trường, chỉ tạo .env.example với giá trị giả như DATABASE_URL=postgresql://user:password@localhost:5432/taskflow_ai.
Project xuyên suốt taskflow-ai
taskflow-ai là app quản lý task mini cho team kỹ thuật. Day 02 tạo nền:
taskflow-ai/
apps/
api/
web/
docs/
infra/
README.md
.gitignore
Backend và frontend chỉ scaffold tối thiểu. Chưa cần database thật, authentication, deployment hoặc business logic phức tạp.
4. Step-by-step thực hành
Tổng thời lượng đề xuất
- 15 phút: kiểm tra tool local.
- 20 phút: tạo repo
taskflow-ai. - 35 phút: mở Claude Code, chạy
/init, tạo guideline. - 35 phút: scaffold backend/frontend an toàn.
- 15 phút: review diff, commit checkpoint.
Bước 1: Kiểm tra terminal, Git và Claude Code
Chạy ở terminal bất kỳ.
macOS/Linux:
pwd
git --version
node --version
claude --version
Windows PowerShell:
Get-Location
git --version
node --version
claude --version
Giải thích:
pwdhoặcGet-Location: in ra thư mục hiện tại để tránh chạy nhầm nơi.git --version: kiểm tra Git đã cài.node --version: kiểm tra Node.js, cần cho stack Node.js + TypeScript.claude --version: kiểm tra Claude Code CLI đã cài và nhận được trongPATH.
Kết quả kỳ vọng:
- Git in ra phiên bản, ví dụ
git version .... - Node in ra phiên bản, ví dụ
v20...hoặc mới hơn tùy máy. - Claude in ra phiên bản Claude Code CLI.
Rủi ro:
- Nếu
claudekhông được nhận diện, terminal chưa thấy CLI trongPATHhoặc Claude Code chưa cài. - Nếu
nodequá cũ, scaffold frontend/backend có thể lỗi. - Không paste token hay credential vào terminal để "test nhanh".
Bước 2: Cài Claude Code nếu máy chưa có
Nếu claude --version chưa chạy được, mở Claude Code Quickstart chính thức và chọn installer phù hợp với hệ điều hành. Không copy lệnh cài đặt từ blog, gist hoặc output AI cũ nếu chưa đối chiếu official docs.
Sau khi cài xong, đóng mở lại terminal rồi kiểm tra:
claude --version
Giải thích:
claude --version: xác nhận Claude Code CLI đã có trongPATH.- Chạy ở terminal người dùng, không chạy trong repo production.
- Nếu công ty quản lý máy bằng policy riêng, dùng hướng dẫn nội bộ thay vì tự cài.
Kết quả kỳ vọng:
claude --versiontrả về phiên bản.
Rủi ro:
- Installer có thể thay đổi theo thời điểm, nên Day 02 không nên hard-code lệnh cài nếu chưa kiểm tra official docs.
- Không dùng
sudohoặc quyền admin nếu installer không yêu cầu. - Không paste token, credential hoặc private key vào terminal để "fix cài đặt".
Bước 3: Tạo repo taskflow-ai
Chọn một thư mục sandbox, ví dụ ~/work hoặc D:\my-source.
macOS/Linux:
mkdir -p ~/work/taskflow-ai
cd ~/work/taskflow-ai
git init
Windows PowerShell:
New-Item -ItemType Directory -Force -Path D:\my-source\taskflow-ai
Set-Location D:\my-source\taskflow-ai
git init
Giải thích:
mkdir -phoặcNew-Item -Force: tạo thư mục project nếu chưa có.cdhoặcSet-Location: vào đúng thư mục project.git init: biến thư mục này thành Git repo local.
Kết quả kỳ vọng:
- Git báo đã tạo repository, thường là
.git/. git statussẽ thấy repo chưa có commit.
Kiểm tra:
git status
Rủi ro:
- Nếu chạy
git inittrong nhầm thư mục, bạn có thể tạo repo ở nơi không mong muốn. - Không tạo project trong thư mục chứa credential hoặc dump production.
Bước 4: Mở Claude Code trong project
Chạy trong thư mục gốc taskflow-ai.
claude
Giải thích:
- Lệnh này mở Claude Code session cho thư mục hiện tại.
- Claude sẽ làm việc dựa trên project boundary này.
Kết quả kỳ vọng:
- Terminal chuyển sang Claude Code interactive session.
- Bạn có thể nhập prompt hoặc slash command.
Rủi ro:
- Nếu mở ở thư mục cha quá rộng, Claude có thể thấy nhiều repo không liên quan.
- Nếu project có file nhạy cảm, hãy dừng lại, kiểm tra
.gitignore,.env, policy trước khi tiếp tục.
Trong Claude Code, chạy:
/help
Mục tiêu:
- Xem command có sẵn.
- Kiểm tra môi trường hoạt động.
- Làm quen với cách Claude hiển thị quyền đọc/sửa/chạy lệnh.
Nếu đây là repo sandbox và bạn muốn giảm số lần approve thao tác tạo/sửa file, có thể thoát session rồi mở lại bằng:
claude --permission-mode acceptEdits
Giải thích:
--permission-mode acceptEdits: cho phép Claude tạo/sửa file và auto-approve các common filesystem commands trong working directory.- Chỉ dùng khi bạn đang ở đúng root
taskflow-ai, phạm vi file đã rõ, và sẽ reviewgit diffngay sau mỗi cụm thay đổi.
Không đặt .claude/settings.json với permissions.defaultMode: auto ngay trong bài đầu nếu bạn chưa có rule team và chưa quen review diff.
Bước 5: Dùng /init để tạo guideline project
Trong Claude Code, nhập:
/init
Mục tiêu:
- Cho Claude đọc cấu trúc project hiện tại.
- Tạo hoặc cập nhật guideline như
CLAUDE.md. - Ghi lại coding standards, command thường dùng, testing requirements, security rules.
Vì repo đang trống, sau /init hãy dùng prompt này:
Project này là taskflow-ai, app quản lý task mini cho team kỹ thuật.
Hãy tạo CLAUDE.md ngắn gọn cho project mới, chỉ gồm:
- Mục tiêu project.
- Stack dự kiến: Node.js, TypeScript, Fastify cho backend; React, Vite cho frontend; PostgreSQL, Redis, Docker Compose cho infra.
- Quy tắc an toàn: không đọc hoặc ghi secret thật, không tạo .env có credential thật, không chạy lệnh destructive.
- Các lệnh phổ biến dự kiến, đánh dấu là sẽ cập nhật sau khi package.json tồn tại.
- Workflow: luôn plan trước khi sửa nhiều file, luôn yêu cầu review diff.
Chỉ tạo hoặc sửa CLAUDE.md. Không tạo code app ở bước này.
Kết quả kỳ vọng:
- Claude đề xuất tạo
CLAUDE.md. - Nội dung ngắn, có guideline rõ.
- Không có secret thật.
Rủi ro:
- Nếu prompt quá rộng, Claude có thể tạo quá nhiều file ngay từ đầu.
- Nếu Claude tự thêm dependency hoặc command chưa kiểm chứng, yêu cầu nó đánh dấu là "dự kiến" thay vì "đã có".
Rollback khi sai:
git status
git diff
git restore CLAUDE.md
Giải thích:
git status: xem file nào đã thay đổi.git diff: xem nội dung thay đổi.git restore CLAUDE.md: bỏ thay đổi ởCLAUDE.mdnếu chưa commit.
Rủi ro:
git restorexóa thay đổi chưa commit của file được chỉ định. Chỉ chạy khi đã chắc chắn muốn bỏ.
Bước 6: Tạo cấu trúc folder bằng Claude Code
Trong Claude Code, dùng prompt:
Hãy tạo cấu trúc folder ban đầu cho taskflow-ai.
Phạm vi được phép tạo:
- apps/api/
- apps/web/
- docs/
- infra/
- README.md
- .gitignore
Yêu cầu:
- Chưa cài dependency.
- Chưa tạo secret thật.
- README.md mô tả mục tiêu, stack dự kiến, cách chạy sau khi scaffold hoàn chỉnh.
- .gitignore cho Node.js, logs, build output, .env, editor files.
- Tạo file placeholder cần thiết để Git giữ folder, ví dụ .gitkeep nếu folder chưa có code.
Trước khi sửa file, hãy tóm tắt plan và danh sách file sẽ tạo.
Kết quả kỳ vọng:
- Claude đưa plan trước.
- Claude tạo đúng các folder/file được phép.
.gitignorecó.env,node_modules/,dist/,coverage/.README.mdchưa chứa command giả khẳng định "đã chạy được" nếu chưa có scaffold.
Kiểm tra ngoài terminal:
find . -maxdepth 3 -type f | sort
git diff --stat
git diff
Windows PowerShell tương đương:
Get-ChildItem -Recurse -File | Select-Object FullName
git diff --stat
git diff
Giải thích:
findhoặcGet-ChildItem: liệt kê file đã tạo.git diff --stat: xem tóm tắt số file và số dòng thay đổi.git diff: review nội dung chi tiết.
Rủi ro:
git diffcó thể dài nếu Claude tạo quá nhiều file. Khi đó hãy yêu cầu Claude thu hẹp scaffold.
Bước 7: Scaffold backend ở mức an toàn
Bạn có hai lựa chọn. Day 02 khuyến nghị lựa chọn A nếu muốn giữ tốc độ và giảm rủi ro.
Lựa chọn A: để Claude tạo scaffold file tối thiểu, chưa cài package.
Prompt trong Claude Code:
Scaffold backend tối thiểu trong apps/api cho Node.js + TypeScript + Fastify.
Phạm vi:
- apps/api/package.json
- apps/api/tsconfig.json
- apps/api/src/server.ts
- apps/api/src/app.ts
- apps/api/src/routes/health.ts
- apps/api/src/config/env.example.ts hoặc docs ghi chú env, nhưng không tạo .env thật.
Yêu cầu:
- Chỉ tạo code skeleton health check.
- Không cài dependency.
- Không thêm database connection thật.
- package.json có scripts dự kiến: dev, build, test, typecheck.
- Nếu lệnh nào chưa chạy được vì dependency chưa cài, ghi rõ trong README hoặc comment ngắn.
- Trước khi edit, liệt kê file sẽ tạo.
Kết quả kỳ vọng:
- Có skeleton backend rõ ràng.
- Không có
.env. - Không có connection string thật.
Lựa chọn B: dùng package manager để cài dependency ngay.
Chạy trong thư mục gốc taskflow-ai:
npm init -y
npm pkg set private=true
npm pkg set "workspaces[0]=apps/*"
mkdir -p apps/api
cd apps/api
npm init -y
npm install fastify @fastify/cors
npm install -D typescript tsx vitest @types/node
Giải thích:
npm init -y: tạopackage.json.npm pkg set private=true: đánh dấu root workspace không publish.npm pkg set "workspaces[0]=apps/*": khai báo workspace.mkdir -p apps/api: tạo backend folder.npm install: tải dependency runtime và dev dependency.
Kết quả kỳ vọng:
- Có
package.json,package-lock.json,node_modules/. apps/api/package.jsoncó dependency.
Rủi ro:
- Lệnh install tải code từ npm registry, cần internet và policy cho phép.
- Phiên bản dependency có thể khác theo thời điểm.
- Không nên dùng B nếu đang dạy workflow kiểm soát diff lần đầu hoặc mạng công ty có proxy.
Bước 8: Scaffold frontend ở mức an toàn
Lựa chọn A: Claude tạo skeleton tối thiểu, chưa cài package.
Prompt trong Claude Code:
Scaffold frontend tối thiểu trong apps/web cho React + Vite + TypeScript.
Phạm vi:
- apps/web/package.json
- apps/web/index.html
- apps/web/src/main.tsx
- apps/web/src/App.tsx
- apps/web/src/styles.css
Yêu cầu:
- UI chỉ có màn hình placeholder Taskflow AI và trạng thái "frontend scaffold".
- Không gọi API thật.
- Không cài dependency.
- package.json có scripts dự kiến: dev, build, test, lint.
- Không thêm asset nặng.
- Trước khi edit, liệt kê file sẽ tạo.
Lựa chọn B: dùng Vite generator.
Chạy trong thư mục gốc taskflow-ai:
npm create vite@latest apps/web -- --template react-ts
Giải thích:
npm create vite@latest: tải và chạy generator Vite mới nhất.apps/web: nơi tạo frontend app.--template react-ts: dùng React + TypeScript.
Kết quả kỳ vọng:
- Có
apps/web/package.json. - Có
apps/web/src/. - Có hướng dẫn
npm installvànpm run dev.
Rủi ro:
- Generator có thể thay đổi output theo phiên bản Vite.
- Nếu folder
apps/webđã có file, generator có thể hỏi overwrite. Không chọn overwrite nếu chưa review.
Bước 9: Tạo .gitignore và README bằng Claude Code
Nếu chưa có, dùng prompt:
Review README.md và .gitignore hiện tại.
Yêu cầu README.md:
- Mô tả taskflow-ai.
- Ghi stack dự kiến.
- Ghi cấu trúc folder.
- Ghi setup status: Day 02 scaffold only.
- Ghi nguyên tắc không commit .env hoặc secret.
Yêu cầu .gitignore:
- node_modules/
- dist/
- build/
- coverage/
- .env
- .env.*
- !.env.example
- logs và file editor phổ biến.
Chỉ sửa README.md và .gitignore. Không sửa code app.
Kết quả kỳ vọng:
- README trung thực, không nói app đã production-ready.
.gitignorechặn secret và build artifact.
Rủi ro:
- Pattern
.env.*có thể ignore cả.env.example; cần có!.env.exampleđể giữ example.
Bước 10: Review diff và tạo commit checkpoint
Chạy trong root taskflow-ai.
git status
git diff --stat
git diff
Giải thích:
git status: xem file mới/thay đổi.git diff --stat: xem tổng quan thay đổi.git diff: đọc từng thay đổi trước khi commit.
Kết quả kỳ vọng:
- Chỉ có file scaffold Day 02.
- Không có
.env, secret, credential. - Không có file ngoài
taskflow-ai.
Nếu ổn, commit:
git add README.md .gitignore CLAUDE.md apps docs infra
git commit -m "chore: scaffold taskflow ai project"
Giải thích:
git add: đưa file scaffold vào staging area.git commit: tạo checkpoint để các ngày sau có thể rollback.
Rủi ro:
git add .dễ thêm nhầm file. Day 02 nên add rõ path.- Trước commit luôn chạy
git statusđể đảm bảo không có secret.
5. Prompt mẫu nên dùng
Prompt khám phá codebase
Bạn đang ở repo taskflow-ai mới khởi tạo.
Hãy đọc cấu trúc hiện tại và trả lời:
- Repo đang có những folder/file nào?
- File nào là guideline cho Claude Code?
- Backend và frontend đã ở mức scaffold nào?
- Có dấu hiệu secret hoặc file không nên commit không?
Chỉ đọc và phân tích. Không sửa file.
Prompt lập plan
Mục tiêu: scaffold project taskflow-ai cho khóa học Claude Code Day 02.
Ràng buộc:
- Chỉ tạo file trong README.md, .gitignore, CLAUDE.md, apps/, docs/, infra/.
- Không cài dependency nếu chưa hỏi lại.
- Không tạo .env thật.
- Không chạy lệnh destructive.
Hãy lập plan theo từng bước và liệt kê file dự kiến tạo/sửa. Dừng lại chờ tôi xác nhận trước khi edit.
Prompt implement
Thực hiện plan đã được duyệt.
Chỉ tạo scaffold tối thiểu:
- apps/api với Node.js + TypeScript + Fastify skeleton.
- apps/web với React + Vite + TypeScript skeleton.
- README.md và .gitignore.
- docs/ và infra/ có placeholder.
Sau khi sửa, tóm tắt file đã tạo và lệnh nào tôi cần tự chạy để kiểm tra.
Prompt review
Review toàn bộ diff hiện tại của taskflow-ai.
Tập trung vào:
- Có secret hoặc credential nào bị commit nhầm không?
- README có nói quá trạng thái thực tế không?
- .gitignore đã chặn .env, node_modules, dist, coverage chưa?
- Scaffold backend/frontend có vượt quá phạm vi Day 02 không?
- Có file nào nên bỏ khỏi commit không?
Không sửa file. Trả lời theo mức độ nghiêm trọng.
Prompt viết test hoặc verification
Với scaffold hiện tại, hãy đề xuất verification tối thiểu cho Day 02.
Yêu cầu:
- Không giả định dependency đã install nếu package-lock chưa có.
- Nếu chưa chạy được test, nói rõ vì sao.
- Đưa ra checklist command an toàn để tôi tự chạy.
- Không cài package và không sửa file.
6. Trade-offs
Scaffold bằng Claude Code trước, install sau
Lợi ích:
- Diff nhỏ, dễ review.
- Ít rủi ro dependency thay đổi theo thời điểm.
- Phù hợp để học cách kiểm soát agent trước khi cho chạy command.
Rủi ro:
- Scripts trong
package.jsoncó thể chưa chạy được cho đến khi install dependency. - Có thể cần chỉnh lại sau khi dùng generator thật.
Nên dùng khi:
- Team mới bắt đầu dùng Claude Code.
- Bạn muốn dạy workflow plan-first.
- Repo đang ở giai đoạn kiến trúc ban đầu.
Dùng generator như Vite ngay
Lợi ích:
- Có cấu trúc chuẩn từ tool chính thức.
- Scripts thường chạy được nhanh sau
npm install. - Ít phải tự viết boilerplate.
Rủi ro:
- Generator tạo nhiều file hơn, diff dài hơn.
- Version mới có thể đổi cấu trúc.
- Claude có thể hiểu nhầm file generator tạo là quyết định kiến trúc của team.
Nên dùng khi:
- Bạn đã quen với Vite.
- Team chấp nhận dependency install trong setup.
- Có internet và policy package registry rõ ràng.
Permission chặt hay mở
Chặt hơn với phiên mặc định và prompt chỉ đọc/lập plan:
- An toàn hơn.
- Chậm hơn vì cần duyệt nhiều thao tác.
- Tốt cho ngày đầu setup và repo lạ.
Mở hơn với claude --permission-mode acceptEdits hoặc permissions.defaultMode: auto trong .claude/settings.json:
- Nhanh hơn trong sandbox.
- Rủi ro tạo/sửa nhiều file ngoài ý muốn.
- Chỉ dùng khi phạm vi file rất rõ, working directory đúng, và bạn review diff ngay sau đó.
- Với setting
auto, cần thống nhất trong team vì nó ảnh hưởng mặc định của project, không chỉ một session.
7. Best practices
- Luôn mở Claude Code từ root project, không mở từ thư mục cha chứa nhiều repo.
- Bắt đầu bằng prompt đọc hiểu hoặc plan, nhất là khi repo mới.
- Ghi rõ file/folder được phép sửa.
- Yêu cầu Claude liệt kê file sẽ tạo trước khi edit.
- Không cho Claude chạy install, migration, delete, reset Git nếu chưa nêu rõ rủi ro.
- Tạo
.gitignoretrước khi tạo.envhoặc chạy tool sinh artifact. - Chỉ dùng
.env.examplevới giá trị giả. - Không paste secret vào prompt để Claude "kiểm tra giúp".
- Sau mỗi cụm thay đổi, chạy
git diff --statvàgit diff. - Commit checkpoint nhỏ sau khi scaffold ổn.
- README phải phản ánh đúng trạng thái: scaffold, chưa production-ready.
- Với project team, đưa rule quan trọng vào
CLAUDE.mdđể session sau có context chuẩn.
8. Performance / cost / context
Setup project mới tưởng rẻ nhưng có thể tốn context nếu prompt mơ hồ. Ví dụ "hãy tạo app quản lý task đầy đủ" khiến Claude phải tự quyết định backend, frontend, database, auth, test, deployment. Kết quả thường là nhiều file, nhiều dependency, khó review.
Cách tối ưu:
- Chia task thành bước nhỏ: guideline, folder, backend, frontend, README, review.
- Cho Claude đọc ít file cần thiết. Repo mới thì context nhẹ, nhưng vẫn cần boundary rõ.
- Dùng prompt yêu cầu "chỉ đọc và lập plan, không sửa file" khi chỉ cần phân tích.
- Dùng prompt có acceptance criteria thay vì yêu cầu chung chung.
- Không yêu cầu Claude giải thích lại toàn bộ official docs trong session coding nếu chỉ cần thực hành.
- Sau scaffold, commit checkpoint để ngày sau không cần mô tả lại mọi quyết định.
Chi phí thời gian hợp lý cho Day 02:
- Nếu không install dependency: 60-90 phút là đủ để có scaffold sạch.
- Nếu dùng generator và install: thêm 20-30 phút cho lỗi môi trường, network, package manager.
Nguyên tắc context:
CLAUDE.mdlà memory project, không phải nơi nhồi mọi thứ.- README dành cho human và onboarding.
- Prompt trong session chỉ nên chứa mục tiêu hiện tại, ràng buộc, acceptance criteria.
9. Checklist cuối bài
- Tôi chạy được
claude --version. - Tôi biết cài Claude Code bằng installer phù hợp hệ điều hành.
- Tôi tạo được repo Git
taskflow-ai. - Tôi mở Claude Code từ root
taskflow-aibằngclaude. - Tôi dùng được
/help. - Tôi biết dùng
claude --continuecho session gần nhất vàclaude --resumehoặc/resumekhi cần chọn session. - Tôi dùng được
/inithoặc tạo đượcCLAUDE.mdguideline ban đầu. - Tôi tạo được
README.mdtrung thực về trạng thái scaffold. - Tôi tạo được
.gitignorechặn.env,node_modules, build output, coverage. - Tôi có folder
apps/api,apps/web,docs,infra. - Tôi không đưa secret hoặc production credential vào prompt.
- Tôi review
git difftrước khi commit. - Tôi có commit checkpoint đầu tiên cho Day 02.
10. Bài tập
Bài 1 — Cơ bản
Tạo repo taskflow-ai, chạy git init, mở Claude Code bằng claude, chạy /help, sau đó yêu cầu Claude giải thích project boundary hiện tại mà không sửa file.
Kết quả cần có:
- Screenshot hoặc ghi chú kết quả
claude --version. - Ghi chú thư mục root project.
- Không có file nào bị tạo ngoài ý muốn.
Bài 2 — Thực tế
Dùng Claude Code tạo CLAUDE.md, README.md, .gitignore và cấu trúc folder apps/api, apps/web, docs, infra.
Ràng buộc:
- Claude phải lập plan trước.
- Không cài dependency.
- Không tạo
.env. - Sau khi xong, bạn phải review
git diff.
Kết quả cần có:
git diff --stat.- Nội dung
.gitignorecó rule cho.env. - README ghi rõ "Day 02 scaffold only" hoặc nội dung tương đương.
Bài 3 — Nâng cao
Tạo branch thử nghiệm và so sánh scaffold thủ công với output từ generator như Vite, nhưng không overwrite apps/web chính.
Ràng buộc:
- Tạo branch riêng trước khi thử.
- Nếu chạy generator, tạo vào folder khác như
apps/web-generated. - Không merge branch thử nghiệm nếu chưa review.
- Ghi lại file nào generator tạo thêm và file nào không cần cho Day 02.
Kết quả cần có:
- Bảng so sánh ngắn giữa skeleton và generator.
- Ghi chú rủi ro về dependency install, output thay đổi theo version, và overwrite folder.
- Quyết định giữ scaffold hiện tại hay lên plan migration.
Bài 4 — Review & Reflection
Yêu cầu Claude review diff hiện tại nhưng không sửa file.
Checklist review:
- Có secret,
.env, credential hoặc production data không? - File tạo ra có đúng phạm vi Day 02 không?
- README có nói đúng trạng thái scaffold không?
.gitignorecó chặn.env,node_modules,dist,coveragekhông?- Bạn sẽ dùng phiên mặc định hay
claude --permission-mode acceptEditsở Day 03, và vì sao?
Kết quả cần có:
- Danh sách finding theo mức Critical/High/Medium/Low.
- Ghi chú rollback nếu cần dùng
git restore <path>. - Commit checkpoint hoặc lý do chưa commit.
- Một ghi chú áp dụng cho project cá nhân: rule nào sẽ đưa vào
CLAUDE.md, rule nào chặn secret, rule nào yêu cầu hỏi lại trước command nguy hiểm.
Tài liệu
Tóm tắt kiến thức
Day 02 tập trung vào setup môi trường và workflow cơ bản với Claude Code. Điểm chính:
- Cài hoặc kiểm tra Claude Code CLI trước khi làm việc.
- Luôn vào đúng thư mục project rồi chạy
claude. - Dùng
/helpđể xem khả năng hiện có. - Dùng
/initđể tạo guideline project nhưCLAUDE.md. - Dùng
claude --continueđể tiếp tục session gần nhất trong thư mục hiện tại. - Dùng
claude --resumehoặc/resumeđể chọn session cần mở lại. - Tạo repo sandbox
taskflow-ai, không thao tác trên production. - Scaffold backend/frontend theo lát cắt nhỏ, review diff sau mỗi bước.
- Không đưa secret, production credential, customer data hoặc token vào prompt.
Sơ đồ tư duy hoặc luồng xử lý
Chuẩn bị máy
|
+-- kiểm tra git/node/claude
|
v
Tạo repo taskflow-ai
|
+-- git init
+-- kiểm tra git status
|
v
Mở Claude Code từ root project
|
+-- claude
+-- /help
+-- /init
|
v
Tạo guideline và scaffold
|
+-- CLAUDE.md
+-- README.md
+-- .gitignore
+-- apps/api
+-- apps/web
+-- docs
+-- infra
|
v
Review và checkpoint
|
+-- git diff --stat
+-- git diff
+-- git add path rõ ràng
+-- git commit
Luồng an toàn khi làm với Claude Code:
Prompt rõ mục tiêu
-> Claude lập plan
-> Developer duyệt phạm vi
-> Claude edit hoặc đề xuất command
-> Developer review diff/output
-> Commit checkpoint
Bảng so sánh
Cách chạy Claude Code
| Tình huống | Cách làm | Khi nào dùng | Rủi ro |
|---|---|---|---|
| Mở trong root project | cd taskflow-ai rồi claude | Cách mặc định | Ít rủi ro nếu root đúng |
| Mở ở thư mục cha | cd ~/work rồi claude | Hầu như không nên dùng cho khóa học | Claude có thể thấy nhiều repo không liên quan |
| Mở trong subfolder | cd apps/api rồi claude | Khi chỉ làm backend hẹp | Claude có thể thiếu context root, README, CLAUDE.md |
Permission mode giai đoạn setup
| Cách dùng | Mục đích | Nên dùng Day 02? | Ghi chú |
|---|---|---|---|
Phiên mặc định với claude | Claude hỏi quyền khi cần sửa file hoặc chạy command | Có | Phù hợp khi mới học và repo còn lạ |
| Prompt "chỉ đọc/lập plan, không sửa file" | Khám phá và lập kế hoạch trước khi edit | Có | Đây là ràng buộc workflow, không phải thay thế permission |
claude --permission-mode acceptEdits | Cho phép tạo/sửa file và auto-approve common filesystem commands trong working directory | Có, trong sandbox | Chỉ dùng khi phạm vi file rõ và review diff ngay sau đó |
.claude/settings.json với permissions.defaultMode: auto | Đặt default permission cho project | Hạn chế | Cần thống nhất team vì ảnh hưởng mọi session dùng setting này |
Scaffold strategy
| Chiến lược | Lợi ích | Chi phí/rủi ro | Phù hợp khi |
|---|---|---|---|
| Claude tạo skeleton, chưa install | Diff nhỏ, dễ học review | Scripts chưa chạy được ngay | Học workflow, repo mới |
| Dùng generator như Vite | Chuẩn tool, chạy nhanh sau install | Diff dài, kết quả thay đổi theo phiên bản | Team đã quen stack |
| Tự viết thủ công không dùng Claude | Kiểm soát cao nhất | Mất thời gian, ít học agent workflow | Khi policy chưa cho dùng AI |
File cần có sau Day 02
| File/folder | Vai trò | Điều cần kiểm tra |
|---|---|---|
CLAUDE.md | Guideline cho Claude Code | Có rule secret, command nguy hiểm, workflow plan-first |
README.md | Onboarding cho human | Không nói app đã hoàn chỉnh nếu chỉ scaffold |
.gitignore | Chặn artifact và secret | Có .env, .env.*, !.env.example, node_modules/, dist/, coverage/ |
apps/api/ | Backend scaffold | Không có database credential thật |
apps/web/ | Frontend scaffold | Không gọi API production |
docs/ | Tài liệu project | Có placeholder hoặc note rõ |
infra/ | Docker/infra sau này | Chưa cần compose thật nếu chưa học Docker |
Lỗi thường gặp
Chạy claude ở sai thư mục
Dấu hiệu:
- Claude nói về file không thuộc project.
/inittạo guideline ở repo khác.git statuskhông giống bạn kỳ vọng.
Cách tránh:
- Trước khi chạy
claude, kiểm trapwdhoặcGet-Location. - Chạy
git rev-parse --show-toplevelnếu repo đã có Git.
Prompt quá rộng
Ví dụ xấu:
Hãy tạo app task management đầy đủ.
Vấn đề:
- Claude có thể tự thêm auth, database, UI, test, Docker.
- Diff lớn và khó review.
- Dễ sinh command install ngoài ý muốn.
Cách sửa:
Chỉ scaffold Day 02. Được phép tạo README.md, .gitignore, CLAUDE.md, apps/api, apps/web, docs, infra. Không cài dependency. Trước khi edit hãy lập plan.
Commit nhầm .env
Dấu hiệu:
git statusthấy.env.git diffcó credential hoặc connection string thật.
Cách tránh:
- Tạo
.gitignoresớm. - Chỉ dùng
.env.example. - Chạy
git statustrướcgit add.
README nói quá trạng thái thật
Dấu hiệu:
- README ghi "run production" hoặc "fully functional" trong khi mới scaffold.
- Lệnh trong README chưa chạy được vì dependency chưa cài.
Cách sửa:
- Ghi rõ "Day 02 scaffold only".
- Tách "planned commands" và "verified commands".
Cho Claude install quá sớm
Dấu hiệu:
- Có
node_modules/, lockfile, nhiều package trước khi thống nhất stack. - Lỗi network hoặc registry làm session lệch sang debugging môi trường.
Cách tránh:
- Day 02 ưu tiên skeleton trước.
- Nếu install, ghi rõ command, thư mục chạy, rủi ro và output kỳ vọng.
Cách debug
Kiểm tra CLI
claude --version
Nếu lỗi:
- Đóng mở lại terminal.
- Kiểm tra installer đã hoàn tất chưa.
- Kiểm tra
PATH. - Đọc lại quickstart official.
Kiểm tra đang ở đúng repo
pwd
git status
git rev-parse --show-toplevel
Windows PowerShell:
Get-Location
git status
git rev-parse --show-toplevel
Nếu git rev-parse báo lỗi, thư mục hiện tại chưa nằm trong Git repo hoặc bạn đang ở nhầm nơi.
Kiểm tra file Claude vừa tạo
git diff --stat
git diff
Nếu diff quá lớn:
- Dừng implement.
- Yêu cầu Claude tóm tắt file đã sửa.
- Revert file không mong muốn bằng
git restore <path>nếu chưa commit.
Kiểm tra secret trước commit
git status
git diff -- . ':!package-lock.json'
Đọc kỹ các file:
.envREADME.mdCLAUDE.md- file config trong
apps/api - file config trong
infra
Nếu thấy secret:
- Không commit.
- Xóa khỏi file.
- Nếu secret thật đã xuất hiện trong Git history, rotate secret theo policy nội bộ.
Khi /init tạo guideline không đúng
Cách xử lý:
- Yêu cầu Claude sửa lại theo format ngắn hơn.
- Hoặc bỏ thay đổi:
git restore CLAUDE.md
Chỉ dùng git restore khi chắc chắn muốn mất thay đổi chưa commit trong file đó.
Link tài liệu nên đọc
- Claude Code Quickstart: https://code.claude.com/docs/en/quickstart
- Claude Code Permissions: https://code.claude.com/docs/en/permissions
- GitHub Docs - About Git: https://docs.github.com/en/get-started/using-git/about-git
- Docker Compose Docs: https://docs.docker.com/compose/
Gợi ý đọc:
- Đọc quickstart trước khi cài hoặc khi
claudekhông chạy. - Đọc permissions trước khi bật
acceptEditshoặc đặtpermissions.defaultMode: auto. - Đọc Git basics nếu chưa quen
git status,git diff,git add,git commit. - Docker Compose chỉ cần đọc khái niệm ở Day 02; các ngày sau mới dùng sâu cho PostgreSQL/Redis.
Bài tập
Bài 1 — Cơ bản
Mục tiêu: kiểm tra môi trường local và mở Claude Code đúng thư mục.
Thời gian: 20-25 phút.
Yêu cầu:
- Tạo thư mục sandbox cho project
taskflow-ai. - Chạy
git init. - Kiểm tra
git --version,node --version,claude --version. - Chạy
claudetừ roottaskflow-ai. - Trong Claude Code, chạy
/help. - Hỏi Claude: "Bạn đang thấy project boundary nào? Chỉ đọc và trả lời, không sửa file."
Lệnh gợi ý trên macOS/Linux:
mkdir -p ~/work/taskflow-ai
cd ~/work/taskflow-ai
git init
git --version
node --version
claude --version
claude
Lệnh gợi ý trên Windows PowerShell:
New-Item -ItemType Directory -Force -Path D:\my-source\taskflow-ai
Set-Location D:\my-source\taskflow-ai
git init
git --version
node --version
claude --version
claude
Cần ghi lại:
- Đường dẫn root project.
- Phiên bản Git, Node.js, Claude Code.
- Claude có xác nhận đúng repo
taskflow-aikhông.
Bài 2 — Thực tế
Mục tiêu: dùng Claude Code tạo guideline và scaffold project tối thiểu.
Thời gian: 40-50 phút.
Trong Claude Code, chạy:
/init
Sau đó dùng prompt:
Project này là taskflow-ai, app quản lý task mini cho team kỹ thuật.
Hãy lập plan tạo scaffold Day 02. Phạm vi được phép:
- CLAUDE.md
- README.md
- .gitignore
- apps/api/
- apps/web/
- docs/
- infra/
Ràng buộc:
- Không cài dependency.
- Không tạo .env thật.
- Không thêm secret hoặc credential.
- Không tạo business logic phức tạp.
- Backend chỉ là skeleton Node.js + TypeScript + Fastify.
- Frontend chỉ là skeleton React + Vite + TypeScript.
Trước khi edit, hãy liệt kê file sẽ tạo/sửa và chờ tôi xác nhận.
Sau khi duyệt plan, yêu cầu Claude implement:
Thực hiện plan đã duyệt. Sau khi sửa, tóm tắt file đã tạo và nhắc tôi command cần chạy để review diff. Không chạy install.
Kiểm tra ngoài terminal:
git status
git diff --stat
git diff
Yêu cầu kết quả:
- Có
CLAUDE.md. - Có
README.md. - Có
.gitignore. - Có
apps/apivàapps/web. - Có
docsvàinfra. - Không có
.env. - Không có
node_modules. - Không có secret thật.
Bài 3 — Nâng cao
Mục tiêu: so sánh workflow "Claude skeleton trước" và "generator trước" mà không làm hỏng repo chính.
Thời gian: 35-45 phút.
Tạo branch thử nghiệm:
git checkout -b experiment/vite-generator
Nếu bạn muốn thử generator, chạy trong root taskflow-ai:
npm create vite@latest apps/web-generated -- --template react-ts
Giải thích:
- Branch
experiment/vite-generatorcô lập thử nghiệm. apps/web-generatedtránh overwriteapps/webđã scaffold.- Generator có thể tải package từ npm và tạo file theo phiên bản hiện tại.
Sau đó hỏi Claude:
So sánh apps/web và apps/web-generated.
Tập trung vào:
- File nào generator tạo thêm?
- File nào nên học theo?
- File nào không cần cho Day 02?
- Nếu muốn thay apps/web bằng output generator, cần plan migration nào?
Chỉ đọc và phân tích. Không sửa file.
Kết thúc bài:
git diff --stat
git checkout main
Nếu branch chính của bạn không tên main, thay bằng tên branch đang dùng, kiểm tra bằng:
git branch --show-current
Yêu cầu kết quả:
- Có bảng so sánh ngắn giữa skeleton và generator.
- Không merge thử nghiệm nếu chưa review.
- Không overwrite scaffold chính.
Rủi ro:
npm create vite@latestcần internet.- Generator có thể hỏi xác nhận nếu folder tồn tại.
- Không chạy trong
apps/webnếu bạn chưa muốn overwrite.
Bài 4 — Review & Reflection
Mục tiêu: rèn thói quen review AI output trước khi commit.
Thời gian: 25-30 phút.
Yêu cầu Claude review:
Review diff hiện tại cho Day 02.
Hãy phân loại finding theo mức:
- Critical: secret, lệnh destructive, file ngoài phạm vi.
- High: README sai trạng thái, .gitignore thiếu rule quan trọng.
- Medium: scaffold khó maintain, script gây hiểu nhầm.
- Low: naming hoặc wording.
Không sửa file. Chỉ đưa finding và đề xuất.
Sau đó tự trả lời các câu hỏi:
- Claude đã tạo file đúng phạm vi chưa?
- Có lệnh nào Claude đề xuất nhưng bạn chưa hiểu không?
.gitignorecó chặn secret chưa?- README có trung thực về trạng thái scaffold không?
- Bạn sẽ dùng phiên mặc định hay
claude --permission-mode acceptEditsở Day 03, và vì sao?
Nếu mọi thứ ổn, tạo commit:
git add README.md .gitignore CLAUDE.md apps docs infra
git commit -m "chore: scaffold taskflow ai project"
Không dùng git add . trong bài này. Mục tiêu là tập add path rõ ràng.
Tiêu chí hoàn thành
Bạn hoàn thành Day 02 khi có đủ:
claude --versionchạy được.- Repo
taskflow-aiđãgit init. - Claude Code được mở từ root project.
/helpvà/initđã được dùng hoặc đã được kiểm tra.CLAUDE.mdcó guideline ban đầu.README.mdmô tả project và trạng thái scaffold..gitignorechặn.env,.env.*,node_modules/,dist/,coverage/.- Folder
apps/api,apps/web,docs,infra. - Không có secret thật trong prompt, file, diff hoặc commit.
- Đã review
git diff. - Có commit checkpoint hoặc ghi chú lý do chưa commit.
Gợi ý nếu bí
- Nếu
claudekhông chạy, đọc lại quickstart và kiểm tra terminal đã nhậnPATHmới chưa. - Nếu Claude tạo quá nhiều file, yêu cầu dừng và thu hẹp phạm vi: "Chỉ giữ README.md, .gitignore, CLAUDE.md, apps, docs, infra."
- Nếu sợ mất kiểm soát, yêu cầu Claude chỉ đọc/lập plan và không edit; chưa bật
acceptEdits. - Nếu không biết
.gitignoređủ chưa, hỏi Claude review riêng.gitignoretheo stack Node.js. - Nếu generator Vite hỏi overwrite, chọn không overwrite và tạo folder khác để thử.
- Nếu lỡ tạo
.env, xóa khỏi staging, thêm rule.envvào.gitignore, và không commit.
Đáp án tham khảo hoặc kết quả kỳ vọng
Cấu trúc tối thiểu sau Day 02:
taskflow-ai/
.git/
.gitignore
CLAUDE.md
README.md
apps/
api/
package.json
tsconfig.json
src/
app.ts
server.ts
routes/
health.ts
web/
package.json
index.html
src/
App.tsx
main.tsx
styles.css
docs/
.gitkeep
infra/
.gitkeep
README.md nên thể hiện:
- Tên project:
taskflow-ai. - Mục tiêu: app quản lý task mini cho team kỹ thuật.
- Stack dự kiến: Node.js, TypeScript, Fastify, React, Vite, PostgreSQL, Redis, Docker Compose.
- Trạng thái: Day 02 scaffold only.
- Cảnh báo: không commit
.envhoặc secret.
.gitignore tối thiểu:
node_modules/
dist/
build/
coverage/
.env
.env.*
!.env.example
*.log
.DS_Store
CLAUDE.md tối thiểu:
# CLAUDE.md
## Project
taskflow-ai is a mini task management app for engineering teams.
## Stack kỳ vọng
- Backend: Node.js, TypeScript, Fastify.
- Frontend: React, Vite, TypeScript.
- Data: PostgreSQL, Redis.
- Infra: Docker Compose.
## Safety rules
- Do not read, create, or commit real secrets.
- Do not create `.env`; use `.env.example` only.
- Ask before running install, migration, delete, reset, or other destructive commands.
- Plan before editing multiple files.
- Summarize changed files after each task.
Kết quả kỳ vọng của git status trước commit:
Untracked files:
.gitignore
CLAUDE.md
README.md
apps/
docs/
infra/
Kết quả kỳ vọng sau commit:
nothing to commit, working tree clean
Nếu bạn chưa commit vì muốn review thêm, vẫn đạt yêu cầu nếu có git diff --stat, không có secret, và có ghi chú rõ phần còn cần kiểm tra.