codymaster 4.4.4 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +29 -14
- package/commands/demo.md +1 -1
- package/dist/context-bus.js +70 -0
- package/dist/context-db.js +265 -0
- package/dist/continuity.js +12 -0
- package/dist/file-watcher.js +79 -0
- package/dist/index.js +152 -1
- package/dist/l0-indexer.js +158 -0
- package/dist/mcp-context-server.js +400 -0
- package/dist/migrate-json-to-sqlite.js +126 -0
- package/dist/skill-chain.js +19 -3
- package/dist/token-budget.js +108 -0
- package/dist/uri-resolver.js +203 -0
- package/package.json +7 -1
- package/skills/_shared/helpers.md +50 -14
- package/skills/cm-autopilot/SKILL.md +29 -0
- package/skills/cm-autopilot/scripts/autopilot.py +190 -0
- package/skills/cm-continuity/SKILL.md +90 -28
- package/skills/cm-quality-gate/SKILL.md +11 -1
- package/skills/cm-safe-deploy/SKILL.md +38 -2
- package/skills/cm-security-gate/SKILL.md +158 -34
- package/skills/cm-skill-chain/SKILL.md +47 -1
- package/skills/cm-start/SKILL.md +11 -2
- package/skills/cm-test-gate/SKILL.md +3 -0
- package/skills/boxme-git-config/SKILL.md +0 -56
- package/skills/boxme-local-dev/SKILL.md +0 -66
- package/skills/jobs-to-be-done/SKILL.md +0 -266
- package/skills/jobs-to-be-done/references/case-studies.md +0 -154
- package/skills/jobs-to-be-done/references/competitive-strategy.md +0 -280
- package/skills/jobs-to-be-done/references/diagnostics.md +0 -158
- package/skills/jobs-to-be-done/references/innovation-process.md +0 -392
- package/skills/jobs-to-be-done/references/organizational-change.md +0 -328
- package/skills/marketplace-report-crawler/SKILL.md +0 -176
- package/skills/marketplace-report-crawler/config/accounts.json +0 -41
- package/skills/marketplace-report-crawler/config/report-types.json +0 -422
- package/skills/marketplace-report-crawler/config/sessions.json +0 -3
- package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +0 -102
- package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +0 -114
- package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +0 -94
- package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +0 -272
- package/skills/marketplace-report-crawler/scripts/crawl-runner.js +0 -281
- package/skills/marketplace-report-crawler/scripts/session-check.sh +0 -72
- package/skills/marketplace-report-crawler/scripts/session-manager.sh +0 -349
- package/skills/marketplace-report-crawler/scripts/setup-folders.sh +0 -83
- package/skills/medical-research/SKILL.md +0 -194
- package/skills/medical-research/scripts/evidence_checker.py +0 -288
- package/skills/mom-test/SKILL.md +0 -267
- package/skills/mom-test/references/avoiding-bad-data.md +0 -221
- package/skills/mom-test/references/case-studies.md +0 -306
- package/skills/mom-test/references/commitment-advancement.md +0 -219
- package/skills/mom-test/references/finding-conversations.md +0 -251
- package/skills/mom-test/references/processing-learning.md +0 -256
- package/skills/mom-test/references/question-patterns.md +0 -198
- package/skills/pandasai-analytics/SKILL.md +0 -251
- package/skills/release-it/SKILL.md +0 -235
- package/skills/release-it/references/anti-patterns.md +0 -279
- package/skills/release-it/references/capacity-planning.md +0 -285
- package/skills/release-it/references/chaos-engineering.md +0 -325
- package/skills/release-it/references/deployment-strategies.md +0 -331
- package/skills/release-it/references/observability.md +0 -301
- package/skills/release-it/references/stability-patterns.md +0 -355
- package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +0 -37
- package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +0 -34
- package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +0 -51
- package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +0 -39
- package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +0 -52
- package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +0 -25
- package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +0 -31
- package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +0 -25
- package/skills/skill-creator-ultra/README.md +0 -1242
- package/skills/skill-creator-ultra/SKILL.md +0 -388
- package/skills/skill-creator-ultra/agents/analyzer.md +0 -274
- package/skills/skill-creator-ultra/agents/comparator.md +0 -202
- package/skills/skill-creator-ultra/agents/grader.md +0 -223
- package/skills/skill-creator-ultra/assets/eval_review.html +0 -146
- package/skills/skill-creator-ultra/eval-viewer/generate_review.py +0 -471
- package/skills/skill-creator-ultra/eval-viewer/viewer.html +0 -1325
- package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +0 -109
- package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +0 -116
- package/skills/skill-creator-ultra/examples/example_api_docs.md +0 -189
- package/skills/skill-creator-ultra/examples/example_db_migration.md +0 -253
- package/skills/skill-creator-ultra/examples/example_git_commit.md +0 -111
- package/skills/skill-creator-ultra/install.ps1 +0 -289
- package/skills/skill-creator-ultra/install.sh +0 -313
- package/skills/skill-creator-ultra/phases/phase1_interview.md +0 -202
- package/skills/skill-creator-ultra/phases/phase2_extract.md +0 -55
- package/skills/skill-creator-ultra/phases/phase3_detect.md +0 -57
- package/skills/skill-creator-ultra/phases/phase4_generate.md +0 -543
- package/skills/skill-creator-ultra/phases/phase5_test.md +0 -319
- package/skills/skill-creator-ultra/phases/phase6_eval.md +0 -301
- package/skills/skill-creator-ultra/phases/phase7_iterate.md +0 -103
- package/skills/skill-creator-ultra/phases/phase8_optimize.md +0 -113
- package/skills/skill-creator-ultra/resources/advanced_patterns.md +0 -499
- package/skills/skill-creator-ultra/resources/anti_patterns.md +0 -376
- package/skills/skill-creator-ultra/resources/blueprints.md +0 -498
- package/skills/skill-creator-ultra/resources/checklist.md +0 -243
- package/skills/skill-creator-ultra/resources/composition_cookbook.md +0 -291
- package/skills/skill-creator-ultra/resources/description_optimization.md +0 -90
- package/skills/skill-creator-ultra/resources/eval_guide.md +0 -133
- package/skills/skill-creator-ultra/resources/industry_questions.md +0 -189
- package/skills/skill-creator-ultra/resources/interview_questions.md +0 -200
- package/skills/skill-creator-ultra/resources/pattern_detection.md +0 -200
- package/skills/skill-creator-ultra/resources/prompt_engineering.md +0 -531
- package/skills/skill-creator-ultra/resources/schemas.md +0 -430
- package/skills/skill-creator-ultra/resources/script_integration.md +0 -593
- package/skills/skill-creator-ultra/resources/scripts_guide.md +0 -339
- package/skills/skill-creator-ultra/resources/skill_template.md +0 -124
- package/skills/skill-creator-ultra/resources/skill_writing_guide.md +0 -634
- package/skills/skill-creator-ultra/resources/versioning_guide.md +0 -193
- package/skills/skill-creator-ultra/scripts/ci_eval.py +0 -200
- package/skills/skill-creator-ultra/scripts/package_skill.py +0 -165
- package/skills/skill-creator-ultra/scripts/simulate_skill.py +0 -398
- package/skills/skill-creator-ultra/scripts/skill_audit.py +0 -611
- package/skills/skill-creator-ultra/scripts/skill_compare.py +0 -265
- package/skills/skill-creator-ultra/scripts/skill_export.py +0 -334
- package/skills/skill-creator-ultra/scripts/skill_scaffold.py +0 -403
- package/skills/skill-creator-ultra/scripts/skill_stats.py +0 -339
- package/skills/skill-creator-ultra/scripts/validate_skill.py +0 -411
- package/skills/tailwind-mastery/SKILL.md +0 -229
- package/skills/vercel-react-best-practices/AGENTS.md +0 -3373
- package/skills/vercel-react-best-practices/README.md +0 -123
- package/skills/vercel-react-best-practices/SKILL.md +0 -143
- package/skills/vercel-react-best-practices/rules/_sections.md +0 -46
- package/skills/vercel-react-best-practices/rules/_template.md +0 -28
- package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
- package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
- package/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
- package/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
- package/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
- package/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
- package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
- package/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
- package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
- package/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
- package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
- package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
- package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
- package/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
- package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
- package/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
- package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
- package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
- package/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
- package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
- package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
- package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
- package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
- package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
- package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
- package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
- package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
- package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
- package/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
- package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
- package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
- package/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
- package/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
- package/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
- package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -142
- package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
- package/skills/web-design-guidelines/SKILL.md +0 -39
|
@@ -1,593 +0,0 @@
|
|
|
1
|
-
# 🔧 Script Integration Guide — Tích Hợp Scripts Vào Skill
|
|
2
|
-
|
|
3
|
-
> **Biến AI Agent từ "chỉ biết nói" thành "biết LÀM" — chạy lệnh, thao tác hệ thống,
|
|
4
|
-
> xử lý dữ liệu phức tạp.**
|
|
5
|
-
|
|
6
|
-
Tài liệu này hướng dẫn chi tiết cách tích hợp scripts (Python, Bash, Node.js, Go...)
|
|
7
|
-
vào SKILL.md để AI Agent thực thi các tác vụ vượt qua giới hạn tạo văn bản thông thường.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Tại sao cần Script?
|
|
12
|
-
|
|
13
|
-
| Không có Script | Có Script |
|
|
14
|
-
| --- | --- |
|
|
15
|
-
| AI chỉ sinh text/markdown | AI chạy lệnh, đọc file, gọi API, tính toán |
|
|
16
|
-
| Giới hạn ở "tư vấn" | Thực sự **LÀM** việc trên hệ thống |
|
|
17
|
-
| Phụ thuộc AI tự tính | Tính toán chính xác 100% (Python > AI math) |
|
|
18
|
-
| Không tương tác hệ thống | Đọc/ghi file, kết nối database, deploy |
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 1. Cấu trúc thư mục chuẩn
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
skills/<tên-skill>/
|
|
26
|
-
├── SKILL.md
|
|
27
|
-
└── scripts/
|
|
28
|
-
├── main.py ← Script chính
|
|
29
|
-
├── helper.sh ← Script phụ (Bash)
|
|
30
|
-
└── data_processor.py ← Script xử lý dữ liệu
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Quy tắc:**
|
|
34
|
-
|
|
35
|
-
- Scripts PHẢI nằm trong thư mục `scripts/` bên trong skill
|
|
36
|
-
- Đường dẫn gọi script PHẢI dùng **relative path** (đường dẫn tương đối)
|
|
37
|
-
- Mỗi script NÊN có 1 chức năng rõ ràng (single responsibility)
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## 2. Chuẩn bị Script — 3 tiêu chuẩn
|
|
42
|
-
|
|
43
|
-
### 2.1. Script phải nhận tham số qua Command-line Arguments
|
|
44
|
-
|
|
45
|
-
```python
|
|
46
|
-
# scripts/deploy.py
|
|
47
|
-
import argparse
|
|
48
|
-
|
|
49
|
-
parser = argparse.ArgumentParser(description="Deploy ứng dụng lên server.")
|
|
50
|
-
parser.add_argument('--env', required=True,
|
|
51
|
-
choices=['dev', 'staging', 'prod'],
|
|
52
|
-
help='Môi trường deploy (dev/staging/prod)')
|
|
53
|
-
parser.add_argument('--branch', default='main',
|
|
54
|
-
help='Branch để deploy (mặc định: main)')
|
|
55
|
-
parser.add_argument('--dry-run', action='store_true',
|
|
56
|
-
help='Chỉ mô phỏng, không deploy thật')
|
|
57
|
-
args = parser.parse_args()
|
|
58
|
-
|
|
59
|
-
print(f"🚀 Deploying branch '{args.branch}' to '{args.env}'...")
|
|
60
|
-
if args.dry_run:
|
|
61
|
-
print("⚠️ DRY RUN — Không có gì thực sự được deploy.")
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
# scripts/check_staging.sh
|
|
66
|
-
#!/bin/bash
|
|
67
|
-
# Kiểm tra health của staging server
|
|
68
|
-
|
|
69
|
-
URL=${1:-"https://staging.example.com"}
|
|
70
|
-
STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$URL/health")
|
|
71
|
-
|
|
72
|
-
if [ "$STATUS" -eq 200 ]; then
|
|
73
|
-
echo "✅ Staging is healthy (HTTP $STATUS)"
|
|
74
|
-
exit 0
|
|
75
|
-
else
|
|
76
|
-
echo "❌ Staging is DOWN (HTTP $STATUS)"
|
|
77
|
-
exit 1
|
|
78
|
-
fi
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### 2.2. Script phải hỗ trợ cờ `--help`
|
|
82
|
-
|
|
83
|
-
**BẮT BUỘC** cho mọi Python script dùng `argparse` (tự động có).
|
|
84
|
-
|
|
85
|
-
Khi AI chạy `python scripts/deploy.py --help`, output sẽ là:
|
|
86
|
-
|
|
87
|
-
```
|
|
88
|
-
usage: deploy.py [-h] --env {dev,staging,prod} [--branch BRANCH] [--dry-run]
|
|
89
|
-
|
|
90
|
-
Deploy ứng dụng lên server.
|
|
91
|
-
|
|
92
|
-
options:
|
|
93
|
-
-h, --help show this help message and exit
|
|
94
|
-
--env {dev,staging,prod}
|
|
95
|
-
Môi trường deploy (dev/staging/prod)
|
|
96
|
-
--branch BRANCH Branch để deploy (mặc định: main)
|
|
97
|
-
--dry-run Chỉ mô phỏng, không deploy thật
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
→ AI đọc output này là BIẾT cách dùng script, không cần đọc source code.
|
|
101
|
-
|
|
102
|
-
### 2.3. Script phải có quyền thực thi (macOS/Linux)
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
# Cấp quyền thực thi cho bash script
|
|
106
|
-
chmod +x scripts/check_staging.sh
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
> **Windows:** Không cần `chmod`. Python scripts chạy bằng `python scripts/file.py`.
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## 3. Gọi Script Trong SKILL.md — 3 Phương pháp
|
|
114
|
-
|
|
115
|
-
### Phương pháp A: Direct Call (Gọi trực tiếp)
|
|
116
|
-
|
|
117
|
-
Phù hợp khi script đơn giản, ít tham số.
|
|
118
|
-
|
|
119
|
-
```markdown
|
|
120
|
-
# Instructions
|
|
121
|
-
1. Kiểm tra health của staging server:
|
|
122
|
-
- Chạy lệnh: `./scripts/check_staging.sh`
|
|
123
|
-
- Nếu output chứa "✅" → Staging OK, tiếp bước 2
|
|
124
|
-
- Nếu output chứa "❌" → Dừng, báo user staging bị lỗi
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Phương pháp B: Argument Mapping (Ánh xạ tham số)
|
|
128
|
-
|
|
129
|
-
Phù hợp khi cần truyền thông tin từ user vào script. **Đây là phương pháp HAY NHẤT.**
|
|
130
|
-
|
|
131
|
-
```markdown
|
|
132
|
-
# Instructions
|
|
133
|
-
1. Phân tích yêu cầu của người dùng để xác định:
|
|
134
|
-
- **Môi trường** mục tiêu → Truyền vào cờ `--env`
|
|
135
|
-
- **Branch** (nếu user chỉ định) → Truyền vào cờ `--branch`
|
|
136
|
-
2. Thực thi script: `python scripts/deploy.py --env <env> --branch <branch>`
|
|
137
|
-
|
|
138
|
-
## Bảng ánh xạ tham số:
|
|
139
|
-
|
|
140
|
-
| User nói | Cờ `--env` | Ví dụ lệnh |
|
|
141
|
-
| --- | --- | --- |
|
|
142
|
-
| "deploy lên dev" | `dev` | `python scripts/deploy.py --env dev` |
|
|
143
|
-
| "đẩy lên production" | `prod` | `python scripts/deploy.py --env prod` |
|
|
144
|
-
| "deploy branch feature/login" | + `--branch` | `python scripts/deploy.py --env dev --branch feature/login` |
|
|
145
|
-
| "thử deploy nhưng chưa chạy thật" | + `--dry-run` | `python scripts/deploy.py --env dev --dry-run` |
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**Kỹ thuật Argument Mapping:**
|
|
149
|
-
|
|
150
|
-
1. Liệt kê rõ từng **từ khóa user** → **cờ script** tương ứng
|
|
151
|
-
2. Cho AI thấy **ví dụ lệnh hoàn chỉnh** để nó hiểu pattern
|
|
152
|
-
3. AI sẽ tự trích xuất từ câu nói user và ghép vào lệnh chính xác
|
|
153
|
-
|
|
154
|
-
### Phương pháp C: Black Box (Hộp đen)
|
|
155
|
-
|
|
156
|
-
Phù hợp khi script phức tạp, nhiều tham số. **AI tự học cách dùng.**
|
|
157
|
-
|
|
158
|
-
```markdown
|
|
159
|
-
# Instructions
|
|
160
|
-
1. Tool xử lý dữ liệu (`scripts/data_processor.py`) là một **hộp đen**.
|
|
161
|
-
Bạn **KHÔNG ĐƯỢC** đọc mã nguồn của nó.
|
|
162
|
-
2. Chạy lệnh: `python scripts/data_processor.py --help` để tìm hiểu:
|
|
163
|
-
- Các cờ (flags) được hỗ trợ
|
|
164
|
-
- Tham số bắt buộc vs tùy chọn
|
|
165
|
-
- Format input/output
|
|
166
|
-
3. Phân tích yêu cầu của user → Trích xuất thông tin cần thiết.
|
|
167
|
-
4. Dựa trên output của `--help`, tự cấu trúc lệnh chính xác và thực thi.
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
**Lợi ích Black Box:**
|
|
171
|
-
|
|
172
|
-
| Lợi ích | Giải thích |
|
|
173
|
-
| --- | --- |
|
|
174
|
-
| 💾 Tiết kiệm context window | AI không nạp hàng trăm dòng source code |
|
|
175
|
-
| 🎯 Giảm lỗi suy luận | AI tập trung "cách dùng" thay vì "cách hoạt động" |
|
|
176
|
-
| 🔄 Tự động thích ứng | Cập nhật script (thêm cờ mới) → AI tự phát hiện qua `--help` |
|
|
177
|
-
| 🔒 Bảo mật | AI không thấy logic nội bộ, credentials trong code |
|
|
178
|
-
|
|
179
|
-
### Phương pháp D: Wrapper Script (Signal Relay)
|
|
180
|
-
|
|
181
|
-
Dùng khi hệ thống gốc **quá phức tạp** — tạo script "lớp vỏ" đơn giản hóa output:
|
|
182
|
-
|
|
183
|
-
```python
|
|
184
|
-
# scripts/check_system.py — Wrapper script
|
|
185
|
-
# Đóng gói DevOps toolchain phức tạp → Output đơn giản
|
|
186
|
-
import subprocess, sys, json
|
|
187
|
-
|
|
188
|
-
def check_all():
|
|
189
|
-
checks = {}
|
|
190
|
-
|
|
191
|
-
# Check 1: Database
|
|
192
|
-
result = subprocess.run(['pg_isready'], capture_output=True)
|
|
193
|
-
checks['database'] = '🟢' if result.returncode == 0 else '🔴'
|
|
194
|
-
|
|
195
|
-
# Check 2: Redis
|
|
196
|
-
result = subprocess.run(['redis-cli', 'ping'], capture_output=True)
|
|
197
|
-
checks['redis'] = '🟢' if b'PONG' in result.stdout else '🔴'
|
|
198
|
-
|
|
199
|
-
# Check 3: Disk space
|
|
200
|
-
# ... (logic phức tạp bên trong)
|
|
201
|
-
checks['disk'] = '🟢' # hoặc '🔴'
|
|
202
|
-
|
|
203
|
-
return checks
|
|
204
|
-
|
|
205
|
-
if __name__ == '__main__':
|
|
206
|
-
results = check_all()
|
|
207
|
-
all_green = all(v == '🟢' for v in results.values())
|
|
208
|
-
print(json.dumps({
|
|
209
|
-
'status': 'GREEN' if all_green else 'RED',
|
|
210
|
-
'checks': results
|
|
211
|
-
}, indent=2))
|
|
212
|
-
sys.exit(0 if all_green else 1)
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
Trong SKILL.md:
|
|
216
|
-
|
|
217
|
-
```markdown
|
|
218
|
-
# Instructions
|
|
219
|
-
1. Chạy `python scripts/check_system.py` — KHÔNG đọc source code.
|
|
220
|
-
2. Đọc output JSON:
|
|
221
|
-
- Nếu `status: "GREEN"` → Mọi thứ OK, tiếp tục
|
|
222
|
-
- Nếu `status: "RED"` → Xem `checks` để biết service nào lỗi → Báo user
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
**Khi nào dùng Wrapper Script:**
|
|
226
|
-
|
|
227
|
-
- Hệ thống gốc quá phức tạp (DevOps, monitoring, CI/CD pipelines)
|
|
228
|
-
- Cần che giấu complexity — AI chỉ cần biết GREEN/RED
|
|
229
|
-
- Script gốc không có `--help` hoặc output quá "ồn ào"
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## 4. Bảo Mật — 7 Lớp Rào Chắn Cho Script
|
|
234
|
-
|
|
235
|
-
> **Nguyên tắc Defense in Depth:** Không dựa vào 1 rào chắn duy nhất.
|
|
236
|
-
> Xếp chồng nhiều lớp → 1 lớp bị vượt, lớp tiếp theo vẫn chặn.
|
|
237
|
-
|
|
238
|
-
### 4.1. Chế độ Auto-Execute (Tầng 1 — Platform Level)
|
|
239
|
-
|
|
240
|
-
Thiết lập trong **Settings → Terminal Command Auto Execution**:
|
|
241
|
-
|
|
242
|
-
| Chế độ | Mô tả | Khi nào dùng |
|
|
243
|
-
| --- | --- | --- |
|
|
244
|
-
| **Off** | AI KHÔNG BAO GIỜ tự chạy lệnh — luôn hỏi bạn | 🥇 An toàn nhất, khuyến khích cho production |
|
|
245
|
-
| **Auto** | AI tự đánh giá rủi ro — dừng hỏi nếu nghi ngờ | Cân bằng tốc độ vs an toàn |
|
|
246
|
-
| **Turbo** | AI tự chạy MỌI lệnh không hỏi | ⚠️ CHỈ cho sandbox cách ly hoàn toàn |
|
|
247
|
-
|
|
248
|
-
### 4.2. Allow List (Tầng 2 — Positive Security)
|
|
249
|
-
|
|
250
|
-
Mô hình "Mọi thứ CẤM trừ khi ĐƯỢC PHÉP" — **an toàn nhất khi dùng với chế độ Off**.
|
|
251
|
-
|
|
252
|
-
**Cách thiết lập:**
|
|
253
|
-
|
|
254
|
-
1. Mở Settings → Terminal → Allow List Terminal Commands
|
|
255
|
-
2. Thêm các lệnh an toàn (chỉ đọc, không thay đổi hệ thống):
|
|
256
|
-
|
|
257
|
-
```text
|
|
258
|
-
# Lệnh an toàn — được tự động chạy
|
|
259
|
-
ls -al
|
|
260
|
-
python --version
|
|
261
|
-
python scripts/*.py --help
|
|
262
|
-
cat *.md
|
|
263
|
-
git status
|
|
264
|
-
git log -n 10
|
|
265
|
-
git diff --stat
|
|
266
|
-
|
|
267
|
-
# Mọi lệnh khác → AI PHẢI xin phép → Bạn phê duyệt thủ công
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
1. **Restart Antigravity** sau khi thay đổi (Allow List cần restart để có hiệu lực)
|
|
271
|
-
|
|
272
|
-
### 4.3. Deny List (Tầng 3 — Negative Security)
|
|
273
|
-
|
|
274
|
-
Mô hình "Mọi thứ ĐƯỢC PHÉP trừ khi BỊ CẤM" — chốt chặn cho chế độ Auto/Turbo.
|
|
275
|
-
|
|
276
|
-
```text
|
|
277
|
-
# Lệnh nguy hiểm — TUYỆT ĐỐI CẤM tự động chạy
|
|
278
|
-
rm -rf
|
|
279
|
-
sudo
|
|
280
|
-
curl | bash
|
|
281
|
-
wget | sh
|
|
282
|
-
DROP TABLE
|
|
283
|
-
DELETE FROM
|
|
284
|
-
TRUNCATE
|
|
285
|
-
shutdown
|
|
286
|
-
reboot
|
|
287
|
-
chmod 777
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
### 4.4. Secure Mode + Directory Permissions (Tầng 4 — File System Level)
|
|
291
|
-
|
|
292
|
-
Cấp quyền chính xác **ở cấp thư mục** — AI chỉ truy cập được phạm vi cho phép:
|
|
293
|
-
|
|
294
|
-
| Quyền | Thiết lập | Ví dụ |
|
|
295
|
-
| --- | --- | --- |
|
|
296
|
-
| **Đọc** | Cho phép đọc file trong thư mục dự án | `~/projects/my-app/` |
|
|
297
|
-
| **Ghi** | Chỉ cho phép ghi vào thư mục output | `~/projects/my-app/output/` |
|
|
298
|
-
| **Cấm** | Cấm truy cập thư mục hệ thống | `/etc/`, `/usr/`, `C:\Windows\` |
|
|
299
|
-
|
|
300
|
-
**Best Practice: Review-driven Development**
|
|
301
|
-
|
|
302
|
-
- Bật Secure Mode → AI PHẢI tạo **kế hoạch** trước
|
|
303
|
-
- AI trình bày: "Em sẽ làm 3 bước: [1]... [2]... [3]..."
|
|
304
|
-
- Bạn review → Phê duyệt → AI mới được thực thi
|
|
305
|
-
- Mỗi lệnh đều được log → Bạn biết chính xác AI đã làm gì
|
|
306
|
-
|
|
307
|
-
### 4.5. Browser Security (Tầng 5 — Network Level)
|
|
308
|
-
|
|
309
|
-
Nếu skill có script truy cập web → Rủi ro **Prompt Injection** (trang web độc hại tiêm lệnh vào AI):
|
|
310
|
-
|
|
311
|
-
**Phòng ngừa:**
|
|
312
|
-
|
|
313
|
-
| Biện pháp | Cách thiết lập | Rủi ro ngăn chặn |
|
|
314
|
-
| --- | --- | --- |
|
|
315
|
-
| **JavaScript Policy** | Settings → Browser → JS: "Request review" hoặc "Disabled" | Malicious JS khai thác AI |
|
|
316
|
-
| **Browser URL Allowlist** | Thêm domains tin cậy vào `~/.gemini/antigravity/browserAllowlist.txt` | AI truy cập trang lạ |
|
|
317
|
-
| **Không chạy `curl \| bash`** | Deny List (mục 4.3) | Remote code execution |
|
|
318
|
-
|
|
319
|
-
```text
|
|
320
|
-
# Ví dụ browserAllowlist.txt
|
|
321
|
-
github.com
|
|
322
|
-
stackoverflow.com
|
|
323
|
-
docs.python.org
|
|
324
|
-
your-internal-wiki.company.com
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
→ AI chỉ được duyệt web trên các domain đã liệt kê. Mọi domain khác bị chặn.
|
|
328
|
-
|
|
329
|
-
### 4.6. Viết Safety Check trong SKILL.md (Tầng 6 — Skill Level)
|
|
330
|
-
|
|
331
|
-
```markdown
|
|
332
|
-
# Instructions
|
|
333
|
-
|
|
334
|
-
## Bước 0: 🛡️ Safety Check (BẮT BUỘC trước mọi thao tác)
|
|
335
|
-
1. Kiểm tra môi trường:
|
|
336
|
-
- **Nếu** production → BẮT BUỘC confirm từ user trước khi chạy script
|
|
337
|
-
- **Nếu** script chứa lệnh `rm`, `delete`, `drop` → Cảnh báo + confirm
|
|
338
|
-
2. Kiểm tra script tồn tại:
|
|
339
|
-
- Chạy: `ls scripts/` → Script có trong danh sách không?
|
|
340
|
-
- Nếu KHÔNG → Báo user: "Script không tồn tại"
|
|
341
|
-
3. Nếu lần đầu chạy script → Chạy `--dry-run` (nếu hỗ trợ) trước
|
|
342
|
-
4. Nếu script cần truy cập web → Kiểm tra URL có trong Browser Allowlist không
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
### 4.7. Constraints trong SKILL.md (Tầng 7 — Hard Rules)
|
|
346
|
-
|
|
347
|
-
```markdown
|
|
348
|
-
# Constraints
|
|
349
|
-
|
|
350
|
-
## Bảo mật (ưu tiên #1 — TUYỆT ĐỐI):
|
|
351
|
-
- 🚫 TUYỆT ĐỐI KHÔNG chạy script trên production mà không confirm
|
|
352
|
-
- 🚫 TUYỆT ĐỐI KHÔNG đọc mã nguồn script (dùng `--help`)
|
|
353
|
-
- 🚫 TUYỆT ĐỐI KHÔNG truy cập URL ngoài Allowlist
|
|
354
|
-
|
|
355
|
-
## Vận hành (ưu tiên #2):
|
|
356
|
-
- ✅ LUÔN LUÔN kiểm tra exit code sau khi chạy script
|
|
357
|
-
- ✅ LUÔN LUÔN chạy `--dry-run` trước nếu hỗ trợ
|
|
358
|
-
- ✅ LUÔN LUÔN báo user kết quả (thành công LẪN thất bại)
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
### 📊 Tổng quan 7 Lớp Bảo Mật
|
|
362
|
-
|
|
363
|
-
```text
|
|
364
|
-
┌─────────────────────────────────────────┐
|
|
365
|
-
│ Tầng 7: Constraints (SKILL.md) │ ← Quy tắc cứng trong skill
|
|
366
|
-
│ Tầng 6: Safety Check (SKILL.md) │ ← Logic kiểm tra trước khi chạy
|
|
367
|
-
│ Tầng 5: Browser Security │ ← URL Allowlist + JS Policy
|
|
368
|
-
│ Tầng 4: Secure Mode + Dir Permissions │ ← Quyền file system
|
|
369
|
-
│ Tầng 3: Deny List │ ← Lệnh bị cấm
|
|
370
|
-
│ Tầng 2: Allow List │ ← Lệnh được phép
|
|
371
|
-
│ Tầng 1: Auto-Execute Mode │ ← Off/Auto/Turbo
|
|
372
|
-
└─────────────────────────────────────────┘
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
---
|
|
376
|
-
|
|
377
|
-
## 5. Template SKILL.md Với Script
|
|
378
|
-
|
|
379
|
-
```markdown
|
|
380
|
-
---
|
|
381
|
-
name: <tên-skill>
|
|
382
|
-
description: |
|
|
383
|
-
<Mô tả skill>. Sử dụng script `scripts/<tên>.py` để <hành động>.
|
|
384
|
-
Kích hoạt khi user nói "...", "...", "...".
|
|
385
|
-
---
|
|
386
|
-
|
|
387
|
-
# Goal
|
|
388
|
-
<Mục tiêu>
|
|
389
|
-
|
|
390
|
-
# Instructions
|
|
391
|
-
|
|
392
|
-
## Bước 0: 🛡️ Safety Check (nếu cần)
|
|
393
|
-
1. Xác định môi trường (dev/staging/prod)
|
|
394
|
-
2. Nếu production → Confirm từ user
|
|
395
|
-
|
|
396
|
-
## Bước 1: Thu thập tham số
|
|
397
|
-
1. Phân tích yêu cầu user
|
|
398
|
-
2. Trích xuất: <tham số 1>, <tham số 2>
|
|
399
|
-
|
|
400
|
-
## Bước 2: Thực thi Script
|
|
401
|
-
1. Chạy: `python scripts/<tên>.py --param1 <giá trị> --param2 <giá trị>`
|
|
402
|
-
2. Đọc output từ stdout
|
|
403
|
-
|
|
404
|
-
## Bước 3: Xử lý kết quả
|
|
405
|
-
1. Nếu exit code = 0 → Thành công → Hiển thị output cho user
|
|
406
|
-
2. Nếu exit code ≠ 0 → Lỗi → Phân tích stderr → Báo user
|
|
407
|
-
|
|
408
|
-
## Bảng ánh xạ tham số
|
|
409
|
-
|
|
410
|
-
| User nói | Cờ script | Giá trị |
|
|
411
|
-
| --- | --- | --- |
|
|
412
|
-
| "<phrase A>" | `--param1` | `<value A>` |
|
|
413
|
-
| "<phrase B>" | `--param2` | `<value B>` |
|
|
414
|
-
|
|
415
|
-
# Examples
|
|
416
|
-
|
|
417
|
-
## Ví dụ 1: Chạy thành công
|
|
418
|
-
**Input:** "<user request>"
|
|
419
|
-
**Lệnh được sinh:** `python scripts/<tên>.py --param1 X --param2 Y`
|
|
420
|
-
**Output:**
|
|
421
|
-
<Kết quả thành công>
|
|
422
|
-
|
|
423
|
-
## Ví dụ 2: Lỗi xảy ra
|
|
424
|
-
**Input:** "<user request có vấn đề>"
|
|
425
|
-
**Output:**
|
|
426
|
-
⚠️ Script báo lỗi: <mô tả lỗi>
|
|
427
|
-
💡 Gợi ý: <cách fix>
|
|
428
|
-
|
|
429
|
-
# Constraints
|
|
430
|
-
- 🚫 KHÔNG ĐƯỢC đọc mã nguồn script (dùng `--help`)
|
|
431
|
-
- 🚫 KHÔNG ĐƯỢC chạy script trên production mà không confirm
|
|
432
|
-
- ✅ LUÔN LUÔN kiểm tra exit code sau khi chạy script
|
|
433
|
-
- ✅ LUÔN LUÔN chạy `--dry-run` trước nếu có hỗ trợ
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
---
|
|
437
|
-
|
|
438
|
-
## 6. Viết Script Chuẩn Cho Skill
|
|
439
|
-
|
|
440
|
-
### Checklist script tốt
|
|
441
|
-
|
|
442
|
-
- [ ] Dùng `argparse` (Python) hoặc flags tương đương
|
|
443
|
-
- [ ] Có `--help` mô tả rõ ràng từng cờ
|
|
444
|
-
- [ ] Có `--dry-run` cho thao tác destructive
|
|
445
|
-
- [ ] Output qua stdout (khuyến khích JSON cho dữ liệu có cấu trúc)
|
|
446
|
-
- [ ] Error output qua stderr
|
|
447
|
-
- [ ] Exit code: `0` = thành công, `≠0` = lỗi
|
|
448
|
-
- [ ] Không hardcode credentials (dùng env vars hoặc config file)
|
|
449
|
-
- [ ] Có error handling (try/except, ||, set -e)
|
|
450
|
-
- [ ] Đọc input từ file hoặc stdin (không interactive prompts)
|
|
451
|
-
- [ ] Cross-platform compatible (hoặc ghi rõ OS requirement)
|
|
452
|
-
|
|
453
|
-
### Template Python Script
|
|
454
|
-
|
|
455
|
-
```python
|
|
456
|
-
#!/usr/bin/env python3
|
|
457
|
-
"""
|
|
458
|
-
<tên_script>.py — <mô tả ngắn>
|
|
459
|
-
|
|
460
|
-
Sử dụng:
|
|
461
|
-
python scripts/<tên_script>.py --help
|
|
462
|
-
python scripts/<tên_script>.py --param1 value1 --param2 value2
|
|
463
|
-
"""
|
|
464
|
-
|
|
465
|
-
import argparse
|
|
466
|
-
import sys
|
|
467
|
-
import json
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
def main():
|
|
471
|
-
parser = argparse.ArgumentParser(
|
|
472
|
-
description="<Mô tả script chi tiết>"
|
|
473
|
-
)
|
|
474
|
-
parser.add_argument('--input', required=True,
|
|
475
|
-
help='Đường dẫn file đầu vào')
|
|
476
|
-
parser.add_argument('--format', choices=['json', 'csv', 'text'],
|
|
477
|
-
default='json',
|
|
478
|
-
help='Định dạng output (mặc định: json)')
|
|
479
|
-
parser.add_argument('--dry-run', action='store_true',
|
|
480
|
-
help='Chỉ mô phỏng, không thay đổi gì')
|
|
481
|
-
parser.add_argument('--verbose', action='store_true',
|
|
482
|
-
help='Hiển thị thông tin chi tiết')
|
|
483
|
-
|
|
484
|
-
args = parser.parse_args()
|
|
485
|
-
|
|
486
|
-
try:
|
|
487
|
-
# === Logic chính ===
|
|
488
|
-
if args.verbose:
|
|
489
|
-
print(f"📌 Input: {args.input}", file=sys.stderr)
|
|
490
|
-
print(f"📌 Format: {args.format}", file=sys.stderr)
|
|
491
|
-
|
|
492
|
-
if args.dry_run:
|
|
493
|
-
print("⚠️ DRY RUN — Không có gì thực sự thay đổi.")
|
|
494
|
-
sys.exit(0)
|
|
495
|
-
|
|
496
|
-
# Xử lý...
|
|
497
|
-
result = {"status": "success", "message": "Hoàn thành!"}
|
|
498
|
-
|
|
499
|
-
# Output
|
|
500
|
-
if args.format == 'json':
|
|
501
|
-
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
502
|
-
else:
|
|
503
|
-
print(result['message'])
|
|
504
|
-
|
|
505
|
-
sys.exit(0)
|
|
506
|
-
|
|
507
|
-
except FileNotFoundError:
|
|
508
|
-
print(f"❌ Không tìm thấy file: {args.input}", file=sys.stderr)
|
|
509
|
-
sys.exit(1)
|
|
510
|
-
except Exception as e:
|
|
511
|
-
print(f"❌ Lỗi: {e}", file=sys.stderr)
|
|
512
|
-
sys.exit(2)
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
if __name__ == '__main__':
|
|
516
|
-
main()
|
|
517
|
-
```
|
|
518
|
-
|
|
519
|
-
### Template Bash Script
|
|
520
|
-
|
|
521
|
-
```bash
|
|
522
|
-
#!/bin/bash
|
|
523
|
-
# <tên_script>.sh — <mô tả ngắn>
|
|
524
|
-
#
|
|
525
|
-
# Sử dụng:
|
|
526
|
-
# ./scripts/<tên_script>.sh [options]
|
|
527
|
-
#
|
|
528
|
-
# Options:
|
|
529
|
-
# -e, --env Môi trường (dev/staging/prod)
|
|
530
|
-
# -d, --dry-run Chỉ mô phỏng
|
|
531
|
-
# -h, --help Hiển thị hướng dẫn
|
|
532
|
-
|
|
533
|
-
set -euo pipefail
|
|
534
|
-
|
|
535
|
-
# === Defaults ===
|
|
536
|
-
ENV="dev"
|
|
537
|
-
DRY_RUN=false
|
|
538
|
-
|
|
539
|
-
# === Parse Arguments ===
|
|
540
|
-
while [[ $# -gt 0 ]]; do
|
|
541
|
-
case $1 in
|
|
542
|
-
-e|--env)
|
|
543
|
-
ENV="$2"
|
|
544
|
-
shift 2
|
|
545
|
-
;;
|
|
546
|
-
-d|--dry-run)
|
|
547
|
-
DRY_RUN=true
|
|
548
|
-
shift
|
|
549
|
-
;;
|
|
550
|
-
-h|--help)
|
|
551
|
-
echo "Usage: $0 [--env dev|staging|prod] [--dry-run]"
|
|
552
|
-
echo ""
|
|
553
|
-
echo "Options:"
|
|
554
|
-
echo " -e, --env Môi trường deploy (default: dev)"
|
|
555
|
-
echo " -d, --dry-run Chỉ mô phỏng"
|
|
556
|
-
echo " -h, --help Hiển thị help"
|
|
557
|
-
exit 0
|
|
558
|
-
;;
|
|
559
|
-
*)
|
|
560
|
-
echo "❌ Unknown option: $1" >&2
|
|
561
|
-
exit 1
|
|
562
|
-
;;
|
|
563
|
-
esac
|
|
564
|
-
done
|
|
565
|
-
|
|
566
|
-
# === Main ===
|
|
567
|
-
echo "🚀 Environment: $ENV"
|
|
568
|
-
|
|
569
|
-
if [ "$DRY_RUN" = true ]; then
|
|
570
|
-
echo "⚠️ DRY RUN — Không thay đổi gì."
|
|
571
|
-
exit 0
|
|
572
|
-
fi
|
|
573
|
-
|
|
574
|
-
# Xử lý chính...
|
|
575
|
-
echo "✅ Done!"
|
|
576
|
-
exit 0
|
|
577
|
-
```
|
|
578
|
-
|
|
579
|
-
---
|
|
580
|
-
|
|
581
|
-
## 7. Quyết Định: Khi Nào CẦN Script, Khi Nào KHÔNG?
|
|
582
|
-
|
|
583
|
-
| Tình huống | Cần Script? | Lý do |
|
|
584
|
-
| --- | --- | --- |
|
|
585
|
-
| Tính toán phức tạp (tài chính, thống kê) | ✅ CẦN | AI hay tính sai số lớn |
|
|
586
|
-
| Đọc/ghi file hệ thống | ✅ CẦN | AI không trực tiếp truy cập filesystem |
|
|
587
|
-
| Gọi API bên ngoài | ✅ CẦN | Script xử lý auth, retry, error |
|
|
588
|
-
| Validate dữ liệu phức tạp (regex, schema) | ✅ CẦN | Script chính xác hơn AI |
|
|
589
|
-
| Deploy / CI/CD | ✅ CẦN | Script chạy npm, docker, etc. |
|
|
590
|
-
| Sinh text/markdown | ❌ KHÔNG | AI giỏi việc này rồi |
|
|
591
|
-
| Tư vấn / phân tích logic | ❌ KHÔNG | Đây là thế mạnh AI |
|
|
592
|
-
| Format / restructure text | ❌ KHÔNG | AI xử lý tốt |
|
|
593
|
-
| Q&A / hỏi đáp | ❌ KHÔNG | AI sinh ra để làm việc này |
|