Claude Code - ทุกอย่างที่ปรับแต่งได้ซึ่งเอกสารไม่ได้บอกไว้
(buildingbetter.tech)- Claude Code 2.1.87 มีการตั้งค่าที่ไม่ได้ถูกบันทึกไว้ในเอกสารจำนวนมาก และสามารถแยกใช้ Hooks, Skills, Agents ตามรายบุคคลและรายโปรเจกต์ผ่านไฟล์ใน
.claude/ได้ - Hook ไม่ได้ทำงานแค่ด้วย stdin JSON และ exit code เท่านั้น แต่ยังใช้ ฟิลด์ JSON แยกตาม event จาก stdout เพื่อแก้ไขคำสั่ง ตัดสินสิทธิ์ ฉีด context และเฝ้าดูไฟล์ได้ด้วย
- สามารถใช้ฟิลด์ Hook ที่ไม่มีในเอกสารอย่าง
once,async,asyncRewakeเพื่อสร้างการทำงานแบบรันครั้งเดียว บันทึก audit log เบื้องหลัง และโฟลว์บล็อกความปลอดภัยแบบ asynchronous ได้ - Skills และ Agents ควบคุม model, effort, scope Hook, การมอบหมายให้ Agent, หน่วยความจำถาวร, การละเว้น CLAUDE.md และ dependency ของ MCP ผ่าน frontmatter ที่ซ่อนอยู่
- Auto Mode, หน่วยความจำอัตโนมัติ, Dream, Magic Docs, permission glob และ
context: forkช่วยจัด Claude Code ให้ใกล้เคียงกับ สภาพแวดล้อมการพัฒนาแบบเรียนรู้ได้ มากขึ้น
เวอร์ชันอ้างอิงและตำแหน่งไฟล์
- เนื้อหานี้อ้างอิงจาก
@anthropic-ai/claude-code@2.1.87และฟีเจอร์ที่ไม่ได้บันทึกไว้ในเอกสารอาจเปลี่ยนแปลงได้ระหว่างแต่ละรีลีส - ฟิลด์ที่มีคำว่า
EXPERIMENTALอยู่ในชื่อ คือฟิลด์ที่วิศวกรของ Anthropic ระบุว่าไม่เสถียร และอาจถูกลบหรือเปลี่ยนชื่อได้ - ตำแหน่งไฟล์ตั้งค่า
- การตั้งค่าส่วนบุคคล:
~/.claude/settings.json - การตั้งค่าโปรเจกต์:
.claude/settings.json
- การตั้งค่าส่วนบุคคล:
- ตำแหน่ง Skills
- ส่วนบุคคล:
~/.claude/skills/<name>/SKILL.md - โปรเจกต์:
.claude/skills/<name>/SKILL.md
- ส่วนบุคคล:
- ตำแหน่ง Agents
- ส่วนบุคคล:
~/.claude/agents/<name>.md - โปรเจกต์:
.claude/agents/<name>.md
- ส่วนบุคคล:
- โดยทั่วไปควรวางสคริปต์ Hook ไว้ที่
~/.claude/hooks/และหากต้องการให้รันได้ต้องใช้chmod +x - ไฟล์
.claude/ระดับโปรเจกต์สามารถ commit เข้า Git เพื่อแชร์กับทีมได้ ส่วนไฟล์ส่วนบุคคลใต้~/.claude/จะมีผลเฉพาะกับผู้ใช้คนนั้น
Hook สามารถเปลี่ยนพฤติกรรมของ Claude Code ได้ด้วย stdout JSON
- เอกสารทางการกล่าวถึงเพียงโฟลว์ที่ Hook รับ JSON ทาง stdin และบล็อกงานด้วย exit code 2 แต่ในการใช้งานจริง สามารถเปลี่ยนพฤติกรรมของ Claude Code แบบเรียลไทม์ผ่าน ฟิลด์ JSON แยกตาม event จาก stdout ได้
-
ฟิลด์ที่ส่งกลับได้จาก
PreToolUseupdatedInput: เขียน input ใหม่ก่อนเรียกใช้เครื่องมือเพื่อเปลี่ยนคำสั่งได้permissionDecision: บังคับallowหรือdenyได้โดยไม่ต้องถามผู้ใช้permissionDecisionReason: แสดงเหตุผลของการตัดสินใจใน UI ได้additionalContext: ฉีดข้อความเข้าไปใน conversation context ได้
-
ฟิลด์ที่ส่งกลับได้จาก
SessionStartwatchPaths: ตั้งค่าการเฝ้าดูไฟล์อัตโนมัติเพื่อ trigger eventFileChangedได้initialUserMessage: เพิ่มเนื้อหาก่อนข้อความแรกของผู้ใช้ใน session ได้additionalContext: ฉีด context ที่คงอยู่ตลอดทั้ง session ได้
-
ฟิลด์ที่ส่งกลับได้จาก
PostToolUseupdatedMCPToolOutput: แก้ไขผลตอบกลับของเครื่องมือ MCP ที่ Claude มองเห็นได้additionalContext: ฉีด context หลังการเรียกใช้เครื่องมือได้
-
ฟิลด์ที่ส่งกลับได้จาก
PermissionRequestdecision: อนุญาตหรือปฏิเสธแบบ programmatic ได้ร่วมกับupdatedInputหรือupdatedPermissions
-
Hook ที่เปลี่ยน
git pushให้เป็น--dry-runอัตโนมัติ- ใน Hook แบบ
PreToolUseสามารถตรวจสอบคำสั่ง Bash และหากมีgit pushก็ใช้updatedInputเพื่อเติม--dry-runต่อท้ายคำสั่งได้ - Claude จะมองว่าได้รัน
git push origin mainแต่ Hook จะเปลี่ยนเป็นgit push origin main --dry-runก่อนรันจริง
- ใน Hook แบบ
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/dry-run-pushes.sh"
}]
}]
}
}
#!/bin/bash
INPUT=$(jq -r '.tool_input.command' < /dev/stdin)
if echo "$INPUT" | grep -q 'git push'; then
jq -n --arg cmd "$INPUT --dry-run" '{"updatedInput": {"command": $cmd}}'
fi
-
Hook ที่ฉีดการเฝ้าดูไฟล์และ Git context ตอนเริ่ม session
- Hook แบบ
SessionStartสามารถกำหนดให้package.json,.env,tsconfig.jsonเป็นเป้าหมายการเฝ้าดู และใส่ branch ปัจจุบันกับจำนวนไฟล์ที่ยังไม่ได้ commit ลงใน session context ได้
- Hook แบบ
{
"hooks": {
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/session-context.sh",
"statusMessage": "Loading project context..."
}]
}]
}
}
#!/bin/bash
BRANCH=$(git branch --show-current 2>/dev/null)
CHANGES=$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ')
jq -n \
--arg branch "$BRANCH" \
--arg changes "$CHANGES" \
'{
"watchPaths": ["package.json", ".env", "tsconfig.json"],
"additionalContext": "Current branch: \($branch). Uncommitted changes: \($changes) files."
}'
-
Hook ที่อนุมัติคำสั่ง Bash แบบอ่านอย่างเดียวอัตโนมัติ
- คำสั่งอย่าง
ls,cat,echo,pwd,whoami,date,git status,git log,git diffสามารถปล่อยผ่านได้โดยไม่ต้องให้ผู้ใช้ยืนยัน ด้วยpermissionDecision: "allow"
- คำสั่งอย่าง
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/auto-approve-readonly.sh"
}]
}]
}
}
#!/bin/bash
CMD=$(jq -r '.tool_input.command' < /dev/stdin)
if echo "$CMD" | grep -qE '^(ls|cat|echo|pwd|whoami|date|git status|git log|git diff)'; then
echo '{"permissionDecision": "allow", "permissionDecisionReason": "Safe read-only command"}'
fi
3 ฟิลด์การตั้งค่า Hook ที่ไม่มีในเอกสาร
- ฟิลด์ Hook ที่มีการทำเอกสารไว้คือ
type,command,matcher,timeout,if,statusMessageแต่ตัว parser ในซอร์สโค้ดรับonce,async,asyncRewakeได้ด้วย -
once: true- รัน Hook เพียงครั้งเดียวอย่างพอดีแล้วลบออกอัตโนมัติ จึงเหมาะกับการตั้งค่าเริ่มต้นของเซสชันแรก
- สามารถสร้าง flow ที่ถ้าไม่มี
.envก็ให้คัดลอก.env.exampleมาเป็น.envและหลังจากนั้นจะไม่รันอีก
{
"hooks": {
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "[ -f .env ] || cp .env.example .env && echo 'Created .env from template'",
"once": true,
"statusMessage": "First-time setup..."
}]
}]
}
}
-
async: true- รัน Hook ในเบื้องหลังโดยไม่บล็อกการทำงานต่อของ Claude
- ใช้บันทึกทุกคำสั่ง Bash ลงใน
~/.claude/audit.jsonlได้โดยไม่เพิ่มความหน่วงให้เซสชัน
{
"hooks": {
"PostToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "jq '{timestamp: now, command: .tool_input.command, session: .session_id}' < /dev/stdin >> ~/.claude/audit.jsonl",
"async": true
}]
}]
}
}
-
asyncRewake: true- ในกรณีปกติจะทำงานเบื้องหลังเหมือน
asyncแต่ถ้าจบด้วย exit code 2 จะปลุกโมเดลกลับขึ้นมาอีกครั้งและบล็อกงาน - สามารถตรวจรูปแบบ
password,secret,api_keyที่ hardcode อยู่ในทุกไฟล์ที่ Claude เขียน และบล็อกได้เมื่อพบ
- ในกรณีปกติจะทำงานเบื้องหลังเหมือน
{
"hooks": {
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/scan-secrets.sh",
"asyncRewake": true,
"statusMessage": "Scanning for secrets..."
}]
}]
}
}
#!/bin/bash
FILE=$(jq -r '.tool_input.file_path // .tool_response.filePath' < /dev/stdin)
if grep -qE '(password|secret|api_key)\s*=' "$FILE" 2>/dev/null; then
exit 2
fi
exit 0
ฟิลด์ที่ซ่อนอยู่ของ Skill frontmatter
- ในเอกสารมีการพูดถึง
name,description,allowed-tools,argument-hint,when_to_use,contextแต่ parser จริงรองรับฟิลด์เพิ่มเติมอีก 6 รายการ -
model- สามารถเปลี่ยนโมเดลที่ใช้รัน Skill ได้ โดยงานที่เร็วและประหยัดอาจใช้
haikuส่วนการวิเคราะห์ที่ซับซ้อนใช้opusได้
- สามารถเปลี่ยนโมเดลที่ใช้รัน Skill ได้ โดยงานที่เร็วและประหยัดอาจใช้
---
name: quick-lint
description: Fast lint check using the cheapest model
model: haiku
effort: low
allowed-tools: Bash, Read
argument-hint: "[file]"
---
Run the project linter on: $ARGUMENTS
Detect the linter from config (eslint, ruff, clippy) and run it. Report only errors, not warnings.
-
effort- ปรับระดับที่โมเดลจะคิดอย่างลึกซึ้ง โดยค่าคือ
low,medium,high,max - ภายในจะถูกแมปเข้ากับระบบ effort ที่ควบคุมความลึกของการอนุมานในแต่ละคำตอบ
- ปรับระดับที่โมเดลจะคิดอย่างลึกซึ้ง โดยค่าคือ
-
hooks- สามารถกำหนด Hook แบบมีขอบเขต ที่จะลงทะเบียนเฉพาะตอน Skill ถูกเปิดใช้งาน และยกเลิกเมื่อเสร็จสิ้น
- ใช้ในลักษณะเช่น เช็ก type แบบ synchronous ทุกครั้งที่เขียนไฟล์ TypeScript และรัน lint ในเบื้องหลัง
---
name: strict-typescript
description: Write TypeScript with type checking on every save
allowed-tools: Bash, Read, Write, Edit, Grep, Glob
hooks:
PostToolUse:
- matcher: "Write|Edit"
hooks:
- type: command
command: "~/.claude/hooks/typecheck-on-save.sh"
statusMessage: "Type checking..."
- type: command
command: "~/.claude/hooks/lint-on-save.sh"
async: true
---
Write TypeScript with strict enforcement. Every file you touch gets type-checked and linted automatically.
$ARGUMENTS
-
agent- สามารถมอบหมายการรัน Skill ไปยัง Agent แบบกำหนดเองได้
---
name: deep-review
description: Thorough security review delegated to the review agent
agent: security-review
---
Review the following: $ARGUMENTS
-
disable-model-invocation: true- บล็อกการเรียกอัตโนมัติ และให้รันได้เฉพาะเมื่อเรียกแบบชัดเจนด้วย
/skill-nameเท่านั้น จึงเหมาะกับ Skill ที่มีความเสี่ยงต่อการทำลายข้อมูล
- บล็อกการเรียกอัตโนมัติ และให้รันได้เฉพาะเมื่อเรียกแบบชัดเจนด้วย
-
shell: bash- ระบุเชลล์ที่จะใช้ในการรัน
ฟิลด์ที่ซ่อนอยู่ของ Agent frontmatter
- Agent แบบกำหนดเองใน
.claude/agents/ก็รองรับฟิลด์ frontmatter ที่ไม่มีในเอกสารเช่นกัน -
color- สามารถตั้งค่าสี UI เป็นหนึ่งใน
red,orange,yellow,green,blue,purple,pink,gray - ช่วยให้แยกแยะด้วยสายตาได้เมื่อมีการรัน Agent หลายตัว
- สามารถตั้งค่าสี UI เป็นหนึ่งใน
-
memory- มอบ หน่วยความจำถาวร ให้กับ Agent ระหว่างการเรียกใช้งานแต่ละครั้ง
user: คงอยู่แบบโกลบอลครอบคลุมทุกโปรเจ็กต์project: คงอยู่แยกตามโปรเจ็กต์local: เป็นหน่วยความจำส่วนตัวรายโปรเจ็กต์ที่ถูกยกเว้นจาก Git- ผู้ตรวจสอบด้านความปลอดภัยสามารถติดตามสิ่งที่เคยพบในอดีตได้ และผู้รีวิวโค้ดสามารถจดจำแพตเทิร์นของผู้ใช้ข้ามเซสชันได้
---
name: codebase-guide
description: Answer questions about the codebase, learning more with each session
tools: [Read, Grep, Glob, Bash]
color: green
memory: project
---
You are a codebase guide with persistent memory. Check your memory first before exploring the code.
-
omitClaudeMd: true- ข้ามการโหลดลำดับชั้นคำสั่งของ
CLAUDE.mdจึงเหมาะกับผู้รีวิวแบบ “fresh eyes” ที่มองตามมาตรฐานอุตสาหกรรมแทนธรรมเนียมของโปรเจ็กต์
- ข้ามการโหลดลำดับชั้นคำสั่งของ
---
name: fresh-eyes
description: Review code without project-specific biases
tools: [Read, Grep, Glob]
omitClaudeMd: true
effort: high
color: blue
---
Review this code purely from first principles. You have no project context. Focus on correctness, security, performance, and readability by industry standards.
-
criticalSystemReminder_EXPERIMENTAL- ฉีดข้อความสั้นกลับเข้าไปเป็น system reminder ในทุกเทิร์น และยังคงอยู่ในคอนเท็กซ์แม้หลังจากมีการบีบอัดบทสนทนา
- ชื่อฟิลด์มี
EXPERIMENTALอยู่ในตัว จึงยังไม่เสถียร และเหมาะจะใช้เป็นตัวเตือนด้านความปลอดภัยเสริม ไม่ใช่โครงสร้างพื้นฐานหลัก
---
name: prod-deployer
description: Manages production deployments with strict safety checks
tools: [Bash, Read, Grep]
color: red
criticalSystemReminder_EXPERIMENTAL: "Always run migrations with --dry-run first. Never skip the staging verification step."
---
-
requiredMcpServers- ระบุแพตเทิร์นชื่อของ MCP server ที่จำเป็น และหากไม่มีเซิร์ฟเวอร์นั้น Agent จะไม่ปรากฏ
- ช่วยป้องกันไม่ให้ Agent ที่ยังไม่มี dependency พร้อมถูกโหลดขึ้นมา
ตัวจัดประเภท Auto Mode รับคำอธิบายสภาพแวดล้อมเป็นภาษาธรรมชาติ
- ฟิลด์
autoModeในsettings.jsonใช้ตั้งค่าตัวจัดประเภทการอนุมัติอัตโนมัติที่ภายใน Anthropic เรียกว่า “YOLO Classifier” - แพตเทิร์น
allowจะได้รับการอนุมัติอัตโนมัติ และแพตเทิร์นsoft_denyจะต้องให้ยืนยันเสมอ - อาร์เรย์
environmentไม่ใช่แพตเทิร์น แต่เป็น คอนเท็กซ์ภาษาธรรมชาติ ที่ตัวจัดประเภทจะอ่าน เพื่ออธิบายสภาพแวดล้อมของโปรเจ็กต์และใช้ประกอบการตัดสินความปลอดภัยของคำสั่งที่กำกวม
{
"autoMode": {
"allow": [
"Bash(npm test)",
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Read",
"Grep",
"Glob"
],
"soft_deny": [
"Bash(git push *)",
"Bash(rm *)",
"Write(.env*)"
],
"environment": [
"NODE_ENV=development",
"This is a local dev machine with no production database access",
"All Docker containers use isolated networks",
"The test suite is safe to run repeatedly, it uses a dedicated test database"
]
}
}
- ประโยคอย่าง
This project uses Docker, all commands run in containersจะถูกใช้เพื่อช่วยให้ตัวจัดประเภทเข้าใจสภาพแวดล้อม No production accessทำให้ตอบสนองต่อการทำงานแบบทำลายล้างอย่างระมัดระวังน้อยลง และTest database is isolatedทำหน้าที่เป็นสัญญาณว่าการรันทดสอบปลอดภัยเสมอ
ลูปการผสานรวมระหว่างหน่วยความจำอัตโนมัติกับ Dream
- หากเปิด
autoMemoryEnabledและautoDreamEnabledในsettings.jsonระบบพัฒนาตัวเองของ Claude Code จะถูกเปิดใช้งาน
{
"autoMemoryEnabled": true,
"autoDreamEnabled": true
}
-
autoMemoryEnabled- หลังจบแต่ละบทสนทนา background Agent จะดึงข้อมูลจากเซสชันที่มีคุณค่าพอจะเก็บไว้ระยะยาว
- จะบันทึกความชอบของผู้ใช้ แพตเทิร์นของโค้ดเบส และสิ่งที่ตัดสินใจไว้ ในรูปแบบมาตรฐานของ memory frontmatter ลงที่
~/.claude/projects/<path>/memory/
-
autoDreamEnabled- ทุก 24 ชั่วโมง หากมีเซสชันสะสมอย่างน้อย 5 เซสชัน background Agent จะตรวจทาน transcript ของเซสชันก่อนหน้าเพื่อรวมหน่วยความจำเข้าด้วยกัน
- จะทำการรวมข้อมูลซ้ำ แก้ความขัดแย้ง แปลงวันที่แบบสัมพัทธ์ให้เป็นวันที่แบบสัมบูรณ์ และลบรายการที่ล้าสมัย
- เมื่อเปิดสองค่านี้ร่วมกัน จะเกิด ลูปการเรียนรู้ ที่เซสชันสร้างหน่วยความจำ, Dream รวมหน่วยความจำ, และหน่วยความจำที่รวมแล้วจะถูกสะท้อนในเซสชันถัดไป
- หลังผ่านไปหลายสัปดาห์ อาจเห็นผลว่า Claude Code จดจำความชอบ ธรรมเนียม และแพตเทิร์นที่ใช้บ่อยของผู้ใช้ได้ โดยไม่ต้องมีการฝึกโมเดลใหม่
รูปแบบ Magic Docs
- Magic Docs ถูกตรวจจับด้วยเรกิวลาร์เอ็กซ์เพรสชัน
/^#\s*MAGIC\s+DOC:\s*(.+)$/im - ต้องเป็นหัวข้อ H1 เท่านั้น และไม่สนตัวพิมพ์เล็ก-ใหญ่
- บรรทัดถัดไปสามารถใส่คำสั่งตัวเอียงที่ครอบด้วย
_underscores_หรือ*asterisks*เพื่อจำกัดขอบเขตที่ Agent อัปเดตจะโฟกัส
# MAGIC DOC: API Endpoint Reference
_Only document public REST endpoints. Include method, path, request body, response schema, and auth requirements._
## Endpoints
(content auto-maintained by Claude Code)
- หากไม่มีคำสั่ง Agent จะพยายามอัปเดตทุกเนื้อหา
- หากมีคำสั่ง จะทำตามขอบเขตอย่าง
only track public endpointsหรือfocus on breaking changes - Agent สำหรับอัปเดตจะทำงานอยู่เบื้องหลัง และถูกจำกัดให้แก้ไขได้เฉพาะไฟล์นั้นไฟล์เดียว
- หากลบ header ออก การติดตามจะหยุดโดยอัตโนมัติ
ไวยากรณ์กฎสิทธิ์ทั้งหมด
- ในเอกสารมีตัวอย่างพื้นฐานอย่าง
Bash(git *)แต่ภาษาของแพตเทิร์นที่ใช้จริงครอบคลุม Bash, พาธไฟล์ และเครื่องมือ MCP ได้กว้างขวาง
Bash(npm *) # wildcard after "npm "
Bash(git commit *) # specific subcommand
Read(*.ts) # file extension
Read(src/**/*.ts) # recursive directory with extension
Write(src/**) # recursive, all files
mcp__slack # all tools on slack server
mcp__slack__* # explicit wildcard (same effect)
mcp__slack__post_message # specific tool
Bash(npm:*) # legacy colon prefix (word boundary)
*จะจับคู่ภายในขอบเขตแบบเดียวกับ shell glob และ**จะจับคู่ไดเรกทอรีแบบ recursive- สิทธิ์ของเครื่องมือ MCP ใช้รูปแบบ ขีดล่างคู่ คือ
mcp__<server>__<tool> - ฟิลด์
ifของ Hook ก็ใช้ไวยากรณ์เดียวกัน และเป็น glob ไม่ใช่ regex
{
"permissions": {
"allow": [
"Bash(npm *)", "Bash(git status)", "Bash(git diff *)",
"Read(src/**)", "Read(tests/**)", "Grep", "Glob",
"mcp__database__query"
],
"deny": [
"Bash(rm -rf *)", "Write(/etc/**)", "Write(.env*)",
"mcp__slack__delete_*"
],
"ask": [
"Bash(git push *)", "Write(*.json)", "Write(*.lock)",
"mcp__slack__post_message"
]
}
}
context: fork และผลกระทบของการเลือกโมเดลต่อแคช
- หากตั้งค่า
context: forkให้กับ Skill ระบบจะรันเป็น forked subagent เบื้องหลัง - Fork จะแชร์ prompt cache ของ parent ผ่าน typed contract ที่ชื่อ
CacheSafeParamsและสร้าง API request prefix ที่เหมือนกันทุกไบต์เพื่อเพิ่มอัตราการ cache hit - หากกำหนดโมเดลอื่นให้กับ Forked Skill prefix จะเปลี่ยนไปและอาจทำให้แคชหลุด
- หากบทสนทนาหลักเป็น Opus แต่ fork เป็น Haiku prefix จะแตกต่างกัน ทำให้เกิด cache miss และต้องจ่ายต้นทุนเต็ม
- ใน Forked Skill ควรละฟิลด์
modelออก หรือใช้model: inheritเพื่อคงแคชไว้ context: forkเหมาะกับงานหนักอย่างการสแกนความปลอดภัย การวิเคราะห์ dependency การสร้างเอกสาร หรือการรัน test suite โดยบทสนทนาหลักยังคงตอบสนองได้ดี
---
name: full-audit
description: Comprehensive codebase audit running in the background
context: fork
allowed-tools: Bash, Read, Grep, Glob, WebSearch
effort: high
---
Run a comprehensive audit:
- Security scan (grep for dangerous patterns, check dependencies for CVEs)
- Code quality (duplicated logic, dead code, missing error handling)
- Test coverage (untested critical paths)
- Dependency health (outdated packages, unused deps, license issues)
Write a detailed report to /tmp/audit-report.md when complete.
ตัวอย่างการผสานฟีเจอร์
-
ผู้รีวิวโค้ดที่มีหน่วยความจำถาวรและ Scope Hook
- Agent อ่านหน่วยความจำแยกตามแต่ละโค้ดเบส รีวิวทั้งแพตเทิร์นที่เคยพบในอดีตและปัญหาใหม่ร่วมกัน แล้วบันทึกสิ่งที่ค้นพบหลังจากนั้นกลับเข้าไปในหน่วยความจำอีกครั้ง
- เมื่อผ่านการรีวิวหลายครั้ง จะช่วยจับปัญหาซ้ำเฉพาะโปรเจกต์ที่ผู้รีวิวทั่วไปอาจมองข้ามได้
---
name: reviewer
description: Code reviewer that learns your codebase patterns over time
tools: [Read, Grep, Glob, Bash]
effort: high
color: yellow
memory: project
hooks:
PostToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "~/.claude/hooks/log-review.sh"
async: true
---
Before reviewing, read your memory for past findings on this codebase.
Review git diff HEAD~1 for:
- Patterns you've flagged before (check memory)
- New issues worth flagging
- Resolved issues from past reviews
After review, save to memory:
- New patterns found (type: feedback)
- Recurring issues (type: project)
End with VERDICT: PASS, FAIL, or NEEDS_REVIEW.
-
การตั้งค่าเซสชันที่ผสานการเฝ้าดูไฟล์กับตาข่ายความปลอดภัย
asyncRewake- เมื่อเริ่มเซสชัน ให้โหลดคอนเท็กซ์ของโปรเจกต์ อนุมัติคำสั่ง Bash แบบอ่านอย่างเดียวโดยอัตโนมัติทันที และบล็อกคำสั่งอันตรายด้วยการตรวจสอบความปลอดภัยแบบอะซิงก์
- คำสั่งแบบอ่านอย่างเดียวจะผ่านได้อย่างรวดเร็ว คำสั่งอันตรายจะถูกบล็อก ส่วนที่เหลือจะเป็นไปตามโฟลว์สิทธิ์ปกติ
{
"hooks": {
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/session-context.sh",
"statusMessage": "Loading project context..."
}]
}],
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/auto-approve-readonly.sh"
}, {
"type": "command",
"command": "~/.claude/hooks/block-dangerous.sh",
"asyncRewake": true,
"statusMessage": "Safety check..."
}]
}]
}
}
#!/bin/bash
CMD=$(jq -r '.tool_input.command' < /dev/stdin)
echo "$CMD" | grep -qE '(rm -rf /|sudo rm|chmod 777|> /dev/)' && exit 2 || exit 0
-
การรีวิวสถาปัตยกรรมที่ผสาน model override, การควบคุม effort และการมอบหมายให้ Agent
- ระบุการวิเคราะห์เชิงลึกด้วย
effort: max, มอบหมายให้ Agent เฉพาะทาง และลดอิทธิพลของแนวปฏิบัติเดิมของโปรเจกต์ด้วยomitClaudeMd: trueของ Agent นั้น
- ระบุการวิเคราะห์เชิงลึกด้วย
---
name: architecture-review
description: Deep architecture review using max effort, delegated to fresh-eyes agent
agent: fresh-eyes
effort: max
---
Review the architecture of this project. Ignore existing conventions (the agent has omitClaudeMd: true).
Focus on: $ARGUMENTS
Evaluate structural decisions, dependency graph health, separation of concerns, and scalability characteristics.
ความหมายและข้อจำกัด
- ระบบ Hook ที่มีฟิลด์การตอบสนองแยกตามอีเวนต์ ทำงานเป็น เลเยอร์มิดเดิลแวร์ที่ตั้งโปรแกรมได้ สำหรับการใช้งานเครื่องมือ AI
- หน่วยความจำถาวรของ Agent ทำให้สามารถสร้างผู้เชี่ยวชาญ AI ที่สั่งสมประสบการณ์ข้ามเซสชันได้
- ระบบผสานรวม Dream มอบโครงสร้างที่เรียนรู้จากประสบการณ์ในเซสชันได้โดยไม่ต้องฝึกโมเดลใหม่
- ตัวจำแนก Auto Mode รับคำอธิบายสภาพแวดล้อมเป็นภาษาธรรมชาติและนำไปใช้ประกอบการตัดสินด้านความปลอดภัย
- ฟีเจอร์เหล่านี้ไม่ใช่การตั้งค่าที่ซ่อนอยู่หรือ easter egg แต่เป็นฟังก์ชันพื้นฐานสำหรับสภาพแวดล้อมการพัฒนา AI ที่ต่อเนื่อง เรียนรู้ได้ และทำงานอัตโนมัติได้ ซึ่งมีอยู่แล้วในแพ็กเกจ npm ปัจจุบัน
ต้องการติดตามหัวข้อเทคโนโลยีที่คัดสรรต่อไปไหม
ติดตามช่อง Telegram @GeekNewsTH
1 ความคิดเห็น
ความเห็นจาก Hacker News
ลองเช็กด้วย Pangram แล้ว ดูเหมือนว่าเป็นบทความที่ AI สร้างขึ้นอย่างชัดเจน
น่าแปลกที่ได้คำแนะนำเยอะขนาดนี้ และก็สงสัยว่าคนอ่านบทความกันจริงหรือเปล่า รู้ว่า @dang ตั้งกฎเรื่องคอนเทนต์ที่สร้างด้วย AI ไว้กับคอมเมนต์แล้ว แต่ยังลังเลจะใช้กับบทความอยู่ ส่วนตัวอยากให้มีธงแจ้งรายงานในบทความด้วย จะได้ไม่ต้องเสียเวลากับงานคุณภาพต่ำแบบนี้
ทั้งหมดนี้มีเอกสารอยู่แล้ว [1]
Onceก็มีเอกสาร [2] และasyncกับasyncRewakeก็มีเอกสารเหมือนกัน [3] frontmatter ของ Skills ก็มีเอกสารครบถ้วน [4] และสตริงสภาพแวดล้อมของ Automode ก็อยู่ในเอกสาร [5]บทความนี้เป็นแค่ คลิกเบตที่ AI เขียนล้วนๆ เลยแปลกใจที่คนที่นี่ตอบรับดีขนาดนี้
[1] https://code.claude.com/docs/en/hooks#pretooluse-decision-co...
[2] https://code.claude.com/docs/en/hooks#common-fields
[3] https://code.claude.com/docs/en/hooks#command-hook-fields
[4] https://code.claude.com/docs/en/skills#frontmatter-reference
[5] https://code.claude.com/docs/en/auto-mode-config#define-trus...
บทความนี้เป็นโพสต์เมื่อ 2 เดือนก่อน ดังนั้นบางส่วนจึงเก่าแล้ว และบางฟีเจอร์ก็มีเอกสารแล้ว
ตัวอย่างเช่น เอกสาร auto mode อยู่ที่นี่: https://code.claude.com/docs/en/auto-mode-config#define-trus...
แพ็กเกจ
claudeออกรุ่นใหม่สัปดาห์ละ 10 เวอร์ชัน และยังมีโมเดลใหม่ทุกไม่กี่เดือน ดังนั้นไม่ควรพึ่งพาลูกเล่นที่ไม่มีเอกสารรอบๆ มันมันมีโอกาสสูงที่จะเปลี่ยน พัง และทำให้การตั้งค่าที่ละเอียดเกินไปใช้ไม่ได้
เหมือนตอนที่ออก 1M Opus แล้วเอาตัวเลือก “clear context and execute plan” ออก พร้อมบอกว่า “context window ไม่ใช่ปัญหาอีกต่อไป”
ฉันไม่ได้ออกแบบคำสั่ง Claude ใหม่ทุกรีลีส แต่บางรีลีสก็ควรตรวจว่าคำสั่งเดิมยังเข้ากับโมเดลปัจจุบันไหม และมันก็สร้างความต่างที่เห็นได้ชัดจริงๆ
จำนวนฟีเจอร์ของ Claude Code มีมากจนหายใจไม่ทั่วท้อง ถ้าไปในจังหวะนี้ พระสันตะปาปาคนต่อไปคงมาจาก Anthropic
วิธีแบบนี้ดูยากที่จะกลายเป็นผลิตภัณฑ์ที่ผ่านการคิดมาดีและมีเสถียรภาพพอ
มันขึ้นว่า “Honest status” บอกว่าจะอธิบายตรงๆ ว่าทำไมไม่ใช่ 100% และทำไมถึงเป็นเส้นทางที่ยาวกว่า https://github.com/user-attachments/assets/961eff6c-0060-45d...
ฉันแค่อยากให้ Claude Code ไม่ยอมแพ้ก่อนทำงานสำเร็จ มันน่าหงุดหงิดมาก ใช้ทั้ง
/goalหรือultracodeใหม่ก็ยังยอมแพ้อยู่ดี โปรเจกต์ของฉันค่อนข้างซับซ้อนก็จริง (https://github.com/mohsen1/tsz) แต่ Codex ไม่มีปัญหาแบบนั้นและเดินหน้าต่อได้เรื่อยๆ/loopเพื่อใส่พรอมป์ตให้มันมีกำลังใจเดินหน้าต่อGoal ก็ใช้ได้ แต่สำหรับบางงาน ลูป แบบง่ายๆ ดีกว่า
สงสัยว่ากำลังเกิด สถาปัตยกรรมแอปพลิเคชัน AI coding agent แบบที่ใช้ร่วมกันได้พอสมควรในบรรดาโมเดล LLM หรือเปล่า
แล้วก็สงสัยว่ามีใครรวบรวมและจัดระบบวิธีทำความเข้าใจสไตล์สถาปัตยกรรมแบบนี้อยู่ไหม
ส่วนที่ยังไม่เป็นมาตรฐานนักคือจะให้ผู้ใช้ควบคุมมากแค่ไหนระหว่างแต่ละขั้น การตั้งค่าอย่าง
showClearContextOnPlanAcceptหรือdisableAutoModeน่าสนใจเพราะมันเผยให้เห็นเส้นแบ่งระหว่าง “ให้เอเจนต์ตัดสินใจ” กับ “ให้มนุษย์ตรวจดูก่อนรัน” และตรงนั้นก็ดูจะเป็นจุดที่ coding agent จะยังให้ประสบการณ์ต่างกันมากต่อไปสนใจฟีเจอร์ “magic doc” ไม่รู้ว่าต้องใส่ไว้ใน CLAUDE.md หรือใส่ในไฟล์โปรเจกต์
แล้วระหว่างเซสชันต้องอ้างถึงไฟล์นั้นไหม หรือ Claude จะค้นหาทุกที่ในโปรเจกต์ที่มีเฮดเดอร์ “magic doc” ให้อัตโนมัติ
สั่งให้ Claude สร้างการตั้งค่าของตัวเองได้ไหม? ประมาณว่า “ให้คิดว่าคุณคือฉัน แล้วสร้างชุดไฟล์ตั้งค่าที่เหมาะที่สุดตามที่คุณต้องการ”
CLAUDE_CODE_NEW_INITเป็น 1 แล้ว/initจะรันเป็นโฟลว์ตั้งค่าแบบโต้ตอบโฟลว์นี้จะสำรวจโค้ดเบสและถามก่อนว่าจะสร้างไฟล์อะไรบ้าง เช่น
CLAUDE.md, skills, hooks เป็นต้น ก่อนจะเขียนไฟล์ ถ้าไม่มีตัวแปรนี้/initจะสร้างCLAUDE.mdให้อัตโนมัติโดยไม่ถาม.claude/เหมือนตั้งใจให้ผู้ใช้ทำแบบนั้นได้อยู่แล้ว
คุณจะได้สนุกกับการพบว่าฟีเจอร์ที่ไม่มีเอกสารที่คุณพึ่งพาอยู่หยุดทำงานไปแบบกะทันหัน
ถ้าไม่แพ้คำว่า “open” แบบเป็นภูมิแพ้ Claude Code ก็คงถูกปล่อยเป็นโอเพนซอร์สไปแล้ว และ ณ จุดนี้ก็ไม่มีเหตุผลเชิงปฏิบัติที่แท้จริงที่จะไม่เปิดมันออกมา