1 คะแนน โดย GN⁺ 3 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ได้
  • ฟิลด์ที่ส่งกลับได้จาก PreToolUse

    • updatedInput: เขียน input ใหม่ก่อนเรียกใช้เครื่องมือเพื่อเปลี่ยนคำสั่งได้
    • permissionDecision: บังคับ allow หรือ deny ได้โดยไม่ต้องถามผู้ใช้
    • permissionDecisionReason: แสดงเหตุผลของการตัดสินใจใน UI ได้
    • additionalContext: ฉีดข้อความเข้าไปใน conversation context ได้
  • ฟิลด์ที่ส่งกลับได้จาก SessionStart

    • watchPaths: ตั้งค่าการเฝ้าดูไฟล์อัตโนมัติเพื่อ trigger event FileChanged ได้
    • initialUserMessage: เพิ่มเนื้อหาก่อนข้อความแรกของผู้ใช้ใน session ได้
    • additionalContext: ฉีด context ที่คงอยู่ตลอดทั้ง session ได้
  • ฟิลด์ที่ส่งกลับได้จาก PostToolUse

    • updatedMCPToolOutput: แก้ไขผลตอบกลับของเครื่องมือ MCP ที่ Claude มองเห็นได้
    • additionalContext: ฉีด context หลังการเรียกใช้เครื่องมือได้
  • ฟิลด์ที่ส่งกลับได้จาก PermissionRequest

    • decision: อนุญาตหรือปฏิเสธแบบ 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 ก่อนรันจริง
{
  "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 ได้
{
  "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 ได้
---
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 หลายตัว
  • 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 ปัจจุบัน

1 ความคิดเห็น

 
GN⁺ 3 시간 전
ความเห็นจาก 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

    • พักเรื่องตลกไว้ก่อน สิ่งที่ 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 ก็ใช้ได้ แต่สำหรับบางงาน ลูป แบบง่ายๆ ดีกว่า
    • เมื่อกี้ฉันก็เพิ่งให้ Claude เติมรายการงาน พอมันยังไปไม่ถึงท้ายรายการ มันก็ถามแล้วว่าจะให้ทำต่อหรือแค่นี้พอ
  • สงสัยว่ากำลังเกิด สถาปัตยกรรมแอปพลิเคชัน AI coding agent แบบที่ใช้ร่วมกันได้พอสมควรในบรรดาโมเดล LLM หรือเปล่า
    แล้วก็สงสัยว่ามีใครรวบรวมและจัดระบบวิธีทำความเข้าใจสไตล์สถาปัตยกรรมแบบนี้อยู่ไหม

    • อยู่เว็บเดียวกันจริงเหรอ? เดี๋ยวนี้ยังมีใครใช้อย่างอื่นอีกไหม?
    • ดูเหมือนแพตเทิร์นของ Claude Code, Codex และ Cursor จะค่อยๆ ลู่เข้าหากัน: รวบรวมคอนเท็กซ์, วางแผน, ลงมือทำ, ตรวจสอบ
      ส่วนที่ยังไม่เป็นมาตรฐานนักคือจะให้ผู้ใช้ควบคุมมากแค่ไหนระหว่างแต่ละขั้น การตั้งค่าอย่าง 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/
      เหมือนตั้งใจให้ผู้ใช้ทำแบบนั้นได้อยู่แล้ว
    • น่าจะมี โปรเจกต์ cookie cutter ที่มีไฟล์ boilerplate พร้อมแนวปฏิบัติที่ดีที่สุดครบชุด
    • มี คำสั่งแบบ slash ที่ช่วยไล่ดูประวัติการสนทนาแล้วเพิ่มสิทธิ์อนุญาตให้
    • ทำได้ Claude ค่อนข้างเก่งในการแก้ไขตัวเอง
  • คุณจะได้สนุกกับการพบว่าฟีเจอร์ที่ไม่มีเอกสารที่คุณพึ่งพาอยู่หยุดทำงานไปแบบกะทันหัน

    • ถ้าอย่างที่ Anthropic อ้างว่าซอฟต์แวร์เอนจิเนียริงเป็นปัญหาที่แก้ได้แล้วจริง ใครๆ ก็ควรแค่ vibe coding แล้วทำมันขึ้นมาใหม่ได้
      ถ้าไม่แพ้คำว่า “open” แบบเป็นภูมิแพ้ Claude Code ก็คงถูกปล่อยเป็นโอเพนซอร์สไปแล้ว และ ณ จุดนี้ก็ไม่มีเหตุผลเชิงปฏิบัติที่แท้จริงที่จะไม่เปิดมันออกมา