oh-my-customcode 1.1.49 โ 1.1.50
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/dist/cli/index.js +171 -294
- package/dist/index.js +65 -65
- package/package.json +2 -2
- package/templates/.claude/hooks/hooks.json +10 -0
- package/templates/.claude/hooks/scripts/claude-md-reinject.sh +65 -0
- package/templates/.claude/rules/MAY-optimization.md +3 -1
- package/templates/.claude/rules/MUST-agent-design.md +13 -4
- package/templates/.claude/rules/MUST-agent-teams.md +19 -0
- package/templates/.claude/rules/MUST-completion-verification.md +28 -0
- package/templates/.claude/rules/MUST-continuous-improvement.md +20 -4
- package/templates/.claude/rules/MUST-enforcement-policy.md +4 -0
- package/templates/.claude/rules/MUST-orchestrator-coordination.md +6 -0
- package/templates/.claude/rules/MUST-parallel-execution.md +5 -1
- package/templates/.claude/rules/MUST-permissions.md +8 -0
- package/templates/.claude/rules/MUST-safety.md +6 -0
- package/templates/.claude/rules/MUST-sync-verification.md +5 -0
- package/templates/.claude/rules/SHOULD-ecomode.md +4 -0
- package/templates/.claude/rules/SHOULD-error-handling.md +2 -0
- package/templates/.claude/rules/SHOULD-interaction.md +4 -0
- package/templates/.claude/rules/SHOULD-memory-integration.md +2 -0
- package/templates/.claude/rules/SHOULD-verification-ladder.md +2 -0
- package/templates/manifest.json +1 -1
package/dist/index.js
CHANGED
|
@@ -19,28 +19,28 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
|
19
19
|
// src/utils/fs.ts
|
|
20
20
|
var exports_fs = {};
|
|
21
21
|
__export(exports_fs, {
|
|
22
|
-
|
|
23
|
-
writeJsonFile: () => writeJsonFile,
|
|
24
|
-
validatePreserveFilePath: () => validatePreserveFilePath,
|
|
25
|
-
resolveTemplatePath: () => resolveTemplatePath,
|
|
26
|
-
resolvePath: () => resolvePath,
|
|
27
|
-
remove: () => remove,
|
|
28
|
-
readTextFile: () => readTextFile,
|
|
29
|
-
readJsonFile: () => readJsonFile,
|
|
30
|
-
normalizePath: () => normalizePath,
|
|
31
|
-
move: () => move,
|
|
32
|
-
listFiles: () => listFiles,
|
|
33
|
-
isAbsolutePath: () => isAbsolutePath,
|
|
34
|
-
getRelativePath: () => getRelativePath,
|
|
35
|
-
getPackageRoot: () => getPackageRoot,
|
|
36
|
-
getFileStats: () => getFileStats,
|
|
37
|
-
filesAreIdentical: () => filesAreIdentical,
|
|
38
|
-
fileExists: () => fileExists,
|
|
39
|
-
ensureDirectory: () => ensureDirectory,
|
|
40
|
-
createTempDir: () => createTempDir,
|
|
41
|
-
copyFile: () => copyFile,
|
|
22
|
+
calculateChecksum: () => calculateChecksum,
|
|
42
23
|
copyDirectory: () => copyDirectory,
|
|
43
|
-
|
|
24
|
+
copyFile: () => copyFile,
|
|
25
|
+
createTempDir: () => createTempDir,
|
|
26
|
+
ensureDirectory: () => ensureDirectory,
|
|
27
|
+
fileExists: () => fileExists,
|
|
28
|
+
filesAreIdentical: () => filesAreIdentical,
|
|
29
|
+
getFileStats: () => getFileStats,
|
|
30
|
+
getPackageRoot: () => getPackageRoot,
|
|
31
|
+
getRelativePath: () => getRelativePath,
|
|
32
|
+
isAbsolutePath: () => isAbsolutePath,
|
|
33
|
+
listFiles: () => listFiles,
|
|
34
|
+
move: () => move,
|
|
35
|
+
normalizePath: () => normalizePath,
|
|
36
|
+
readJsonFile: () => readJsonFile,
|
|
37
|
+
readTextFile: () => readTextFile,
|
|
38
|
+
remove: () => remove,
|
|
39
|
+
resolvePath: () => resolvePath,
|
|
40
|
+
resolveTemplatePath: () => resolveTemplatePath,
|
|
41
|
+
validatePreserveFilePath: () => validatePreserveFilePath,
|
|
42
|
+
writeJsonFile: () => writeJsonFile,
|
|
43
|
+
writeTextFile: () => writeTextFile
|
|
44
44
|
});
|
|
45
45
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
46
46
|
import { fileURLToPath } from "node:url";
|
|
@@ -294,14 +294,14 @@ var init_fs = () => {};
|
|
|
294
294
|
// src/core/registry.ts
|
|
295
295
|
var exports_registry = {};
|
|
296
296
|
__export(exports_registry, {
|
|
297
|
-
|
|
298
|
-
registryToList: () => registryToList,
|
|
299
|
-
registerProject: () => registerProject,
|
|
300
|
-
readRegistry: () => readRegistry,
|
|
301
|
-
migrateFromLockfiles: () => migrateFromLockfiles,
|
|
302
|
-
isTempPath: () => isTempPath,
|
|
297
|
+
_setRegistryDirForTesting: () => _setRegistryDirForTesting,
|
|
303
298
|
cleanRegistry: () => cleanRegistry,
|
|
304
|
-
|
|
299
|
+
isTempPath: () => isTempPath,
|
|
300
|
+
migrateFromLockfiles: () => migrateFromLockfiles,
|
|
301
|
+
readRegistry: () => readRegistry,
|
|
302
|
+
registerProject: () => registerProject,
|
|
303
|
+
registryToList: () => registryToList,
|
|
304
|
+
unregisterProject: () => unregisterProject
|
|
305
305
|
});
|
|
306
306
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
307
307
|
import { homedir, tmpdir } from "node:os";
|
|
@@ -2031,7 +2031,7 @@ var package_default = {
|
|
|
2031
2031
|
workspaces: [
|
|
2032
2032
|
"packages/*"
|
|
2033
2033
|
],
|
|
2034
|
-
version: "1.1.
|
|
2034
|
+
version: "1.1.50",
|
|
2035
2035
|
description: "Batteries-included agent harness for Claude Code",
|
|
2036
2036
|
type: "module",
|
|
2037
2037
|
bin: {
|
|
@@ -2079,7 +2079,7 @@ var package_default = {
|
|
|
2079
2079
|
yaml: "^2.8.2"
|
|
2080
2080
|
},
|
|
2081
2081
|
devDependencies: {
|
|
2082
|
-
"@anthropic-ai/sdk": "^0.
|
|
2082
|
+
"@anthropic-ai/sdk": "^0.117.1",
|
|
2083
2083
|
"@biomejs/biome": "^2.3.12",
|
|
2084
2084
|
"@types/bun": "^1.3.6",
|
|
2085
2085
|
"@types/js-yaml": "^4.0.9",
|
|
@@ -5367,40 +5367,40 @@ var src_default = {
|
|
|
5367
5367
|
VERSION
|
|
5368
5368
|
};
|
|
5369
5369
|
export {
|
|
5370
|
-
|
|
5371
|
-
warn,
|
|
5372
|
-
update,
|
|
5373
|
-
success,
|
|
5374
|
-
setLogLevel,
|
|
5375
|
-
setLocale,
|
|
5376
|
-
saveConfig,
|
|
5377
|
-
resolveTemplatePath,
|
|
5378
|
-
renderGitWorkflowKO,
|
|
5379
|
-
renderGitWorkflowEN,
|
|
5380
|
-
readJsonFile,
|
|
5381
|
-
preserveCustomizations,
|
|
5382
|
-
mergeConfig,
|
|
5383
|
-
loadConfig,
|
|
5384
|
-
install,
|
|
5385
|
-
info,
|
|
5386
|
-
getTemplateManifest,
|
|
5387
|
-
getProviderLayout,
|
|
5388
|
-
getPackageRoot,
|
|
5389
|
-
getDefaultWorkflow,
|
|
5390
|
-
getDefaultConfig,
|
|
5391
|
-
getConfigPath,
|
|
5392
|
-
fileExists,
|
|
5393
|
-
error,
|
|
5394
|
-
ensureDirectory,
|
|
5395
|
-
detectProvider,
|
|
5396
|
-
detectGitWorkflow,
|
|
5397
|
-
src_default as default,
|
|
5398
|
-
debug,
|
|
5399
|
-
createLogger,
|
|
5400
|
-
createDirectoryStructure,
|
|
5401
|
-
copyTemplates,
|
|
5402
|
-
copyDirectory,
|
|
5403
|
-
checkForUpdates,
|
|
5370
|
+
VERSION,
|
|
5404
5371
|
applyUpdates,
|
|
5405
|
-
|
|
5372
|
+
checkForUpdates,
|
|
5373
|
+
copyDirectory,
|
|
5374
|
+
copyTemplates,
|
|
5375
|
+
createDirectoryStructure,
|
|
5376
|
+
createLogger,
|
|
5377
|
+
debug,
|
|
5378
|
+
src_default as default,
|
|
5379
|
+
detectGitWorkflow,
|
|
5380
|
+
detectProvider,
|
|
5381
|
+
ensureDirectory,
|
|
5382
|
+
error,
|
|
5383
|
+
fileExists,
|
|
5384
|
+
getConfigPath,
|
|
5385
|
+
getDefaultConfig,
|
|
5386
|
+
getDefaultWorkflow,
|
|
5387
|
+
getPackageRoot,
|
|
5388
|
+
getProviderLayout,
|
|
5389
|
+
getTemplateManifest,
|
|
5390
|
+
info,
|
|
5391
|
+
install,
|
|
5392
|
+
loadConfig,
|
|
5393
|
+
mergeConfig,
|
|
5394
|
+
preserveCustomizations,
|
|
5395
|
+
readJsonFile,
|
|
5396
|
+
renderGitWorkflowEN,
|
|
5397
|
+
renderGitWorkflowKO,
|
|
5398
|
+
resolveTemplatePath,
|
|
5399
|
+
saveConfig,
|
|
5400
|
+
setLocale,
|
|
5401
|
+
setLogLevel,
|
|
5402
|
+
success,
|
|
5403
|
+
update,
|
|
5404
|
+
warn,
|
|
5405
|
+
writeJsonFile
|
|
5406
5406
|
};
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"workspaces": [
|
|
4
4
|
"packages/*"
|
|
5
5
|
],
|
|
6
|
-
"version": "1.1.
|
|
6
|
+
"version": "1.1.50",
|
|
7
7
|
"description": "Batteries-included agent harness for Claude Code",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"bin": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"yaml": "^2.8.2"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@anthropic-ai/sdk": "^0.
|
|
54
|
+
"@anthropic-ai/sdk": "^0.117.1",
|
|
55
55
|
"@biomejs/biome": "^2.3.12",
|
|
56
56
|
"@types/bun": "^1.3.6",
|
|
57
57
|
"@types/js-yaml": "^4.0.9",
|
|
@@ -195,6 +195,16 @@
|
|
|
195
195
|
}
|
|
196
196
|
],
|
|
197
197
|
"description": "Advisory check for plugin cache directories missing node_modules (#1207)"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"matcher": "*",
|
|
201
|
+
"hooks": [
|
|
202
|
+
{
|
|
203
|
+
"type": "command",
|
|
204
|
+
"command": "bash .claude/hooks/scripts/claude-md-reinject.sh"
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"description": "Re-inject project CLAUDE.md into model context on session start/resume/clear and compact re-entry โ matcher \"*\" covers all SessionStart sources including \"compact\" (#1617)"
|
|
198
208
|
}
|
|
199
209
|
],
|
|
200
210
|
"UserPromptSubmit": [
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# claude-md-reinject.sh โ SessionStart: re-inject project CLAUDE.md into model context (#1617)
|
|
3
|
+
#
|
|
4
|
+
# ๋ฐฐ๊ฒฝ:
|
|
5
|
+
# ์ฅ๊ธฐ ์ธ์
์์ compact ์ดํ ํ๋ก์ ํธ CLAUDE.md(๊ฐ์ ๊ท์น ์๋ฌธ)๊ฐ ๋ชจ๋ธ ์ปจํ
์คํธ์์ ์ ์ค๋๋ฉด
|
|
6
|
+
# ๊ท์น amnesia๊ฐ ์ฌ๋ฐํ๋ค. ๊ธฐ์กด PostCompact ํ
(hooks.json)์ "prompt" ํ์
์ผ๋ก ์์ฝ ์ง์นจ๋ง
|
|
7
|
+
# ์ฌ์ฃผ์
ํ ๋ฟ, CLAUDE.md ์๋ฌธ ์ ์ฒด๋ฅผ ์ฌ์ฃผ์
ํ์ง ์๋๋ค.
|
|
8
|
+
#
|
|
9
|
+
# ๋ฐฐ์ ์ด๋ฒคํธ (Phase 1 ํ๋จ, #1617):
|
|
10
|
+
# R006 ์ค์ธก ๊ธฐ์ค(์ด ์ ์ฅ์ rules/MUST-agent-design.md) additionalContext ์ง์ ์ด๋ฒคํธ ๋ชฉ๋ก์
|
|
11
|
+
# SessionStart๋ ์๊ณ PostCompact๋ ์๋ค. ํํธ ๊ณต์ ๋ฌธ์(hooks.md, 2026-08-29 ์ฌํ์ธ)์
|
|
12
|
+
# SessionStart matcher๋ startup / resume / clear / compact ๋ค ๊ฐ์ง์ด๋ฉฐ, "compact"๋
|
|
13
|
+
# auto/manual compact ์งํ๋ฅผ ๊ฐ๋ฆฌํจ๋ค โ ์ฆ "session start ์ ์ฒด์ compact ์ฌ๊ฐ ์ดํ ์ฌ์ฃผ์
"
|
|
14
|
+
# ์๊ตฌ์ฌํญ์ SessionStart ๋จ์ผ ์ด๋ฒคํธ(matcher "*")๋ก ์ ๋ถ ์ปค๋ฒ๋๋ค. ๋ณ๋ PostCompact ๋ฐฐ์ ์
|
|
15
|
+
# ๋ถํ์ โ ๊ณต์ ๋ฌธ์ ์ด๋ฒคํธ ๋ชฉ๋ก(### ํค๋ ์ค์บ)์ PostCompact ์์ฒด๊ฐ ์๋ค(PreCompact๋ง ์กด์ฌ).
|
|
16
|
+
#
|
|
17
|
+
# ๋์:
|
|
18
|
+
# stdin JSON์ .source(startup/resume/clear/compact/๊ธฐํ)๋ฅผ ๋ก๊ทธ ํค๋์ ํฌํจํด
|
|
19
|
+
# hookSpecificOutput.additionalContext๋ก CLAUDE.md ์ ์ฒด๋ฅผ ์ฌ์ฃผ์
ํ๋ค.
|
|
20
|
+
#
|
|
21
|
+
# Opt-out: OMCUSTOM_CLAUDEMD_REINJECT=off (๊ธฐ๋ณธ on โ ์ด ํ
์ R021 advisory-first์ด๋ ๊ธฐ๋ณธ ํ์ฑ).
|
|
22
|
+
# Graceful degradation (R021): CLAUDE.md ๋ถ์ฌ / jq ๋ถ์ฌ / ์ด๊ณผ ํฌ๊ธฐ โ ๋ฌด์ exit 0. ์ ๋ exit 2 ๊ธ์ง.
|
|
23
|
+
|
|
24
|
+
input=$(cat 2>/dev/null || echo '{}')
|
|
25
|
+
|
|
26
|
+
if [ "${OMCUSTOM_CLAUDEMD_REINJECT:-on}" = "off" ]; then
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
31
|
+
exit 0
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
source_field=$(printf '%s' "$input" | jq -r '.source // "unknown"' 2>/dev/null) || source_field="unknown"
|
|
35
|
+
|
|
36
|
+
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
|
37
|
+
CLAUDE_MD="$PROJECT_ROOT/CLAUDE.md"
|
|
38
|
+
|
|
39
|
+
if [ ! -f "$CLAUDE_MD" ]; then
|
|
40
|
+
exit 0
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# ํฌ๊ธฐ ๊ฐ๋ โ ํ
์ถ๋ ฅ ํญ์ฃผ๋ก ์ธ์
์ wedge์ํค๋ ์คํจ ํด๋์ค ๋ฐฉ์ง (R021).
|
|
44
|
+
MAX_BYTES=${OMCUSTOM_CLAUDEMD_REINJECT_MAX_BYTES:-102400}
|
|
45
|
+
file_size=$(wc -c < "$CLAUDE_MD" 2>/dev/null | tr -d ' ') || file_size=0
|
|
46
|
+
if [ -z "$file_size" ] || [ "$file_size" -gt "$MAX_BYTES" ] 2>/dev/null; then
|
|
47
|
+
exit 0
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
claude_md_content=$(cat "$CLAUDE_MD" 2>/dev/null) || exit 0
|
|
51
|
+
if [ -z "$claude_md_content" ]; then
|
|
52
|
+
exit 0
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
header="[claude-md-reinject] CLAUDE.md re-injection (source: ${source_field})"
|
|
56
|
+
|
|
57
|
+
# ์ฌ๋์ด ๋ณด๋ ๊ฐ์ฌ ์ถ์ ์ฉ (SessionStart์ stdout ์์ฒด๊ฐ ์ปจํ
์คํธ๋ก ๋ค์ด๊ฐ๋ฏ๋ก, ์ฌ๋์ฉ ๋ก๊ทธ๋
|
|
58
|
+
# stderr๋ก๋ง ๋จ๊ธด๋ค โ additionalContext ๋ณธ๋ฌธ์๋ ์์ง ์๋๋ค).
|
|
59
|
+
printf '%s\n' "$header" >&2
|
|
60
|
+
|
|
61
|
+
jq -cn --arg header "$header" --arg body "$claude_md_content" \
|
|
62
|
+
'{hookSpecificOutput: {hookEventName: "SessionStart", additionalContext: ($header + "\n\n" + $body)}}' \
|
|
63
|
+
2>/dev/null || exit 0
|
|
64
|
+
|
|
65
|
+
exit 0
|
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
|
|
33
33
|
> **๋๊ตฌ ์ด๋ฆ โ ๊ทธ ํ๋ก๊ทธ๋จ (#1590)**: ๋๊ตฌ๋ฅผ ์ฐ๊ธฐ ์ ์ `type <tool>`๋ก ์ค์ฒด๋ฅผ ํ์ธํ๋ค. Bash ๋๊ตฌ์ `grep`์ `~/.claude/shell-snapshots/snapshot-zsh-*.sh`์ **์
ธ ํจ์**์ด๋ฉฐ `ugrep --ignore-files`์ ์์ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ `.gitignore`์ ๋ฆฌํฐ๋ด `CLAUDE.md` ํจํด์ ์กด์คํด, **force-tracked ํ์ผ์ ์ฌ๊ท ํ์์์ ์กฐ์ฉํ ๋๋ฝ**ํ๋ค(์๋ฌ ์์ด exit 0). ๋ช
์ ๊ฒฝ๋ก๋ฅผ ์ค grep์ ์ ์ ๋์ํ๋ฏ๋ก **traversal๋ง ์ํฅ**์ ๋ฐ๋๋ค. ์ค์ธก(2026-08-15): ๋์ผ ํจํดยท๋์ผ ๋์์ ๋ํด ์
ธ ํจ์ 36 / `command grep` 43 / `git grep` 38 ํํธ โ ์
ธ ํจ์๋ง `CLAUDE.md`๋ฅผ 0 ํํธ๋ก ๋์ณค๋ค. ์ง๋จ ํจ์ : `git check-ignore`๋ **index-aware**๋ผ tracked ํ์ผ์ "not ignored"(exit 1)๋ฅผ ๋ฐํํ๋ค โ ์์ธ์ ๋ณด๋ ค๋ฉด `git check-ignore --no-index`๋ฅผ ์จ์ผ ํ๋ค. ์ฒ๋ฐฉ: ์ ์ฅ์ ์ ์ ์กฐ์ฌ๋ `git grep`์ ํ์ค์ผ๋ก ํ๋ค(R017 Count Sync cross-ref). Origin: #1590.
|
|
34
34
|
|
|
35
|
+
> **v2.1.234+**: macOS/Linux ๋ค์ดํฐ๋ธ ๋น๋์ ๋ด์ฅ `grep`์ด pathological pattern์์ ๋ฉ๋ชจ๋ฆฌ ๊ณ ๊ฐ ๋์ fail fastํ๊ณ , `-m N`๊ณผ `-A/-C` ์ต์
์ ํจ๊ป ์ธ ๋์ context ์ถ๋ ฅ ์ ํ๋๊ฐ ์์ ๋์์ต๋๋ค(v2.1.235์์ ์ถ๊ฐ ๋ณด๊ฐ). ์ ใ๋๊ตฌ ์ด๋ฆ โ ๊ทธ ํ๋ก๊ทธ๋จใ(#1590) ์กฐํญ๊ณผ ์ธ์ ํ ํจ์ ์
๋๋ค โ ์ด ์ ์ฅ์์ Bash ๋๊ตฌ `grep`์ ์
ธ ํจ์๋ก ์
ฐ์ด๋ฉ๋ผ ์์ผ๋ฏ๋ก, ๋ด์ฅ `grep` ์์ฒด์ ๊ฒฌ๊ณ ์ฑ ๊ฐ์ ๊ณผ ์
ฐ์ด๋ฉ ๋ฌธ์ ๋ **๋ณ๊ฐ ์ถ**์
๋๋ค. Darwin(์ด ์ ์ฅ์ ์คํ ํ๊ฒฝ) ๋ค์ดํฐ๋ธ ๋น๋์ ํด๋นํฉ๋๋ค.
|
|
36
|
+
|
|
35
37
|
<!--
|
|
36
38
|
> **v2.1.206+**: `/doctor`์ checked-in CLAUDE.md์์ ์ฝ๋๋ฒ ์ด์ค๋ก๋ถํฐ ํ์ ๊ฐ๋ฅํ ๋ด์ฉ์ ์๋ผ๋ด๋๋ก ์ ์ํ๋ ์ฒดํฌ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค โ R005 "Context Optimization via HTML Comments"์ ์ปจํ
์คํธ ์ ๊ฐ ์์น๊ณผ ์ ํฉ(๋ชจ๋ธ ๋ถํ์ ๋ฉํ๋ฐ์ดํฐ ์ถ์).
|
|
37
39
|
-->
|
|
@@ -42,7 +44,7 @@
|
|
|
42
44
|
|
|
43
45
|
> **v2.1.212+**: MCP ๋๊ตฌ ํธ์ถ์ด 2๋ถ(๊ธฐ๋ณธ๊ฐ, `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`๋ก ์๊ณ๊ฐ ์กฐ์ ยท๋นํ์ฑ) ์ด๊ณผ ์ ์๋์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ด๋ํด ์ธ์
์ด ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋๋ค โ ์ v2.1.210 Bash/PowerShell auto-background์ MCP ๋๊ตฌ ํ์ฅ. ๋๋ฆฐ MCP ํธ์ถ(ontology-rag `rebuild_ontology`, code-review-graph ์ธ๋ฑ์ฑ ๋ฑ)์ hang์ผ๋ก ์คํํ์ง ๋ง๊ณ , 2๋ถ ์ด๊ณผ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ํ์ ์ ์ ๋ก ํ์ ์์
์ ์งํํฉ๋๋ค.
|
|
44
46
|
|
|
45
|
-
> **v2.1.233
|
|
47
|
+
> **v2.1.233+ (์ ์ : v2.1.239์์ ์ค์ ๋ก ๋ณด์ฅ๋จ)**: `WebFetch`์ ์ธ์
URL ์บ์ TTL์ด `CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`๋ก ์กฐ์ ๊ฐ๋ฅํด์ก์ต๋๋ค(๊ธฐ๋ณธ 15๋ถ โ **๋จ, v2.1.239 ์ด์ ์๋ ์ด 15๋ถ์ด ์ง์ผ์ง์ง ์๊ณ ๋ง๋ฃ๋ ์ฝํ
์ธ ๊ฐ ์ธ์
์ ์ฒด ๋์ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์์์ต๋๋ค**. v2.1.239๊ฐ ์ด ๊ฒฐํจ์ ์์ ํด ์ด์ ์ผ 15๋ถ TTL์ด ์ค์ ๋ก ๋ณด์ฅ๋ฉ๋๋ค). **์ฌํ์ธ ํจ์ **: ๊ฐ์ URL์ TTL ๋ด ์ฌ์กฐํํ๋ฉด ์บ์๊ฐ ๋ฐํ๋๋ฏ๋ก **๋
๋ฆฝ์ ์ธ 2์ฐจ ํ์ธ์ด ์๋๋๋ค** โ R020 Degraded-Output Re-Verification Gate๊ฐ ์๊ตฌํ๋ "๊ฒฐ์ ๋ก ์ 2์ฐจ ์์ค"๋ก ๋์ผ URL์ WebFetch ์ฌํธ์ถ์ ์ฐ์ง ๋ง๊ณ , ๋ค๋ฅธ ์์ค๋ CLI ์ค์ธก(`npm view`, `gh`)์ ์ฌ์ฉํฉ๋๋ค. **ํ๊ณ ์ ํจ์**: v2.1.239 ์ด์ ์ธ์
์์๋ ์ด ์ฌํ์ธ ํจ์ ์ด "TTL 15๋ถ ์ด๋ด"๊ฐ ์๋๋ผ **์ธ์
๋ด๋ด** ์ ํจํ์ผ๋ฏ๋ก, ๊ทธ ์๊ธฐ์ WebFetch ์ฌ์กฐํ ๊ธฐ๋ฐ ํ๋จ์ 15๋ถ๋ณด๋ค ํจ์ฌ ์ค๋๋ stale ๋ฐ์ดํฐ์ ์์กดํ์ ์ ์์ต๋๋ค.
|
|
46
48
|
|
|
47
49
|
> **v2.1.224+**: mid-turn์ ์ฐ๊ฒฐ๋ MCP ๋๊ตฌ๊ฐ **์ด๋ฆ ๊ณ ์ง ์์ด** tool search๋ก deferred๋๋ ๊ฒฐํจ์ด ์์ ๋์์ต๋๋ค. ๊ตฌ๋ฒ์ ์์๋ ์ธ์
๋์ค ๋ถ์ MCP ์๋ฒ์ ๋๊ตฌ๊ฐ ์ด๋ฆ์กฐ์ฐจ ๋
ธ์ถ๋์ง ์์ "๊ทธ๋ฐ ๋๊ตฌ ์์"์ผ๋ก ์คํํ ์ ์์์ผ๋ฏ๋ก, ์ tool-availability ์ฃผ์(`command -v` ์ฌ์ ํ์ธ๊ณผ ๋๋ฅ)๋ฅผ MCP ๋๊ตฌ์๋ ์ ์ฉํฉ๋๋ค โ ๋๊ตฌ ๋ถ์ฌ ๊ฒฐ๋ก ์ ์ `ToolSearch`๋ก ์ค์ธกํฉ๋๋ค.
|
|
48
50
|
|
|
@@ -15,6 +15,8 @@ model: sonnet # CC-native alias (Tier 1) or full model ID (Tier 2)
|
|
|
15
15
|
tools: [Read, Write, ...] # Allowed tools
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
> **v2.1.239+**: `.md` ํ์ผ์ด UTF-8 BOM์ผ๋ก ์์ํ๋ agent/skill/command ํ์ผ์ด **์กฐ์ฉํ ๋ฌด์**๋๋ ๊ฒฐํจ์ด ์์ ๋์์ต๋๋ค. ๊ตฌ๋ฒ์ ์์๋ BOM์ด ์๋ `.claude/agents/*.md`, `.claude/skills/*/SKILL.md`๊ฐ ์๋ฌ ์์ด ๋ก๋์์ ๋๋ฝ๋์ต๋๋ค โ "์์ด์ ํธ/์คํฌ์ด ์๋ค"๋ ๊ด์ธก์ด ์ค์ ๋ก๋ "BOM ๋๋ฌธ์ ๋ฌด์ ์คํต"์ผ ์ ์์์ต๋๋ค. R017 Count Sync๊ฐ ์ค์ธกํ๋ ์นด์ดํธ๋ ํ์ผ **์กด์ฌ**๋ฅผ ์ธ์ง๋ง, BOM ํ์ผ์ CC๊ฐ ์ค์ ๋ก **๋ก๋ํ์ง ์์์ผ๋ฏ๋ก** ๊ตฌ๋ฒ์ ์์๋ ์นด์ดํธ์ ์ค์ ๋ก๋๋ ์์ด์ ํธ/์คํฌ ์๊ฐ ์ด๊ธ๋ ์ ์์์ต๋๋ค(cross-ref R017 Count Sync).
|
|
19
|
+
|
|
18
20
|
<!-- ARCHIVED CC version note (historical):
|
|
19
21
|
> **v2.1.208+**: The Agent tool no longer launches with no tools when a subagent's `tools:` list resolves to nothing โ it now returns a clear error naming the unrecognized entries, catching frontmatter `tools:` typos that previously failed silently.
|
|
20
22
|
-->
|
|
@@ -66,10 +68,14 @@ Skill/rule text instructing "spawn with `model: opus`" refers to this tier โ a
|
|
|
66
68
|
|
|
67
69
|
> **v2.1.223+**: workflow agent ยท forked skill ยท slash command ยท ์ฌ๊ฐ๋ background agent๊ฐ **์์ฒญํ subagent ๋ชจ๋ธ์ด ์ ํ๋์ด parent model๋ก ์คํ๋ ๋ ๊ฒฝ๊ณ ๊ฐ ํ์**๋ฉ๋๋ค. ์ v2.1.222 org step-down ๋
ธํธ์ ์ง์ ์ฐ์ฅ์ ์ผ๋ก, ์ด์ ์๋ ์ด ๊ฐ๋ฑ์ด **๋ฌด์**์ด์์ต๋๋ค โ ์ฆ "`model: opus`๋ก ์คํฐํ๋ค"๋ ๊ธฐ๋ก์ด ์ค์ ์คํ ๋ชจ๋ธ์ ์ฆ๊ฑฐ๊ฐ ์๋์์ต๋๋ค. ํน์ ๋ชจ๋ธ์ ํ์ ํ๋ ค๋ฉด frontmatter Tier-2 full ID๋ฅผ ์ฐ๊ณ , ์คํ ๋ชจ๋ธ์ ๊ฒฝ๊ณ ํ์ ์ ๋ฌด๋ก ํ์ธํฉ๋๋ค(R020 "attempt โ outcome"์ ๋ชจ๋ธ ์ ํ ๊ฐ๋).
|
|
68
70
|
|
|
71
|
+
> **v2.1.247+**: sub-agent๊ฐ ์ฒซ ํธ์ถ์์ model 404(์ธ์ ๋ถ๊ฐ model ID)๋ฅผ ๋ง๋๋ฉด ์ฃฝ๋ ๊ฒฐํจ์ด ์์ ๋์ด, ์ด์ ์ธ์
์ fallback model chain์ ์ฌ์ฉํฉ๋๋ค. ๋ถ๋ชจ ์ธ์
์ ์ ๋ฌ๋๋ ์๋ฌ์๋ error type/status/request id/model์ด ํฌํจ๋ฉ๋๋ค. ์ v2.1.233 print๋ชจ๋ `unrecognized_model` ์ง๋จ ๋
ธํธ๊ฐ ๊ด์ธก์ฑ๋ง ๋ค๋ค๋ค๋ฉด, ์ด ์์ ์ **์คํ ์ฐ์์ฑ**์ ์ถ๊ฐํฉ๋๋ค โ ๊ตฌ๋ฒ์ ์์๋ ์๋ธ์์ด์ ํธ ๋ชจ๋ธ ํด์ ์คํจ๊ฐ fallback ์์ด ๊ทธ๋๋ก ์ฃฝ์์ผ๋ก ์ด์ด์ก์ต๋๋ค.
|
|
72
|
+
|
|
69
73
|
> **v2.1.233+**: print ๋ชจ๋(`-p`) ์ง๋จ์ด ์ถ๊ฐ๋์ด, Claude Code๊ฐ **์ธ์ํ์ง ๋ชปํ๋ model ID**๋ก ์์ฒญ์ด ๋๊ฐ๋ฉด stderr์ `[claude-code:unrecognized_model]` ๋ผ์ธ์ด ๊ธฐ๋ก๋ฉ๋๋ค(`modelOverrides`๋ก ๋งคํํ๋ฉด ์ต์ ). ๊ตฌ๋ฒ์ ์์๋ ์คํยทํ๊ธฐ๋ full ID๊ฐ **๋ฌด์์ผ๋ก fallback ํด์**๋์ด "frontmatter์ ์ ํ ๋ชจ๋ธ = ์ค์ ์คํ ๋ชจ๋ธ"์ด๋ผ๋ ์ ์ ๊ฐ ๊ฒ์ฆ ๋ถ๊ฐ๋ฅํ์ต๋๋ค โ ์ v2.1.223 ๊ฐ๋ฑ ๊ฒฝ๊ณ ์ ๊ฐ์ ๊ณ์ด์ **๊ด์ธก์ฑ ๋ณด๊ฐ**์ด๋ฉฐ, ์ด ์ ์ฅ์๋ ๋ค์ ์์ด์ ํธ๊ฐ Tier-2 full ID๋ฅผ ์ฐ๋ฏ๋ก `-p` ์คํ ์ ์ด ๋ผ์ธ ์ ๋ฌด๊ฐ model ID ์ ํจ์ฑ์ ๊ฒฐ์ ๋ก ์ ์ฆ๊ฑฐ์
๋๋ค(R020 "attempt โ outcome"). ๋ฌด์ธ ๋ฃจํ(`/fsd`)์ stderr๋ฅผ ๋ฒ๋ฆฌ๋ฉด ์ด ์ ํธ๋ ํจ๊ป ์ฌ๋ผ์ง๋๋ค.
|
|
70
74
|
|
|
71
75
|
> **v2.1.223+**: `CLAUDE_CODE_DISABLE_1M_CONTEXT`๊ฐ **native 1M ์ฐฝ์ ๊ฐ์ง ๋ชจ๋ Claude ๋ชจ๋ธ**์ auto-compaction์ผ๋ก 200K์ ์ ์งํ๋๋ก ํ๋๋์์ต๋๋ค(์ด์ ์๋ ๊ณ ์ ๋ชจ๋ธ ๋ชฉ๋ก). ๋ฏธ์ธ์ model ID๋ ๊ฐ์ ์ปจํ
์คํธ ์ฐฝ ๋ด๋ก ์ ์ง๋๋ฉฐ `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT=1`๋ก ๋ณต์ํ ์ ์์ต๋๋ค. ์ Tier-2 ํ์ `claude-sonnet-5`/`claude-opus-5`(native 1M)์ `[1m]` ์ ๋ฏธ์ฌ๋ ์ด env๊ฐ ์ค์ ๋ ํ๊ฒฝ์์ **์คํจ 200K๋ก ๋์**ํ๋ฏ๋ก, 1M ์ ์ ์ ๋์ฉ๋ ์ปจํ
์คํธ ์์ ์ ์ env ์ค์ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค(cross-ref R013 context budget).
|
|
72
76
|
|
|
77
|
+
> **v2.1.251+**: `CLAUDE_CODE_SUBAGENT_MODEL`์ด ์ด์ "๋ชจ๋ ๊ฒ์ override"๊ฐ ์๋๋ผ **๊ธฐ๋ณธ subagent ๋ชจ๋ธ๋ง ์ค์ **ํฉ๋๋ค โ ์์ด์ ํธ ์ ์์ `model:`(Tier 1/2)๊ณผ spawn ์์ ๋ช
์์ `model`(Tier 3)์ด ์ด env๋ณด๋ค **์ฐ์ **ํฉ๋๋ค. ์ด ์ ์ฅ์๋ ๋ค์ ์์ด์ ํธ๊ฐ Tier-2 full ID๋ก model์ pinํ๋ฏ๋ก, v2.1.251๋ถํฐ๋ ์ด env var๊ฐ project์ model pin์ ๋ ์ด์ ๊นจ๋จ๋ฆด ์ ์์ต๋๋ค(๋จ, ์ด์ ๋ฒ์ ์์ ์คํ๋ ์ธ์
์ ์ฌ์ ํ ์ํฅ๋ฐ์์ ์ ์์ต๋๋ค).
|
|
78
|
+
|
|
73
79
|
> **Claude Fable 5 (access via CC v2.1.170+)**: Mythos-class model, GA on the Claude API and positioned as a tier above Opus โ its capabilities exceed any previously GA model. CC v2.1.170 is the client version that adds access (the model's GA is an API/platform property, not a CC-release milestone). Available via frontmatter full ID `claude-fable-5` (Tier 2) or Agent tool `model: fable` (Tier 3) โ NOT via a Tier-1 frontmatter alias. Reserve for the most complex reasoning where its capability premium is warranted; `sonnet` remains the default for general tasks and `opus` for architecture (cost/latency awareness, R005). CC v2.1.170 also fixes session transcripts not saving (and not appearing in `--resume`) when launched from a VS Code integrated terminal or any shell inheriting Claude Code env vars โ relevant to transcript-dependent skills (`homework`, `episodic-memory`). Closes #1352.
|
|
74
80
|
|
|
75
81
|
<!-- ARCHIVED CC version notes (historical):
|
|
@@ -77,7 +83,7 @@ Skill/rule text instructing "spawn with `model: opus`" refers to this tier โ a
|
|
|
77
83
|
|
|
78
84
|
> **v2.1.197+**: Claude Sonnet 5๊ฐ Claude Code์ **๊ธฐ๋ณธ ๋ชจ๋ธ**๋ก ๋์
๋์์ต๋๋ค โ ๋ค์ดํฐ๋ธ 1M-token ์ปจํ
์คํธ, ํ๋ก๋ชจ์
๊ฐ๊ฒฉ $2/$10 per Mtok(2026-08-31๊น์ง). frontmatter์์ ๋ช
์ opt-inํ๋ ค๋ฉด Tier-2 full ID `claude-sonnet-5`๋ฅผ ์ฌ์ฉํฉ๋๋ค(`sonnet5`๋ ์ด๋ ๊ณ์ธต์์๋ ์ ํจํ ๊ฐ์ด ์๋ โ ์ 3-Tier ๊ตฌ๋ถ ์ฐธ์กฐ). **์ ์ (์ค์ธก)**: ์ด ์กฐํญ์ด ์ด์ ์ "oh-my-customcode์ base `sonnet` alias๋ ์์ ์ฑ์ ์ํด `claude-sonnet-4-6`์ ๊ณ ์ ์ ์ง"๋ผ๊ณ ์์ ํ์ผ๋ ์ฌ์ค์ด ์๋๋ค โ `sonnet` alias ํด์ ์ฃผ์ฒด๋ CC์ด๋ฉฐ ํ๋ก์ ํธ๊ฐ pinํ ์ ์๋ค(Tier 1 ์ฐธ์กฐ); frontmatter `model: sonnet` ์์ด์ ํธ๊ฐ ์ค์ธก์ `claude-sonnet-5`๋ก ์คํ๋์๋ค. Sonnet 5๊ฐ CC ์ ๊ท ๊ธฐ๋ณธ๊ฐ์ด๋ฏ๋ก ๋ช
์ ๋ชจ๋ธ ์๋ ์ธ์
์ ์ด์ Sonnet 5์์ ๋์ํฉ๋๋ค.
|
|
79
85
|
|
|
80
|
-
> **v2.1.201+**: Claude Sonnet 5 ์ธ์
์ด harness reminder๋ฅผ mid-conversation system role๋ก ์ฃผ์
ํ์ง ์๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค โ Sonnet 5 ์คํ ์ ํ๋์ค ๋ฆฌ๋ง์ธ๋(๊ท์น ์ฌ์ฃผ์
๋ฑ) ์ ๋ฌ ๋ฐฉ์์ด ์กฐ์ ๋์์ผ๋ฉฐ, PostCompact ๊ท์น ์ฌ์ฃผ์
(R021)ยท์ธ์
์ฐ์์ฑ ๋์ ์์ฒด์๋ ์ํฅ์ด ์์ต๋๋ค. Sonnet 5๊ฐ CC ๊ธฐ๋ณธ ๋ชจ๋ธ(v2.1.197+)์ด๋ฏ๋ก ๋ช
์ ๋ชจ๋ธ ์๋ ์ธ์
์ ์ ์ฉ๋ฉ๋๋ค.
|
|
86
|
+
<!-- RETIRED (์ํด ๋ฆด๋ฆฌ์ฆ v1.1.50, ๋ณด์กด ๊ธฐ์ค v2.1.230 ๋ฏธ๋ง): > **v2.1.201+**: Claude Sonnet 5 ์ธ์
์ด harness reminder๋ฅผ mid-conversation system role๋ก ์ฃผ์
ํ์ง ์๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค โ Sonnet 5 ์คํ ์ ํ๋์ค ๋ฆฌ๋ง์ธ๋(๊ท์น ์ฌ์ฃผ์
๋ฑ) ์ ๋ฌ ๋ฐฉ์์ด ์กฐ์ ๋์์ผ๋ฉฐ, PostCompact ๊ท์น ์ฌ์ฃผ์
(R021)ยท์ธ์
์ฐ์์ฑ ๋์ ์์ฒด์๋ ์ํฅ์ด ์์ต๋๋ค. Sonnet 5๊ฐ CC ๊ธฐ๋ณธ ๋ชจ๋ธ(v2.1.197+)์ด๋ฏ๋ก ๋ช
์ ๋ชจ๋ธ ์๋ ์ธ์
์ ์ ์ฉ๋ฉ๋๋ค. -->
|
|
81
87
|
-->
|
|
82
88
|
|
|
83
89
|
> **Fable 5 Effort ์ ๋ต**: Fable 5๋ **high effort๊ฐ ๊ธฐ๋ณธ๊ฐ**์ด๋ฉฐ, `xhigh`๋ capability-sensitive ์์
(์ต๊ณ ๋๋ ์ํคํ
์ฒ/์ถ๋ก )์ ํ์ ํด์ผ ํฉ๋๋ค. Fable 5์ `low`/`medium` effort์กฐ์ฐจ ์ด์ ์ธ๋ ๋ชจ๋ธ์ `xhigh`๋ฅผ ์ํํ๋ ํ์ง์ ๋ณด์ด๋ฏ๋ก, Fable 5๋ฅผ ์ฌ์ฉํ๋ ์คํ ์์ด์ ํธ๋ `effort` ํ๋๋ฅผ ์ ์คํ ๋ช
์ํ๊ณ ๋ถํ์ํ `xhigh` ๋จ์ฉ์ ์ง์ํฉ๋๋ค(R005 ๋น์ฉ/์ง์ฐ ์ธ์๊ณผ ์ ํฉ).
|
|
@@ -126,7 +132,7 @@ This is a settings-level resilience mechanism, distinct from the per-agent `mode
|
|
|
126
132
|
|
|
127
133
|
### Optional Frontmatter
|
|
128
134
|
|
|
129
|
-
Key optional fields: `memory`, `effort`, `skills`, `soul`, `isolation`, `background`, `maxTurns`, `maxTokens`, `mcpServers`, `hooks`, `permissionMode`, `disallowedTools`, `limitations`, `domain`, `disableSkillShellExecution
|
|
135
|
+
Key optional fields: `memory`, `effort`, `skills`, `soul`, `isolation`, `background`, `maxTurns`, `maxTokens`, `mcpServers`, `hooks`, `permissionMode`, `disallowedTools`, `limitations`, `domain`, `disableSkillShellExecution`, `experimental.cacheTtl` (v2.1.248+). Supported since CC v2.1.63+. See full optional frontmatter via Read tool.
|
|
130
136
|
|
|
131
137
|
### Note on `skills:` field
|
|
132
138
|
|
|
@@ -167,6 +173,8 @@ limitations: # Negative capability declarations
|
|
|
167
173
|
- "cannot modify code"
|
|
168
174
|
domain: backend # backend | frontend | data-engineering | devops | universal
|
|
169
175
|
disableSkillShellExecution: true # Disable inline shell execution in skills (v2.1.91+)
|
|
176
|
+
experimental:
|
|
177
|
+
cacheTtl: "5m" # "5m" | "1h" โ subagent prompt cache TTL when not otherwise set (v2.1.248+)
|
|
170
178
|
```
|
|
171
179
|
|
|
172
180
|
> **Note**: When `disableSkillShellExecution` is enabled (v2.1.91+), skills that rely on inline shell execution (e.g., `rtk-exec`) will have their shell blocks disabled. This is a security hardening option.
|
|
@@ -181,7 +189,8 @@ Hook JSON output `terminalSequence` field for desktop notifications, window titl
|
|
|
181
189
|
|
|
182
190
|
## Hook Event Types
|
|
183
191
|
|
|
184
|
-
|
|
192
|
+
33 event types supported: SessionStart, Setup, UserPromptSubmit, UserPromptExpansion, PreToolUse, PermissionRequest, PermissionDenied, PostToolUse, PostToolUseFailure, PostToolBatch, Notification, MessageDisplay, SubagentStart, SubagentStop, TaskCreated, TaskCompleted, Stop, StopFailure, TeammateIdle, InstructionsLoaded, ConfigChange, CwdChanged, DirectoryAdded, FileChanged, WorktreeCreate, WorktreeRemove, PreCompact, PostCompact, Elicitation, ElicitationResult, SessionEnd, PreModelSwitch, PostModelSwitch (v2.1.251+). 4 handler types: command, prompt, http, agent. See full reference table via Read tool.
|
|
193
|
+
> **v2.1.251+**: ์ ๊ท ํ
์ด๋ฒคํธ `PreModelSwitch`/`PostModelSwitch`๊ฐ ์ถ๊ฐ๋์ด model switch๋ฅผ block/confirm/annotateํ ์ ์์ต๋๋ค. ๋ํ `SessionStart` resume ํ
์ด ์ด์ session staleness์ ์์ re-cache ๋น์ฉ์ ์ธ์๋ก ๋ฐ์ต๋๋ค.
|
|
185
194
|
|
|
186
195
|
> **`MessageDisplay`๋ ํ์ ์ ์ฉ โ `additionalContext` ๋ฏธ์ง์**: `MessageDisplay`๋ `hookSpecificOutput.displayContent`๋ก **ํ๋ฉด ํ์ ํ
์คํธ๋ง** ๊ต์ฒดํ๋ฉฐ, ํธ๋์คํฌ๋ฆฝํธ์ Claude๊ฐ ๋ณด๋ ๋ด์ฉ์ ์๋ณธ์ด ์ ์ง๋๋ค. ๋ฐ๋ผ์ advisory ํ
์ `MessageDisplay`์ ๋ฐฐ์ ํ๋ฉด **๋ชจ๋ธ์ ๋๋ฌํ์ง ์๋๋ค**. `additionalContext`(๋ชจ๋ธ ์ปจํ
์คํธ ์ฃผ์
)๋ฅผ ์ง์ํ๋ ์ด๋ฒคํธ๋ SessionStart, Setup, SubagentStart, UserPromptSubmit, UserPromptExpansion, PreToolUse, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop์ด๋ค. (์ด์ ํ์ด ๋์ดํ๋ `PostMessage`๋ ๋ฌธ์ํ๋ ์ด๋ฒคํธ๊ฐ ์๋๋ค โ ์ค์ ์ด๋ฒคํธ๋ช
์ `MessageDisplay`.)
|
|
187
196
|
|
|
@@ -277,7 +286,7 @@ Agent frontmatter `hooks:` now fire when the agent runs as a main-thread agent v
|
|
|
277
286
|
-->
|
|
278
287
|
|
|
279
288
|
<!-- ARCHIVED CC version note (historical):
|
|
280
|
-
> **v2.1.204+**: headless ์ธ์
์ SessionStart hook ์ค hook ์ด๋ฒคํธ๊ฐ ์คํธ๋ฆฌ๋ฐ๋์ง ์์ remote worker๊ฐ hook ๋์ค idle-reap๋๋ ๋ฌธ์ ๊ฐ ์์ ๋์์ต๋๋ค. Hook Event Types/SessionStart ๊ด๋ จ.
|
|
289
|
+
<!-- RETIRED (์ํด ๋ฆด๋ฆฌ์ฆ v1.1.50, ๋ณด์กด ๊ธฐ์ค v2.1.230 ๋ฏธ๋ง): > **v2.1.204+**: headless ์ธ์
์ SessionStart hook ์ค hook ์ด๋ฒคํธ๊ฐ ์คํธ๋ฆฌ๋ฐ๋์ง ์์ remote worker๊ฐ hook ๋์ค idle-reap๋๋ ๋ฌธ์ ๊ฐ ์์ ๋์์ต๋๋ค. Hook Event Types/SessionStart ๊ด๋ จ. -->
|
|
281
290
|
-->
|
|
282
291
|
|
|
283
292
|
## Permission Mode Guidance
|
|
@@ -411,6 +411,25 @@ Cross-reference: R020 ("actual outcome โ attempt" โ verifying that a command
|
|
|
411
411
|
|
|
412
412
|
> **v2.1.222+**: `SendMessage`๊ฐ ๊ธด summary๋ฅผ ๋ฌธ์ ์ ์ ํ์ผ๋ก ๊ฑฐ๋ถํ๋ ๋์์ด **์ ๋จ(truncate)**์ผ๋ก ๋ณ๊ฒฝ๋์ด ์ ์ก์ด ์คํจํ์ง ์์ต๋๋ค. ์ ์ก ์คํจ๊ฐ ์ฌ๋ผ์ง ๋์ **์กฐ์ฉํ ์ ๋จ**์ด๋ผ๋ ์ ์คํจ ๋ชจ๋๊ฐ ์๊ฒผ์ผ๋ฏ๋ก, ์ ํ์ "SendMessage report = Low reliability" ์์น์ด ์คํ๋ ค ๊ฐํ๋ฉ๋๋ค. ๊ธด ๋ณด๊ณ ๊ฐ ํ์ํ๋ฉด SendMessage ๋ณธ๋ฌธ ๋์ ์ํฐํฉํธ ํ์ผ ๊ฒฝ๋ก ์ ๋ฌ(R006 Artifact Channel Protocol)๋ก ๋์ฒดํฉ๋๋ค.
|
|
413
413
|
|
|
414
|
+
> **โ
โ
v2.1.246+**: `maxTurns` ํ๋์ ๋๋ฌํด ๋ฉ์ถ ์๋ธ์์ด์ ํธ์ ๊ฒฐ๊ณผ๊ฐ ์ด์ **partial๋ก ํ์**๋๊ณ `SendMessage`๋ก ์ด์ด๊ฐ๋ผ๋ ํํธ๊ฐ ๋ถ์ต๋๋ค โ **์ด์ ์๋ ์๋ฃ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค.**
|
|
415
|
+
>
|
|
416
|
+
> **ํ์ ๋ ๊ฒ (v1.1.50 ์ธ์
์ค์ธก)**: `maxTurns` ์ ๋จ์ R020 ใVerification-Delegation Non-Terminationใ์ด ๋์ 14ํ๋ก ๊ธฐ๋กํ "์๋ธ์์ด์ ํธ๊ฐ ํ์ ์์ด turn์ ์ข
๋ฃ" ์ฆ์์ **์ค์ฌํ๋ ์์ธ ์ค ํ๋**๋ค โ ๋ ์ด์ ๊ฐ์ค์ด ์๋๋ค. v1.1.50 ๋ฆด๋ฆฌ์ฆ ์ธ์
์์ ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ 4๊ฐ ๊ทธ๋ฃน์ ๋ณ๋ ฌ ์์ํ๊ณ , ๊ทธ์ค **3๊ฐ ๊ทธ๋ฃน์ด 20ํด `maxTurns` ํ๋๋ก ์ ๋จ**๋์ด ํต์ง์ `stopped at its 20-turn limit (partial result)`์ด ๋ช
์๋๋ค:
|
|
417
|
+
> - ํ ๊ฑด์ ๋ฌธ์ฅ ์ค๊ฐ์์ ์ ๋จ(์งํ๋ ๋ถ๋ช
โ ์ค์ธก ํ์).
|
|
418
|
+
> - ๋ค๋ฅธ ํ ๊ฑด์ "Templates ๋ฏธ๋ฌ๋ฅผ ๋๊ธฐํํฉ๋๋ค" ์งํ ์ ๋จ โ ์ค์ผ์คํธ๋ ์ดํฐ๋ ์ด ๋ฌธ๊ตฌ๋ก **๋ฏธ์คํ**์ ์ถ์ ํ์ผ๋, ์ฌ๊ฐ ํ ์ค์ธก ๊ฒฐ๊ณผ ์์
์ **์ด๋ฏธ ์๋ฃ๋ผ ์์๋ค**. ์ ๋จ ์์น(๋ง์ง๋ง ์ถ๋ ฅ ๋ฌธ์ฅ)๋ก๋ถํฐ ์งํ๋๋ฅผ ์ถ๋ก ํ๋ ๊ฒ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํจ์ ์ฌํ์ธํ ์ฌ๋ก๋ค โ R020 ใ์ฆ์๋ง์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋๊ฒจ์ง์ง ์๋๋คใ์ ์ธ ๋ฐฉํฅ ์ค "(c) ์ค์ ๊ฐ ๋ณด๊ณ ๋ณด๋ค ์์ฌ"์ ์ฌํ.
|
|
419
|
+
> - ์ธ ๋ฒ์งธ ๊ฑด์ "Now R020 โ three items. Let's find suitable locations."๋ผ๋ **๋ค์ ์์
์๊ณ ์งํ** ์ ๋จ โ ์ฐฉ์ ์ฌ๋ถ์กฐ์ฐจ ๋ฏธ์ค์ธก ์ํ๋ก ๋๊ฒผ๋ค.
|
|
420
|
+
>
|
|
421
|
+
> **v2.1.246 ์ด์ ์ด์๋ค๋ฉด ์ด partial ํ์๊ฐ ์์ด ์ธ ๊ฑด ๋ชจ๋ ์๋ฃ ๋ณด๊ณ ๋ก ์ฝํ์ ๊ฒ์ด๋ค.**
|
|
422
|
+
>
|
|
423
|
+
> **ํ์ ๋์ง ์์ ๊ฒ**: R020์ด ๊ธฐ๋กํ ๊ณผ๊ฑฐ 14ํ ๊ฐ๊ฐ์ด ์ด ์์ธ์ด์๋์ง๋ ๋ฏธ๊ฒ์ฆ์ด๋ค โ ์ฌ๋ก๋ณ ๊ท์์ turn ์ยท์์ ์๊ฐ์ `maxTurns` ํ๋์ ๋์กฐํ๋ ๋ณ๋ ๊ฒ์ฆ์ด ํ์ํ๋ค.
|
|
424
|
+
>
|
|
425
|
+
> **ํ๋ ํจ์**: ์ด ์์ธ์ R020์ clause ๊ฐํ("ํ์ ์์ด ์ข
๋ฃํ์ง ๋ง๋ผ")๊ฐ 14ํ ๋ด๋ด ์คํจํ๋ ์ด์ ๋ฅผ ์ค๋ช
ํ๋ค โ **์ ๋จ ์ฃผ์ฒด๊ฐ ์์ด์ ํธ์ ํ๋จ์ด ์๋๋ผ ํ๋ซํผ์ turn ํ๋์ด๋ฉด, ์์ด์ ํธ๋ฅผ ํฅํ ์ง์๋ ์ ์ด์ ๋ฟ์ง ์๋๋ค.** ๋์นญ์ ์ผ๋ก R020 ใ์์ ๊ฒฝ๊ณ๋ฅผ Phase ๊ฐ์๋ก ์ค๊ณใ(๋จ์ผ ๋ชฉํ๋ก ๋ถํ )๊ฐ ํจ๊ณผ์ ์ด์๋ ์ด์ ๋ ์ค๋ช
๋๋ค โ ์์
์ด ์์ผ๋ฉด `maxTurns` ์์์ ์์ฐํ ๋๋๊ธฐ ๋๋ฌธ์ด์ง, ์์ด์ ํธ๊ฐ ๋ ์์ข
์ ์ด์ด์๊ฐ ์๋๋ค.
|
|
426
|
+
>
|
|
427
|
+
> **๋ฎ์ถ์ง ๋ง ๊ฒ**: ์์ธ์ด ํ์ ๋๋ค๊ณ ํด์ ์ ํ์ ๊ฒฐ์ ๋ก ์ ground-truth ๊ฒ์ฆ ์์น์ ๋ฎ์ถ์ง ์๋๋ค โ ์ ๋จ์ด ์๋ ์์ธ(์์ ๊ฒฝ๊ณ ๋ฏธ๋ถํ , ์์ด์ ํธ ์์ฒด ํ๋จ ์ข
๋ฃ)๋ ๊ณ์ ์กด์ฌํ๋ค. ๋ํ **partial ํ์๋ v2.1.246 ์ด์์์๋ง ๋ํ๋๋ฏ๋ก**, ๊ทธ ์ด์ ๋ฒ์ ์์ ๊ด์ธก๋ mid-step ์ข
๋ฃ ์ฌ๋ก๋ฅผ ์ฌํด์ํ ๋๋ ์ด ์ ํธ ์์ฒด๊ฐ ๋ถ์ฌํ๋ค๋ ๊ฒ์ ์ ์ ๋ก ํ๋ค โ "partial ํ์๊ฐ ์์๋ค"๊ฐ "maxTurns ์ ๋จ์ด ์๋์๋ค"์ ์ฆ๊ฑฐ๋ ์๋๋ค.
|
|
428
|
+
|
|
429
|
+
> **v2.1.251+**: Agent Teams ํ์์ ์ต์ข
๋ต๋ณ์ด ํ ๋ฆฌ๋์ ๋๋ฌํ์ง ๋ชปํ๋ ๊ฒฐํจ์ด ์์ ๋์ด, ์ด์ idle notification์ ์ค๋ ค ๋์ฐฉํฉ๋๋ค(์ด์ ์๋ ๋ด์ฉ ์๋ "available" ์๋ฆผ๋ง ๋ด์ต๋๋ค). ์ v2.1.224 "SendMessage teammate inbox ์ฐ๊ธฐ ์คํจ ์์๋ Message sent๋ก ๋ณด๊ณ " ์์ ์ **ํ์ ์ค์ฆ**์
๋๋ค โ ๊ตฌ๋ฒ์ ์์๋ ํ์์ด ์ ์ ์๋ฃํด๋ ๋ฆฌ๋๊ฐ ๊ทธ ๋ต๋ณ์ ๋ชป ๋ฐ์ ์ ์์์ผ๋ฏ๋ก, "๊ฒฐ์ ๋ก ์ ground-truth๋ก ํ์ธ"์ด๋ผ๋ ์ ํ์ ์์น์ด ์ด ์์ ์ด์ ์ธ์
์์๋ ํนํ ์ค์ํ์ต๋๋ค.
|
|
430
|
+
|
|
431
|
+
> **v2.1.234+**: `/config`์ "Default teammate model" ์ค์ ์ด **์ ๊ฑฐ**๋์ด, agent-team teammate๋ ์ด์ spawn์ด ๋ชจ๋ธ์ ์ง์ ํ์ง ์๋ ํ **leader์ ๋ชจ๋ธ**์ ์ฌ์ฉํฉ๋๋ค. ์ด์ ์๋ teammate ๋ชจ๋ธ์ ์ ์ญ ์ค์ ๊ฐ์ผ๋ก ์ง์ ํ ์ ์์์ผ๋ฏ๋ก, ๊ณผ๊ฑฐ ์ธ์
์ "teammate๊ฐ ์ด๋ค ๋ชจ๋ธ๋ก ์คํ๋๋์ง" ์์ ์ ์ด ๋ณ๊ฒฝ ์ด์ ๋ฒ์ ๊ธฐ์ค์ผ ์ ์์ต๋๋ค.
|
|
432
|
+
|
|
414
433
|
<!-- ARCHIVED CC version note (historical):
|
|
415
434
|
> **CC v2.1.162+**: `claude agents --json` now includes a `waitingFor` field showing what a waiting session is blocked on (e.g. a permission prompt). Use it as an additional deterministic ground-truth signal โ a member with a non-empty `waitingFor` is blocked on input (needs unblocking), NOT silently stalled (reassign per stall handling below). This distinguishes the two failure modes the verification is meant to separate.
|
|
416
435
|
|
|
@@ -126,6 +126,18 @@ Origin: #1443 (Session 126 ํ๊ณ ์ฐ๋น #1) โ v1.1.3 R017 ๊ฒ์ฆ์์ mgr-sa
|
|
|
126
126
|
|
|
127
127
|
Cross-reference: R018 (Member Completion Verification), `feedback_release_delegation_phasing`, `feedback_orchestrator_direct_verify` (release delegation phasing์ verification ์์์๋ ํ์ฅ).
|
|
128
128
|
|
|
129
|
+
#### maxTurns ์ ๋จ ์ค์ฆ (Origin: v1.1.50 ์ธ์
)
|
|
130
|
+
|
|
131
|
+
**์ค์ธก (v1.1.50 ์ธ์
)**: ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ 4๊ฐ ๊ทธ๋ฃน์ ๋ณ๋ ฌ ์์ํ๊ณ **๊ทธ์ค 3๊ฐ๊ฐ 20ํด `maxTurns` ํ๋๋ก ์ ๋จ**๋๋ค. ์ธ ๊ฑด ๋ชจ๋ ํต์ง์ `stopped at its 20-turn limit (partial result)`์ด ๋ช
์๋๊ณ ์ถ๋ ฅ์ด ์์
์ค๊ฐ์์ ๋๊ฒผ๋ค โ ํ ๊ฑด์ ๋ฌธ์ฅ ์ค๊ฐ์์ ์ ๋จ(์งํ๋ ๋ถ๋ช
, ์ค์ธก ํ์), ํ ๊ฑด์ "Templates ๋ฏธ๋ฌ๋ฅผ ๋๊ธฐํํฉ๋๋ค"๋ผ๊ณ ์๊ณ ํ ์งํ ์ ๋จ(์ค์ผ์คํธ๋ ์ดํฐ๋ ๋ฏธ์คํ์ผ๋ก ์ถ์ ํ์ผ๋ **์ค์ธก ๊ฒฐ๊ณผ ๋ฏธ๋ฌ ๋๊ธฐํ๊น์ง ์ด๋ฏธ ์๋ฃ**๋ผ ์์๋ค โ ์ ใ์ฆ์๋ง์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋๊ฒจ์ง์ง ์๋๋คใ์ "(c) ์ค์ ๊ฐ ๋ณด๊ณ ๋ณด๋ค ์์ฌ" ์ฌํ), ํ ๊ฑด์ "Now R020 โ three items"๋ผ๊ณ ๋ค์ ์์
์ ์๊ณ ํ ์งํ ์ ๋จ(์ค์ธก ๊ฒฐ๊ณผ **ํธ์ง์ ์๋ฃ, ๊ฒ์ฆ๋ง ๋ฏธ์ํ** ์ํ์๋ค). ์ธ ๊ฑด ๋ชจ๋ **์ ๋จ ์์น ๋ฌธ์ฅ๊ณผ ์ค์ ์งํ๋๊ฐ ์ด๊ธ๋ฌ๋ค** โ ์ด๊ฒ์ด ์ด ์ค์ฆ์ ํต์ฌ์ด๋ค.
|
|
132
|
+
|
|
133
|
+
1. **ํ์ **: `maxTurns` ์ ๋จ์ ์ด ์กฐํญ์ด ๋์ 14ํ๋ก ๊ธฐ๋กํ "ํ์ ์์ด ์ข
๋ฃ" ์ฆ์์ **์ค์ฌํ๋ ์์ธ ์ค ํ๋**๋ค. CC v2.1.246๋ถํฐ partial๋ก ํ์๋๋ฏ๋ก ์ด์ **๊ด์ธก ๊ฐ๋ฅ**ํ๋ค(๊ทธ ์ด์ ์๋ ์๋ฃ๋ก ๋ณด์๋ค โ R018 v2.1.246 ๋
ธํธ ๊ต์ฐจ์ฐธ์กฐ).
|
|
134
|
+
2. **๋ฏธํ์ **: ๊ณผ๊ฑฐ 14ํ **๊ฐ๊ฐ**์ด ์ด ์์ธ์ด์๋์ง๋ ๋ฏธ๊ฒ์ฆ์ด๋ค. ์ฌ๋ก๋ณ ๊ท์์๋ turn ์ยท์์ ์๊ฐ ๋์กฐ๊ฐ ํ์ํ๋ค.
|
|
135
|
+
3. **์ค๋ช
๋ ฅ**: ์ด๊ฒ์ **์ clause ๊ฐํ๊ฐ 14ํ ๋ด๋ด ์คํจํ๋์ง**๋ฅผ ์ค๋ช
ํ๋ค โ ์์ด์ ํธ์๊ฒ "์ข
๋ฃํ์ง ๋ง๋ผ"๊ณ ์ง์ํด๋ **์ ๋จ ์ฃผ์ฒด๊ฐ ์์ด์ ํธ๊ฐ ์๋๋ฉด ์ง์๊ฐ ๋ฟ์ง ์๋๋ค**. ์ญ์ผ๋ก ใ์์ ๊ฒฝ๊ณ๋ฅผ Phase ๊ฐ์๋ก ์ค๊ณใ๊ฐ ํจ๊ณผ์ ์ด์๋ ์ด์ ๋ ์ค๋ช
๋๋ค: ์์
์ด ์์ผ๋ฉด ํด ํ๋ ์์ ๋๋๊ธฐ ๋๋ฌธ์ด์ง ์์ด์ ํธ๊ฐ ๋ ์์ข
์ ์ด์ด์๊ฐ ์๋๋ค.
|
|
136
|
+
4. **์ ๋ ๊ธฐ์ค ์ ์ค**: ์์ ํฌ๊ธฐ ํ์ ์ "Phase๊ฐ ๋ช ๊ฐ์ธ๊ฐ"์์ **"ํ์ tool call์ด 20ํด ์์ ๋ค์ด๊ฐ๋๊ฐ"**๋ก ๋ฐ๊พผ๋ค. ํ์ผ 1๊ฐ๋น Read + Edit + ๋ฏธ๋ฌ Edit + diff ํ์ธ = ์ฝ 4ํด์ด๋ฏ๋ก, **ํ์ผ ํธ์งํ ์์์ ๋ด๋น ํ์ผ 4~5๊ฐ๊ฐ ์ค์ง ์ํ**์ด๋ค. v1.1.50 ์ธ์
์ ์ ๋จ 3๊ฑด์ ๋ด๋น ํ์ผ์ด ๊ฐ๊ฐ 4๊ฐยท3๊ฐยท7๊ฐ์๊ณ ํ์ผ๋น ์ ๊ท ๋
ธํธ ์ถ๊ฐยท์ํด ํ์ ยท๋ฏธ๋ฌ ๋๊ธฐํ๋ฅผ ํจ๊ป ์๊ตฌํ๋ค โ ์ฐ์ ์ ์ผ๋ก 20ํด์ ๋ค์ด๊ฐ ์ ์๋ ์์์ด์๋ค. **์ด๋ ์์ด์ ํธ์ ์คํจ๊ฐ ์๋๋ผ ์ค์ผ์คํธ๋ ์ดํฐ์ ์์ ์ค๊ณ ๊ฒฐํจ์ด๋ค.**
|
|
137
|
+
5. **์ํ์ฑ
**: ๋ฏธ๋ฌ ๋๊ธฐํ์ฒ๋ผ **ํํ ํ์ ์์
์ ๋ง์ง๋ง์ ๋ชฐ์ง ๋ง๊ณ ํ์ผ ๋จ์๋ก ์ฆ์ ์ํ**ํ๋ค โ ์ ๋จ์ ํญ์ ๋ง์ง๋ง ์์
์ ์๋ฅด๋ฏ๋ก, ๋ง์ง๋ง์ ๋ชฐ๋ฆฐ ์์
์ ์ ๋จ ์ ์ ๋ ์ ์ค๋๋ค.
|
|
138
|
+
|
|
139
|
+
Cross-reference: R018 (v2.1.246 maxTurns partial-marking ๋
ธํธ), R009 (Member Prompt Size Cap โ ํ๋กฌํํธ ํ ํฐ ์ํ๊ณผ ๋ณ๊ฐ๋ก ํด ์ ์ํ๋ ์์ ํฌ๊ธฐ ์ค๊ณ ๋ณ์์์ ์ถ๊ฐ).
|
|
140
|
+
|
|
129
141
|
<!--
|
|
130
142
|
> **v2.1.199+**: subagent๊ฐ API ์ค๋ฅ(usage limit reached ๋ฑ)๋ฅผ ์ฑ๊ณต ๊ฒฐ๊ณผ๋ก ์ค๋ณดํ๋ ๋ฌธ์ ๊ฐ ์์ ๋์ด ์ด์ ์ค๋ฅ๊ฐ parent agent์ ์ ํํ ๋ณด๊ณ ๋ฉ๋๋ค. ํ๋ซํผ ์์ ์ผ๋ก false-success ์๊ฐ๋ณด๊ณ ๋น๋๋ ์ค์ง๋ง, "actual outcome โ attempt" ground-truth ๊ฒ์ฆ ์์น(R020 Core Rule)์ ์ฌ์ ํ ์ ์ง๋๋ค โ subagent ๋ณด๊ณ ๋ฅผ ๊ทธ๋๋ก ์ ๋ขฐํ์ง ๋ง๊ณ `git status`/`grep`/validation script๋ก ์ฌํ์ธํ๋ค.
|
|
131
143
|
|
|
@@ -298,6 +310,8 @@ Origin: #1266 โฃ.
|
|
|
298
310
|
|
|
299
311
|
์ค์ฆ: 2026-07-30 ์ธ์
์์ ์๊ฐ ๋ณด๊ณ ๋ "์ง์ ๋ ์๋ต์์ ๋๋ฝ"(2ํ)์ด์์ผ๋ transcript ์ค์ธก์ **7ํ**์๋ค โ 3.5๋ฐฐ ๊ณผ์ ๊ณ์. Origin: #1553 ์ฐ๋น #2.
|
|
300
312
|
|
|
313
|
+
**๊ณ์๋ฅผ ์ํํ์ง ์์๋ค๋ฉด ๊ทธ ์ฌ์ค์ ๋ช
์ํ ๊ฒ (Origin: #1601, v1.1.49 ์ธ์
)**: ์๊ฐยท๋น์ฉ ์ ์ฝ์ผ๋ก transcript ํ์ฑ ๊ณ์๋ฅผ ์๋ตํ๋ ๊ฒฝ์ฐ, ํ๊ณ ์์ฒด์ "์ ์ ๊ณ์ ๋ฏธ์ํ"์์ ๋ฐํ์ผ ํ๋ค. ๊ณ์ํ์ง ์์ ํ๊ณ ์ ํญ๋ชฉ ๋ชฉ๋ก์ ์๋ฐ ์ ์๊ฐ ์๋๋ผ **"์งํ ์ค ์๊ฐํ๊ฑฐ๋ ์๋ธ์์ด์ ํธ๊ฐ ์ง์ ํ ํญ๋ชฉ"์ ํ์ **๋๋ฉฐ, ์ด๋ฅผ ๋ฐํ์ง ์์ผ๋ฉด ๋
์๊ฐ ๋ชฉ๋ก์ ์ ์๋ก ์คํดํด ํ์ ์กฐ์น ์ฐ์ ์์๊ฐ ์๊ณก๋๋ค. v1.1.49 ์ธ์
ํ๊ณ ๋ ๊ณ์๋ฅผ ์ํํ์ง ์์๊ณ ๊ทธ ์ฌ์ค์ ์ค์ค๋ก ๋ช
์ํ๋ค(์ข์ ์ฌ๋ก) โ ๋์กฐ์ ์ผ๋ก ๊ทธ ์ด์ ์ธ์
(์ ์ค์ฆ)์ ๊ณ์ ๋ฏธ์ํ ์ฌ๋ถ๋ฅผ ๋ฐํ์ง ์์ ๊ธฐ์ต ๊ธฐ๋ฐ ์๊ฐ ๋ณด๊ณ ์๊ณ ์ค์ธก ๋๋น 3.5๋ฐฐ ๊ณผ์ ๊ณ์์ด์๋ค.
|
|
314
|
+
|
|
301
315
|
์ด๋ Read-Before-Characterize์ **์๊ธฐ ์ ์ฉ** ๊ฐ๋๋ค โ ์ง๋จ ๋์์ด ์ธ๋ถ ๋ก๊ทธ๊ฐ ์๋๋ผ ์๊ธฐ ์์ ์ transcript์ผ ๋์๋ "์ฝ๊ธฐ ์ ํน์ฑํ ๊ธ์ง"๊ฐ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค.
|
|
302
316
|
|
|
303
317
|
#### ์์จ ๋ฃจํ ์ธ์
์ ํด ๊ฒฝ๊ณ ์ ์ (๊ณ์ ์ ํ์ ํ์)
|
|
@@ -375,6 +389,20 @@ Session 106: during 529 buffering, a CHANGELOG was misdiagnosed as "61x ์ค๋ณต
|
|
|
375
389
|
|
|
376
390
|
Origin: #1269 โ (R020 self-violation, session 106).
|
|
377
391
|
|
|
392
|
+
### Failure/Interrupt Report โ Actual Failure (reverse direction)
|
|
393
|
+
|
|
394
|
+
์ ํญ๋ชฉ๋ค์ ๋์ฒด๋ก "์ฑ๊ณต ๋ณด๊ณ โ ์ค์ ์ฑ๊ณต"์ ๋ค๋ฃจ์ง๋ง, **์ญ๋ฐฉํฅ**๋ ๋์ผํ๊ฒ ๊ฒ์ฆ ๋์์ด๋ค โ "์คํจ/์ค๋จ ๋ณด๊ณ "๋ฅผ ๋ฐ์์ ๋๋ ground-truth๋ฅผ ํ์ธํ๊ธฐ ์ ์๋ ์ค์ ๋ก ์คํจํ๋ค๊ณ ๋จ์ ํ์ง ์๋๋ค.
|
|
395
|
+
|
|
396
|
+
| ์ฆ์ | ์ค์ ์ํ | ํ์ธ ์๋จ |
|
|
397
|
+
|------|-----------|-----------|
|
|
398
|
+
| **v2.1.246+**: ๋งค์ฐ ํฐ ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์ด ๋ค Write ๋๊ตฌ๊ฐ "Out of memory"๋ฅผ ๋ณด๊ณ ํ๊ฑฐ๋ ์ค๋ ๋ฉ์ถค | **ํ์ผ ์์ฒด๋ ์ ์์ ์ผ๋ก ์ฐ์ฌ ์์๋ค** | ๋๊ตฌ์ ์คํจ ๋ณด๊ณ ๋์ ํ์ผ ๋ด์ฉ/ํฌ๊ธฐ๋ฅผ ์ง์ ์ฌํ์ธ |
|
|
399
|
+
| **v2.1.246+**: ํค๋๋ฆฌ์ค/์๊ฒฉ ์ธ์
์์ ์์ ๋ฉ์์ง๋ก ์ธํฐ๋ฝํธ๋ MCP ๋๊ตฌ ํธ์ถ์ด "์ถ๋ ฅ ์์ด ์๋ฃ๋จ"์ผ๋ก ๋ณด๊ณ ๋จ(v2.1.246 ์ด์ ) | ์ค์ ๋ก๋ **์ธํฐ๋ฝํธ**๋๋ค โ ์ ์ ์๋ฃ๊ฐ ์๋์๋ค | v2.1.246+๋ ๋ช
์์ interrupted ์๋ฌ๋ก ๋ณด๊ณ ํ๋๋ก ์์ ๋จ; ๊ตฌ๋ฒ์ ์ธ์
์ "๋น ์ถ๋ ฅ ์๋ฃ"๋ ๋ฌด์ ์ธํฐ๋ฝํธ์์ ์ ์์ |
|
|
400
|
+
| **v2.1.246+**: ์คํ ์ค ์ธํฐ๋ฝํธ๋ ์
ธ ๋ช
๋ น์ด "Ran 1 shell command"๋ก๋ง ํ์(์๋ ธ๋ค๋ ํ์ ์์, v2.1.246 ์ด์ ) | ๋ช
๋ น์ด **์์ฃผํ์ง ๋ชปํ๋ค** | ์ถ๋ ฅ ์๊ฒฐ์ฑ์ ๋ณ๋๋ก ํ์ธ(์์ ์ถ๋ ฅ ํจํด ๋์กฐ) ์์ด "์คํ๋จ"๋ง์ผ๋ก ์ฑ๊ณต ๋จ์ ๊ธ์ง |
|
|
401
|
+
|
|
402
|
+
> **v2.1.234+**: print/SDK ๋ชจ๋์์ SIGTERM ์์ ์ ๋ ์ด์ interrupted turn์ด๋ synthetic tool denial์ ๊ธฐ๋กํ์ง ์๋๋ค(๋ช
๋ น์ ์ฌ์ ํ ์ข
๋ฃ๋๊ณ ํ๋ก์ธ์ค๋ exit code 143). ๋ฌด์ธ ์คํ(`-p` ๋ชจ๋) ๊ฐ์ ์ข
๋ฃ ํ ํธ๋์คํฌ๋ฆฝํธ๋ฅผ ์๋ฃ ํ์ ๊ทผ๊ฑฐ๋ก ์ธ ๋, v2.1.234+์์๋ SIGTERM์ ์ํ ์ค๋จ์ด ํธ๋์คํฌ๋ฆฝํธ ์์ "interrupted"๋ก ๋จ์ง ์๋๋ค๋ ์ ์ ์ ์ ํด์ผ ํ๋ค โ ํธ๋์คํฌ๋ฆฝํธ๊ฐ ๊นจ๋ํด ๋ณด์ฌ๋ ์ค์ ๋ก๋ SIGTERM์ผ๋ก ์๋ ธ์ ์ ์๋ค.
|
|
403
|
+
|
|
404
|
+
**๊ตํ**: ์ Core Rule("actual outcome โ attempt")์ ๋ฐฉํฅ์ด ์๋ค โ ๋๊ตฌ๊ฐ ์ฑ๊ณต์ ๋ณด๊ณ ํ๋ ์คํจ๋ฅผ ๋ณด๊ณ ํ๋ , ๋ณด๊ณ ์์ฒด๋ ground-truth๊ฐ ์๋๋ค. ์คํจ ๋ณด๊ณ ๋ฅผ ๋ฐ์๋ค๊ณ ๊ณง๋ฐ๋ก ์ฌ์๋ยท๋กค๋ฐฑ์ ๋ค์ด๊ฐ์ง ๋ง๊ณ , ๋จผ์ ์ค์ ์ฐ์ถ๋ฌผ ์ํ๋ฅผ ํ์ธํ๋ค.
|
|
405
|
+
|
|
378
406
|
### CI Publish-Step Error vs Published-Artifact Ground Truth
|
|
379
407
|
|
|
380
408
|
> Origin: #1332 โ `npm publish --provenance` emitted a Sigstore `TLOG_CREATE_ENTRY_ERROR` 409, but the publish step's `|| npm view <pkg>@<ver>` fallback recovered (the package WAS published) and release.yml succeeded on all jobs. A subagent read the tlog error in the logs and prematurely declared the run "failed", recommending a re-run; deterministic ground-truth (`npm view`, `gh release view`) showed the release had fully succeeded.
|
|
@@ -95,21 +95,37 @@ R016์ ์น๊ฒฉ ๋ฃจํ(์๋ฐ ์ง์ โ ๊ท์น ์กฐํญ ์ถ๊ฐ)๋ ์ฝํผ์ค์ **
|
|
|
95
95
|
|
|
96
96
|
### ๋ฒ์ ๋
ธํธ ๋ณด์กด์ ์ฑ
|
|
97
97
|
|
|
98
|
-
- ๊ท์น ๋ด CC ๋ฒ์ ๋
ธํธ(`> **v2.1.NNN+**:`)๋ ์ต๊ทผ 2-3๊ฐ ๋ง์ด๋ ๋ฆด๋ฆฌ์ฆ(ํํ ๊ธฐ์ค v2.1.
|
|
98
|
+
- ๊ท์น ๋ด CC ๋ฒ์ ๋
ธํธ(`> **v2.1.NNN+**:`)๋ ์ต๊ทผ 2-3๊ฐ ๋ง์ด๋ ๋ฆด๋ฆฌ์ฆ(ํํ ๊ธฐ์ค v2.1.230 ์ด์)๋ง visible ์ ์งํ๋ค.
|
|
99
99
|
- ๊ทธ ์ดํ ๋ฒ์ ๋
ธํธ๋ HTML-commentํ(๋ฌด์์ค ์ค๊ฐ ๋จ๊ณ) ํ๊ฑฐ๋ `guides/claude-code/15-version-compatibility.md`๋ก ์ด๊ดํ๋ค.
|
|
100
100
|
- `claude-native` ์คํฌ์ด ์์ฑํ๋ ๋ฒ์ ์ถ์ ์ด์๋ฅผ ๊ท์น์ ๋ฐ์ํ ๋, ์ต์ ๋ง visible๋ก ๋๊ณ ๊ตฌ๋ฒ์ ์ ์ฆ์ ์๋ํ๋ค.
|
|
101
|
+
- **๊ธฐ์ค์ ์ ๊ณ ์ ์์๊ฐ ์๋๋ผ ์ต์ CC ๋๋น ์๋ ํญ์ผ๋ก ์ ์งํ๋ค**: ๊ธฐ์ค์ v2.1.212๊ฐ ์ค์ ๋ ๋น์ CC ์ต์ ์ v2.1.233์ด์์ผ๋ฏ๋ก ๋ณด์กด ํญ์ ์ฝ 21 patch์๋ค. ์ด๋ฒ ์ํฅ(v1.1.50, `claude --version` = `npm view @anthropic-ai/claude-code version` ์ค์ธก = v2.1.251) ์์ ์ ๊ฐ์ ํญ์ ์ ์งํ๋ ค๋ฉด ๊ธฐ์ค์ ์ด v2.1.230์ด์ด์ผ ํ๋ค โ ๊ธฐ์ค์ ๊ฐฑ์ ์ "์ต์ ์ค์ธก๊ฐ โ ์ฝ 20 patch"๋ก ์ฌ๊ณ์ฐํ ๊ฒ.
|
|
102
|
+
|
|
103
|
+
#### ์ํด ํ์ ๊ธฐ์ค (๊ธฐ์ค์ ๋ฏธ๋ง โ ์๋ ์ํด)
|
|
104
|
+
|
|
105
|
+
๊ธฐ์ค์ ๋ฏธ๋ง์ ์ํด **๊ฒํ ๋์**์ ์ ์ํ ๋ฟ, ์ํด **์ฌ๋ถ**๋ฅผ ์๋์ผ๋ก ๊ฒฐ์ ํ์ง ์๋๋ค. ๊ธฐ์ค์ ๋ฏธ๋ง ๋
ธํธ๋ ๋ค์ 3๊ฐ ์กฐ๊ฑด์ **๋ชจ๋** ์ถฉ์กฑํ ๋๋ง ์ํด(HTML-commentํ)ํ๋ค โ ํ๋๋ผ๋ ๊ฑธ๋ฆฌ๋ฉด **์ ์ง**ํ๊ณ , ์ ์ง ํ์ ๊ณผ ์ฌ์ ๋ฅผ ์ค์ ๊ธฐ๋ก์ ๋จ๊ธด๋ค.
|
|
106
|
+
|
|
107
|
+
| ์กฐ๊ฑด | ํ์ |
|
|
108
|
+
|------|------|
|
|
109
|
+
| (a) ์ธ์ฉ ๋ถ์ฌ | ๋ค๋ฅธ ์ด๋ค visible ๋
ธํธ๋ ๊ทธ๊ฒ์ "๊ฐ์ ๊ณ์ด"(cf., ์ฐ์ฅ์ , ์ธ์ ๋ฑ)๋ก ์ธ์ฉํ์ง ์๋๊ฐ |
|
|
110
|
+
| (b) ๋นํํ | ํํ ๋์์ ๊ท์ ํ์ง ์๋๊ฐ (์: ์ด๋ฏธ ๋กค๋ฐฑ/์ฌ์์ ๋ ๊ณผ๊ฑฐ ์ํ ์์ ) |
|
|
111
|
+
| (c) ์ง๋จ ํจ์ ์๋ฉธ | ํ๊ณ ์ ์ง๋จ ํจ์(๊ณผ๊ฑฐ ๊ด์ธก ์ฌํด์ ๊ทผ๊ฑฐ)๊ฐ ๋ ์ด์ ์๋๊ฐ |
|
|
112
|
+
|
|
113
|
+
์ธ ์กฐ๊ฑด ๋ชจ๋ ์ฐธ โ ์ํด. ํ๋๋ผ๋ ๊ฑฐ์ง โ ์ ์ง(anchor๋ก ์ธ์ฉ๋๊ฑฐ๋, ํํ ๋์์ ์์ ํ๊ฑฐ๋, ์ง๋จ ํจ์๊ฐ ์ด์์๋ ๋
ธํธ๋ ๊ธฐ์ค์ ๋ฏธ๋ง์ด์ด๋ ๋ณด์กด ๊ฐ์น๊ฐ ์๋ค). ์ด ๊ธฐ์ค์ v1.1.50 4๊ฐ ๋ณ๋ ฌ ๊ทธ๋ฃน์ ์ค์ ํ์ ์์ ์ญ์ถ์ถํ ๊ฒ์ด๋ค(์๋ ์ค์ ์ฐธ์กฐ) โ "๊ธฐ์ค์ ๋ฏธ๋ง = ์ฆ์ ์ํด"๋ก ๋ฌธ์ ๊ทธ๋๋ก ์ฝ์ผ๋ฉด ์ด ๊ธฐ์ค๊ณผ ๋ชจ์๋๋ค.
|
|
101
114
|
|
|
102
115
|
#### ๋ณด์กด ๊ธฐ์ค ๋ณ๊ฒฝ = ์ ๋ฃฐ ํ์ผ ์ค์ (๊ฐ์ ๋ฆด๋ฆฌ์ฆ ๋ด ํ์)
|
|
103
116
|
|
|
104
|
-
๋ณด์กด ๊ธฐ์ค์ ์ ์ํฅํ๋ฉด **๊ฐ์ ๋ฆด๋ฆฌ์ฆ์์ 23๊ฐ ๋ฃฐ ํ์ผ ์ ์๋ฅผ
|
|
117
|
+
๋ณด์กด ๊ธฐ์ค์ ์ ์ํฅํ๋ฉด **๊ฐ์ ๋ฆด๋ฆฌ์ฆ์์ 23๊ฐ ๋ฃฐ ํ์ผ ์ ์๋ฅผ ์ค์**ํ๋ค โ "์ค์"์ ๊ธฐ์ค ๋ฏธ๋ง ๋
ธํธ์ **์ ๋ HTML-commentํ**๊ฐ ์๋๋ผ, ์ ใ์ํด ํ์ ๊ธฐ์คใ 3์กฐ๊ฑด์ ๋ฐ๋ฅธ **์ ์ ๊ฒํ **(๊ฐ ๋
ธํธ๋ฅผ ์ํด/์ ์ง๋ก ํ์ ํ๊ณ ์ ์ง ์ ์ฌ์ ๋ฅผ ๊ธฐ๋ก)๋ฅผ ์๋ฏธํ๋ค. ๊ธฐ์ค๋ง ์ฌ๋ฆฌ๊ณ ๊ฒํ ์์ฒด๋ฅผ ๋ค์ ๋ฆด๋ฆฌ์ฆ๋ก ์ด์ํ๋ฉด ์ฝํผ์ค๊ฐ ๊ธฐ์ค๊ณผ ๋ถ์ผ์นํ ์ํ๋ก ๋จ๊ณ , ๊ทธ ๋ถ์ผ์น๋ ๋ค์ ํ๊ณ ์์ "์์กด N๊ฑด" ๋ถ์ฑ๋ก ์ฌ๋ฐ๊ฒฌ๋ ๋๊น์ง ๋ณด์ด์ง ์๋๋ค โ **์ด์ ๊ธ์ง๋ ๋ณํ์ง ์๋๋ค**, ๋ณํ๋ ๊ฒ์ "์ ์ ์ํด"๊ฐ ์๋๋ผ "์ ์ ํ์ "์ด ์๋ฌด๋ผ๋ ์ ์ด๋ค. ์ค์ ๋ฒ์๋ `.claude/rules/**`์ `templates/.claude/rules/**` ์์ชฝ์ด๋ฉฐ, ์์กด ์ฌ๋ถ๋ **HTML ์ฃผ์ ์/๋ฐ์ ๊ตฌ๋ถํด** ์ค์ธกํ๋ค โ ๋จ์ `grep`์ ์ด๋ฏธ ์ํดํ ์ฃผ์ ๋ด๋ถ ๋
ธํธ๊น์ง ์ธ์ด ํ์ ์ ์๊ณกํ๋ค.
|
|
105
118
|
|
|
106
119
|
| Anti-pattern | Required |
|
|
107
120
|
|--------------|----------|
|
|
108
|
-
| ๋ณด์กด ๊ธฐ์ค์ ๋ง ์ํฅํ๊ณ ๊ธฐ์กด ๋
ธํธ
|
|
109
|
-
|
|
|
121
|
+
| ๋ณด์กด ๊ธฐ์ค์ ๋ง ์ํฅํ๊ณ ๊ธฐ์กด ๋
ธํธ ๊ฒํ ๋ฅผ ๋ค์ ๋ฆด๋ฆฌ์ฆ๋ก ์ด์ | ๊ธฐ์ค ์ํฅ๊ณผ ์ ๋ฃฐ ํ์ผ์ **์ ์ ํ์ **(์ํด/์ ์ง + ์ ์ง ์ฌ์ ๊ธฐ๋ก)์ ๊ฐ์ ๋ฆด๋ฆฌ์ฆ์์ ์๋ฃ |
|
|
122
|
+
| ๊ธฐ์ค์ ๋ฏธ๋ง ๋
ธํธ๋ฅผ ํ์ ์์ด ์ ๋ HTML-commentํ | ใ์ํด ํ์ ๊ธฐ์คใ 3์กฐ๊ฑด(์ธ์ฉ ๋ถ์ฌ AND ๋นํํ AND ์ง๋จ ํจ์ ์๋ฉธ)์ ์ ์ฉํด ํญ๋ชฉ๋ณ ํ์ |
|
|
123
|
+
| `grep -c` ํํธ ์๋ก ์์กด ํ์ | ์ฃผ์ ์/๋ฐ์ ๊ตฌ๋ถํด **visible ์์กด**๋ง ๊ณ์ โ ์์กด ์์ฒด๋ ๊ฒฐํจ์ด ์๋๋ค(์ ์ง ํ์ ์ ๊ฒฐ๊ณผ์ผ ์ ์์) |
|
|
110
124
|
|
|
111
125
|
Origin: #1563 ์ฐ๋น #4 โ R016์ด ๋ณด์กด ๊ธฐ์ค์ v2.1.212๋ก ๊ท์ ํ์ผ๋ R001/R005/R012์ visible v2.1.208 ๋
ธํธ 3๊ฑด์ด ์์กดํด v1.1.44์์ ๋ค๋ฆ๊ฒ ์ํด. Cross-reference: R005(HTML-comment ์ปจํ
์คํธ ์ต์ ํ), R017(Count Sync โ ์ ์ grep + ์๋ฏธ ํ๋ณ).
|
|
112
126
|
|
|
127
|
+
**์ค์ (v1.1.50)**: ๊ธฐ์ค์ ์ v2.1.212โv2.1.230์ผ๋ก ์ํฅํ ๋, ๋ฃฐ ํ์ผ ์์ ๊ถ์ 4๊ฐ ๋ณ๋ ฌ ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฐฐํด ๊ฐ ๊ทธ๋ฃน์ด ์๊ธฐ ๋ด๋น ํ์ผ๋ง ์ค์ํ๋ค โ ์ค์์ **์์
์ข
๋ฅ**(์: "์ํด ๋ด๋น" vs "์ ๊ท ๋
ธํธ ๋ด๋น")๊ฐ ์๋๋ผ **ํ์ผ ์์ ๊ถ**์ผ๋ก ๋ถ๋ฐฐํด์ผ ๋ณ๋ ฌ ์์ด์ ํธ ๊ฐ ๋์ผ ํ์ผ ๋์ ํธ์ง ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ค(R009 File-Disjoint ์์น์ ๋ฃฐ ์ฝํผ์ค ์์ฒด ์ ์ฉ ์ฌ๋ก). ์ค์ ๊ฒฐ๊ณผ๋ **์ํด 2๊ฑด / ์ ์ง ๋ค์**(๊ธฐ์ค์ ๋ฏธ๋ง visible ๋
ธํธ 49๊ฑด์ด 11๊ฐ ํ์ผ์ ์์กด โ ์ ์ ๊ฒํ ํ ์ ์ง ํ์ ) โ ์ํด๋ 2๊ฑด์ ์ด๋ค visible ๋
ธํธ๋ ์ธ์ฉํ์ง ์๋ ์์ ์ด๋ ฅ ์์ฌ(R006 v2.1.201/204: v2.1.201 Sonnet 5 harness reminder ์ ๋ฌ๋ฐฉ์, v2.1.204 headless SessionStart ์คํธ๋ฆฌ๋ฐ)์๊ณ , ์ ์ง๋ ๋
ธํธ ๋๋ถ๋ถ์ ๋ค๋ฅธ visible ๋
ธํธ๊ฐ "๊ฐ์ ๊ณ์ด"๋ก ์ธ์ฉํ๋ anchor์ด๊ฑฐ๋(์: v2.1.222๊ฐ v2.1.211/212/214๋ฅผ ์ธ์ฉ) ํํ ๋์์ ์์ ์ค์ด์๋ค. ์ํด 2๊ฑด์ด ๋ฐ๋ก "์ธ์ฉ ์๋ ์์ฌ๋ง ์ํด๋๋ค"๋ ํ์ ๊ธฐ์ค์ ์์ฑ ์ฌ๋ก๋ค. **ํ์ ์ด ๋ฒ์ ๋ฒํธ๊ฐ ์๋๋ผ ์ธ์ฉ ๊ด๊ณ๋ก ์ด๋ฃจ์ด์ก๋ค๋ ๋ป**์ด๋ฉฐ, **์ด ํ์ ๊ธฐ์ค์ ๊ฐ์ ๋ฆด๋ฆฌ์ฆ์์ ์ ์ ์กฐํญ์ผ๋ก ์น๊ฒฉํ๋ค**(sauron FAIL ์ง์ โ ๊ฐ์ ์ปค๋ฐ ๋ด ์ ํฉํ โ ์ ใ์ํด ํ์ ๊ธฐ์คใ์ฐธ์กฐ). ์์กด 49๊ฑด/11ํ์ผ์ ๊ฒฐํจ์ด ์๋๋ผ 3์กฐ๊ฑด ํ์ ์ ๋ฐ๋ฅธ ์ ์ง ๊ฒฐ๊ณผ์ด๋ฏ๋ก, ๋ค์ ํ๊ณ ๊ฐ ์ด๋ฅผ "์์กด N๊ฑด" ๋ถ์ฑ๋ก ์ค์ธํ์ง ์๋๋ก ์ฌ๊ธฐ ๊ณ ์ ๊ธฐ๋กํ๋ค.
|
|
128
|
+
|
|
113
129
|
### Cross-References
|
|
114
130
|
|
|
115
131
|
R005(HTML-comment ์ปจํ
์คํธ ์ต์ ํ), R023(Deprecated-Platform-Feature Staleness Check โ ํ๊ธฐ ์ฐธ์กฐ๋ฅผ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ํ์งํ์ฌ ์ํด ํ๋ณด๋ฅผ ์กฐ๊ธฐ ๋ฐ๊ตด), Origin #1473.
|
|
@@ -35,6 +35,10 @@ oh-my-customcode uses an **advisory-first enforcement model**. Most rules are en
|
|
|
35
35
|
|
|
36
36
|
> **v2.1.222+**: PreToolUse auto-allow ํ
์ด background agent task(summaries/compaction/renames)์์ tool restriction์ ์ฐํํ๋ ๋ฌธ์ ๊ฐ ์์ ๋์์ต๋๋ค. ์ฆ ์ Enforcement Tiers ํ์ **Hard Block ๊ณ์ธต(stage-blocker, dev-server tmux, rule-deletion-guard)์ด background agent task ๊ฒฝ๋ก์์ ์ฐํ๋ ์ ์์๋ค**๋ ๋ป์ด๋ฉฐ, background agent๋ฅผ ์ฐ๋ ์ฅ๊ธฐ ๋ฌด์ธ ๋ฃจํ์์ hard-block ํ
์ด ์ค์ ๋ก๋ ๊ฐ์ ๋์ง ์๋ ๊ตฌ๊ฐ์ด ์กด์ฌํ์ต๋๋ค. v2.1.211/212/214 ํ
๊ฒฐ์ ์กด์ค ์ฒด์ธ์ ์ฐ์ฅ์ ์
๋๋ค.
|
|
37
37
|
|
|
38
|
+
> **v2.1.247+**: ํ
๋๋ background agent๊ฐ ์ ๋ฉ๊ฐ๋ฐ์ดํธ์ error ์ถ๋ ฅ์ ์ฐ์ด ๋ํ๋ฅผ overflow์์ผ ์ธ์
์ด "Prompt is too long"์ผ๋ก ๋ฉ์ถ๋ ๊ฒฐํจ์ด ์์ ๋์์ต๋๋ค. ๊ฐ์ ๋ฆด๋ฆฌ์ฆ์์ hook/background task์ output file์ ์ธ ์ ์์ ๋ ๋ฌดํ ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐํ๋ ๋ฌธ์ ๋ ์์ ๋์ด, ์ด์ ์ถ๋ ฅ์ด ์์ค๋ ์์น๋ฅผ ํ์ผ์ ๋จ๊น๋๋ค. ์ด ์ ์ฅ์๋ advisory ํ
(`r007-r008-drift-advisor.sh`, `failure-ledger.sh`, `fail-axis-cause-advisor.sh` ๋ฑ)์ ๋ค์ ์ด์ฉํ๋ฏ๋ก, ํ
์ถ๋ ฅ ํญ์ฃผ๊ฐ ์ธ์
์์ฒด๋ฅผ wedge์ํค๋ ์ด ์คํจ ํด๋์ค์ ํด๋นํฉ๋๋ค โ v2.1.211/212/214/222 ํ
์ ๋ขฐ์ฑ ๊ณ์ด์ ์ฐ์ฅ์ ์
๋๋ค.
|
|
39
|
+
|
|
40
|
+
> **v2.1.248+**: ํ
๊ด์ธก์ฑ์ด ๋ ๊ฑด ๊ฐํ๋์์ต๋๋ค โ (a) `PermissionRequest`/`PreToolUse` ํ
์ด ์ ํจํ์ง ์์ ์๋ต์ ์ถ๋ ฅํด background session์ด ์กฐ์ฉํ ๋๊ธฐํ๋ ๊ฒฐํจ์ด ์์ ๋์ด, ์ด์ `claude agents` ํ์ด ํด๋น ํ
์ด๋ฆ๊ณผ ์คํค๋ง ์๋ฌ๋ฅผ ํ์ํฉ๋๋ค. (b) ํ
์ด stdout์ผ๋ก ๋ธ `{โฆ}` ๊ฐ์ฒด๊ฐ ์ ํจํ JSON์ด ์๋ ๋ ์กฐ์ฉํ plain text๋ก ์ฒ๋ฆฌํ๋ ๊ฒฐํจ์ด ์์ ๋์ด, ์ด์ parse ์๋ฌ์ ํจ๊ป ํ
์๋ฌ๋ก ๋ณด๊ณ ๋ฉ๋๋ค. ์ v2.1.214 "ํ
stdout JSON์ด ์คํค๋ง ๊ฒ์ฆ์ ์คํจํ ๋ exit code 2๊ฐ ๋ฌธ์๋๋ก ์ฐจ๋จํ์ง ๋ชปํ๋ ๋ฌธ์ " ๋
ธํธ์ ๊ฐ์ ๊ณ์ด โ ํ
์คํจ๊ฐ ๋ฌด์์์ ๊ฐ์ํ๋๋ ํ๋ฆ์ ์ฐ์์
๋๋ค.
|
|
41
|
+
|
|
38
42
|
## Why Advisory-First
|
|
39
43
|
|
|
40
44
|
1. **Agent flexibility**: Hard blocks can trap agents in unrecoverable states
|
|
@@ -488,6 +488,12 @@ Before spawning any agent:
|
|
|
488
488
|
|
|
489
489
|
> **v2.1.232+**: interactive session์ **non-teammate ์์ด์ ํธ ์คํฐ์ด ๊ธฐ๋ณธ background ์คํ**์ผ๋ก ๋ฐ๋์์ต๋๋ค(subagent forking ๊ธฐ๋ณธ ํ์ฑํ์ ์ผ๋ถ). ์ฆ Agent ๋๊ตฌ ํธ์ถ์ ๋ฐํ์ "์์
์๋ฃ"๊ฐ ์๋๋ผ **"๋ฐฑ๊ทธ๋ผ์ด๋ ์ฐฉ์"์ผ ์ ์์ผ๋ฏ๋ก**, ์ค์ผ์คํธ๋ ์ดํฐ๋ ์คํฐ ๋ฐํ์ด๋ ์๋ฃ ํต์ง๋ฅผ ์๋ฃ ๊ทผ๊ฑฐ๋ก ์ผ์ง ์๊ณ R020 ground-truth(`git status` / `grep` / ๊ฒ์ฆ ์คํฌ๋ฆฝํธ)๋ก ํ์ธํฉ๋๋ค โ ๊ตฌ๋ฒ์ ์์๋ ๋๊ธฐ ๋ฐํ์ด ๊ธฐ๋ณธ์ด๋ผ "๋ฐํ = ์๋ฃ"๋ผ๋ ์๋ฌต ์ ์ ๊ฐ ๋์ฒด๋ก ์ฑ๋ฆฝํ๊ณ , ๊ทธ ์ ์ ๊ฐ ์ด ๋ฒ์ ๋ถํฐ ๋ฌด๋์ง๋๋ค. ์ v2.1.221 `/status` ํ์์ v2.1.211(์คํ ์ค agent ๊ฒฐ๊ณผ๋ฅผ ์ง์ด๋ด์ง ์์)์ด ์ง๋จ ๋ณด์กฐ ์๋จ์
๋๋ค. cross-ref R009(fork์ ์ปจํ
์คํธ ์์), R018(Teams member๋ non-teammate๊ฐ ์๋๋ฏ๋ก ์ด ๋ณ๊ฒฝ ๋์ ๋ฐ).
|
|
490
490
|
|
|
491
|
+
> **โ
v2.1.234+**: ์ธ์
๋ฒ์ permission ์๋ต(**๊ฑฐ๋ถ ํฌํจ**)์ด background subagent์ tool permission ํ๋กฌํํธ์ ์๋ตํ ๋ **๋๋กญ**๋๋ ๊ฒฐํจ์ด ์์ ๋์์ต๋๋ค. ๊ตฌ๋ฒ์ ์์๋ background subagent์ ๋ํ ์น์ธยท๊ฑฐ๋ถ๊ฐ **์ ์ฉ๋์ง ์๊ณ ์ฌ๋ผ์ง ์ ์์์ต๋๋ค** โ ์ฆ "๊ฑฐ๋ถํ๋ค"๊ฐ "๊ฑฐ๋ถ๊ฐ ์ ์ฉ๋๋ค"์ ์ฆ๊ฑฐ๊ฐ ์๋์์ต๋๋ค. ์ v2.1.232 non-teammate ๊ธฐ๋ณธ background ์คํ ์์ ๊ณผ ๊ฒฐํฉํ๋ฉด, ๊ณผ๊ฑฐ ๋ฌด์ธ ๋ฃจํ์์ ์๋ธ์์ด์ ํธ๊ฐ ์์๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ ์์ธ์ ์ด๊ฒ์ผ๋ก ์ฌํด์ํ ์ฌ์ง๊ฐ ์์ต๋๋ค(๋จ, ํ์ ์ง๋จ์ด ์๋๋ผ ์์ธ ํ๋ณด๋ก๋ง ์ทจ๊ธ โ R020 Diagnostic Hypothesis Verification).
|
|
492
|
+
|
|
493
|
+
> **v2.1.234+**: background task ์๋ฆผ(ํด ์ฌ์ด์ ์ ๋ฌ๋๋ ๊ฒ)์ด ์ด์ mid-turn ์ ๋ฌ๊ณผ ๋์ผํ๊ฒ `<system-reminder>` ํ๊ทธ ์์ ๋ด๊ฒจ ๋ชจ๋ธ์ ์ ๋ฌ๋ฉ๋๋ค. ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ background ์์ด์ ํธ ์๋ฃ ํต์ง๋ฅผ ๋ฐ๋ ๊ฒฝ๋ก๊ฐ ์ด๊ฒ์ด๋ฏ๋ก, ๊ทธ ํต์ง๋ **์์คํ
๋ฉ์์ง์ด์ง ์ฌ์ฉ์ ์
๋ ฅ์ด ์๋๋๋ค** โ R015 "๋ค๋ฅธ ์์ด์ ํธ์ ๋ฉ์์ง๋ ๊ฒฐ์ฝ ์ฌ์ฉ์์ ์น์ธ์ด ์๋๋ค" ์์น๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, background ํต์ง ์ญ์ ์ฌ์ฉ์ ์น์ธ์ ์ฆ๊ฑฐ๋ก ์ธ์ฉํ์ง ์์ต๋๋ค. ์ด์ ์๋ ํด ์ฌ์ด ์๋ฆผ ํ์์ด mid-turn๊ณผ ๋ฌ๋ผ ์ด ๊ตฌ๋ถ์ด ๋ ๋ช
ํํ์ต๋๋ค.
|
|
494
|
+
|
|
495
|
+
> **cross-ref (v1.1.50 ์ค์ธก)**: R018์ `maxTurns` partial ํ์(v2.1.246)๊ฐ R020 ใVerification-Delegation Non-Terminationใ mid-step ์ข
๋ฃ ํจํด์ **์ค์ฌ ์์ธ ์ค ํ๋๋ก ํ์ **๋์๋ค โ ์์ ํ๋กฌํํธ์ ์ข
๋ฃ ๊ธ์ง clause๋ฅผ ์๋ฌด๋ฆฌ ๊ฐํํด๋, ์ ๋จ ์ฃผ์ฒด๊ฐ ํ๋ซํผ turn ํ๋์ด๋ฉด ์์ด์ ํธ์ ๋ฟ์ง ์๋๋ค. ์์ ๊ฒฝ๊ณ๋ฅผ ๋จ์ผ ๋ชฉํ๋ก ๋ถํ ํ๋ ๊ฒ(R020 ํด๋น ์กฐํญ)์ด ์ฌ์ ํ 1์ฐจ ๋ฐฉ์ด์ ์ธ ์ด์ ๋ค. ์์ธ๋ R018 (MUST-agent-teams.md) Member Completion Verification ์น์
.
|
|
496
|
+
|
|
491
497
|
## Agent Capability Pre-Check
|
|
492
498
|
|
|
493
499
|
Before delegating a task to a subagent, MUST verify the target agent's tool capabilities against the task requirements. Failure to pre-check causes round-trip waste (delegation โ failure โ re-delegation).
|
|
@@ -25,6 +25,8 @@ Examples: creating multiple agents, reviewing multiple files, batch operations o
|
|
|
25
25
|
|
|
26
26
|
Origin: #1518 (์ฐ๋น #1 โ git ์์ด์ ํธ 2๊ฐ ๊ทผ์ ์คํ์ผ๋ก ์์
๋ธ๋์น stale; ํธ์ง ํ์ผ์ disjoint์์).
|
|
27
27
|
|
|
28
|
+
> **โ
v2.1.246+**: `/ultrareview` ์คํ๊ณผ ํด๋ผ์ฐ๋ ์ธ์
์ **๊ฐ์ ์ ์ฅ์(์ฌ๋ฌ worktree ํฌํจ)์์ ๋์์ ์์**ํ๋ฉด, ํ ์คํ์ด ๋ค๋ฅธ ์คํ์ **์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ๋ถ๊ณผ ํจ๊ป ์์**๋๋ ๊ฒฐํจ์ด ์์ ๋์์ต๋๋ค. ์ด๋ ์ ์กฐํญ์ด ๊ฒฝ๊ณ ํ๋ ์๋๋ฆฌ์ค๊ฐ **CC ํ๋ซํผ ์์ฒด์์ ์ค์ฆ๋ ์ฌ๋ก**์
๋๋ค โ ์ด ์กฐํญ์ ์ด ์ ์ฅ์์ ๊ฒฝํ(#1518)์์ ๋์๋๋ฐ, ํ๋ซํผ์ด ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ์ ๊ฒฐํจ์ ๊ฒช๊ณ ๊ณ ์ณค๋ค๋ ์ฌ์ค์ด ์กฐํญ์ ์ผ๋ฐ์ฑ์ ๋ท๋ฐ์นจํฉ๋๋ค. ๊ตฌ๋ฒ์ ์์๋ ๋ณ๋ ฌ ์คํ์ด **์๋ก์ uncommitted ๋ณ๊ฒฝ๋ถ์ ์์**ํ์ผ๋ฏ๋ก, ๊ณผ๊ฑฐ ์ธ์
์ ์ค๋ช
๋์ง ์๋ ์ค์ผ์ ์ด ์์ธ์ผ๋ก ์ฌํด์ํ ์ ์์ต๋๋ค.
|
|
29
|
+
|
|
28
30
|
#### ํ์ผ disjoint โ ์์ disjoint (Origin: #1598)
|
|
29
31
|
|
|
30
32
|
git ์ํ ์ธ์๋ ๋ณ๋ ฌ ์์ด์ ํธ๊ฐ ๊ฒฝํฉํ๋ ๊ณต์ ์์์ด ์๋ค โ **๊ฒ์ฆ ๋ช
๋ น์ด ๋ง์ง๋ ์ ์ฅ์ ํ์ผ**, **CPU**, **`$TMPDIR`**. ํธ์ง ํ์ผ์ด disjointํ๋ค๋ ์ฌ์ค์ ์ด ์
์ค ์ด๋ ๊ฒ๋ ๋ณด์ฅํ์ง ์๋๋ค.
|
|
@@ -127,7 +129,7 @@ Reference: #1320 (fix), #1321 (session 113 retrospective ์ฐ๋น #1), `feedback_l
|
|
|
127
129
|
|
|
128
130
|
> **v2.1.224+**: **์ธ์
๋น 200 subagent spawn cap์ด ์ ๊ฑฐ**๋์ด ์ฅ๊ธฐ ์ธ์
์ด ์ ๊ท ์์ด์ ํธ๋ฅผ ๊ฑฐ๋ถํ์ง ์์ต๋๋ค(๋์์ฑ ์ ํ๊ณผ depth ์ ํ์ ์ ์ง). ์ ํ์ "Max instances 5 concurrent"๋ **๋์์ฑ** ์ ํ์ด๋ฏ๋ก ๊ทธ๋๋ก ์ ํจํฉ๋๋ค โ ์ ๊ฑฐ๋ ๊ฒ์ ์ธ์
๋์ ์ด๋ cap์
๋๋ค. `/fsd` ๋ฑ ์ฅ๊ธฐ ๋ฌด์ธ ๋ฃจํ์์ ํ๋ฐ ๋ฐ๋ณต์ ์คํฐ ์คํจ๋ฅผ ๋ ์ด์ ๋์ cap์ผ๋ก ์ง๋จํ์ง ์์ต๋๋ค.
|
|
129
131
|
|
|
130
|
-
> **v2.1.232+**: subagent forking์ด **๊ธฐ๋ณธ ํ์ฑํ**๋์ด `subagent_type: "fork"` ์๋ธ์์ด์ ํธ๊ฐ ์ ์ฒด ๋ํ์ prompt cache๋ฅผ ์์ํฉ๋๋ค. ์ ํ์ "Instance independence โ Isolated context, no shared state"๋ **fork์๋ ์ฑ๋ฆฝํ์ง ์์ต๋๋ค** โ fork๋ ๊ฒฉ๋ฆฌ๋ ๋ณ๋ ฌ ์ธ์คํด์ค๊ฐ ์๋๋ผ ์ปจํ
์คํธ ์ฌ๋ณธ์ด๋ฏ๋ก, ์ Detection Criteria์ ๋
๋ฆฝ์ฑ ์ ์ ๋ก ๋ณ๋ ฌ ๋ฐฐ์น๋ฅผ ์ค๊ณํ ๋ fork๋ฅผ ์ผ๋ฐ subagent์ ๋์ผํ๊ฒ ์ทจ๊ธํ์ง ์์ต๋๋ค(์ค์ผ์คํธ๋ ์ดํฐ ์ปจํ
์คํธ๊ฐ ๊ทธ๋๋ก ์ ๋ฌ๋๋ฏ๋ก ์์ ํ๋กฌํํธ์ ๋ฒ์ ์์ ์ด ์ ์ผํ ๊ฒฝ๊ณ๊ฐ ์๋). ๊ตฌ๋ฒ์ ์์๋ fork๊ฐ opt-in์ด๋ผ ์ด ์์์ด ์์ธ ๊ฒฝ๋ก์์ต๋๋ค. ๋ํ interactive session์ **non-teammate ์์ด์ ํธ ์คํฐ์ด ๊ธฐ๋ณธ background ์คํ**์ด๋ฏ๋ก ์คํฐ ๋ฐํ์ ์๋ฃ ์ ํธ๊ฐ ์๋๋๋ค(R010/R020).
|
|
132
|
+
> **v2.1.232+**: subagent forking์ด **๊ธฐ๋ณธ ํ์ฑํ**๋์ด `subagent_type: "fork"` ์๋ธ์์ด์ ํธ๊ฐ ์ ์ฒด ๋ํ์ prompt cache๋ฅผ ์์ํฉ๋๋ค. ์ ํ์ "Instance independence โ Isolated context, no shared state"๋ **fork์๋ ์ฑ๋ฆฝํ์ง ์์ต๋๋ค** โ fork๋ ๊ฒฉ๋ฆฌ๋ ๋ณ๋ ฌ ์ธ์คํด์ค๊ฐ ์๋๋ผ ์ปจํ
์คํธ ์ฌ๋ณธ์ด๋ฏ๋ก, ์ Detection Criteria์ ๋
๋ฆฝ์ฑ ์ ์ ๋ก ๋ณ๋ ฌ ๋ฐฐ์น๋ฅผ ์ค๊ณํ ๋ fork๋ฅผ ์ผ๋ฐ subagent์ ๋์ผํ๊ฒ ์ทจ๊ธํ์ง ์์ต๋๋ค(์ค์ผ์คํธ๋ ์ดํฐ ์ปจํ
์คํธ๊ฐ ๊ทธ๋๋ก ์ ๋ฌ๋๋ฏ๋ก ์์ ํ๋กฌํํธ์ ๋ฒ์ ์์ ์ด ์ ์ผํ ๊ฒฝ๊ณ๊ฐ ์๋). ๊ตฌ๋ฒ์ ์์๋ fork๊ฐ opt-in์ด๋ผ ์ด ์์์ด ์์ธ ๊ฒฝ๋ก์์ต๋๋ค. ๋ํ interactive session์ **non-teammate ์์ด์ ํธ ์คํฐ์ด ๊ธฐ๋ณธ background ์คํ**์ด๋ฏ๋ก ์คํฐ ๋ฐํ์ ์๋ฃ ์ ํธ๊ฐ ์๋๋๋ค(R010/R020). **v2.1.246+**: ์ด๋ฏธ fork๋์๊ฑฐ๋ backgrounded๋ ์ธ์
์์ ๋ค์ `/fork`ํ๋ฉด ๋น ๋ํ๋ก ์์๋๋ ๊ฒฐํจ์ด ์์ ๋์์ต๋๋ค โ ๊ตฌ๋ฒ์ ์์๋ ์ฌfork ์ ์ ์ปจํ
์คํธยทprompt cache ์์์กฐ์ฐจ ๊นจ์ง ์ ์์์ต๋๋ค.
|
|
131
133
|
|
|
132
134
|
> **v2.1.229+**: workflow fan-out์ด ๊ฐ์ prefix๋ฅผ ๊ณต์ ํ๋ sibling agent๋ฅผ **stagger**ํด ํ์ ์์ด์ ํธ๊ฐ prompt prefix ์บ์๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค(`CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS=0`์ผ๋ก ๋นํ์ฑ). ์ฆ ๋์ผ ์ ๋์ฌ ๋ณ๋ ฌ ๋ฐฐ์น๋ ๋์ ๋ฐ์ฌ๊ฐ ์๋๋ผ **์๋์ ์์ฐจ ์คํ**์ด๋ฉฐ, ์คํฐ ์งํ ์ผ๋ถ ์์ด์ ํธ์ ์์ ์ง์ฐ์ ์๋ Adaptive Parallel Splitting์ stall ์ ํธ๋ก ์คํํ์ง ์์ต๋๋ค โ ๊ตฌ๋ฒ์ ์์๋ ๊ฐ ํ์ ๊ฐ ์ ๋์ฌ ๋น์ฉ์ ์ค๋ณต ์ง๋ถํ์ต๋๋ค. ๋ํ CPU ์ ํ ์ปจํ
์ด๋์์ dynamic workflow๊ฐ ํธ์คํธ ์ฝ์ด ์๋ฅผ ์ฐ๋ ๋ฌธ์ ๊ฐ ์์ ๋์ด, ์ปจํ
์ด๋ ์คํ ์ ์คํจ ๋์์ฑ์ด ์ ํ์ cap๋ณด๋ค ๋ฎ์ ์ ์์ต๋๋ค.
|
|
133
135
|
|
|
@@ -137,6 +139,8 @@ Reference: #1320 (fix), #1321 (session 113 retrospective ์ฐ๋น #1), `feedback_l
|
|
|
137
139
|
|
|
138
140
|
Runtime detection and splitting of stalled parallel agents. Complements pre-execution parallelization.
|
|
139
141
|
|
|
142
|
+
> **cross-ref (v1.1.50 ์ค์ธก)**: ๋ณ๋ ฌ ์์ ์ค ์ผ๋ถ๊ฐ ์นจ๋ฌตยท์ค๊ฐ ์ ๋จ๋๋ฉด, ์ฌ์ดยท์ฌ๋ถํ ์ ์ R018 `maxTurns` partial ํ์(v2.1.246)๋ฅผ ๋จผ์ ์์ฌํ๋ค โ 20ํด ํ๋ ์ ๋จ์ด v1.1.50 ์ธ์
์์ ๋ณ๋ ฌ 4๊ฑด ์ค 3๊ฑด์ ์ค์ฆ๋๋ค. ์์ธ๋ R018 (MUST-agent-teams.md) Member Completion Verification ์น์
.
|
|
143
|
+
|
|
140
144
|
See detection signals, splitting rules, and example via Read tool.
|
|
141
145
|
|
|
142
146
|
<!-- DETAIL: Adaptive Parallel Splitting โ Detection, Splitting Rules, Example
|
|
@@ -94,6 +94,14 @@ Use a `"*"` deny rule in `settings.json` to enforce a deny-by-default posture, t
|
|
|
94
94
|
>
|
|
95
95
|
> **์ผ๋ฐ ๊ตํ**: ๋จ์ผ ๋ฆด๋ฆฌ์ฆ์ ํ๋ซํผ ๊ถํ ๊ฐ์ ์ ๋กค๋ฐฑ๋ ์ ์์ผ๋ฏ๋ก **ํญ๊ตฌ์ ๋ณดํธ๋ง์ผ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค**. ์ค์ฝํ ๊ท์น์ ๊ฐ์ ์ด์ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๊ณํ๊ณ ํ๋ซํผ ๊ฐ์ ์ defense-in-depth๋ก๋ง ์ทจ๊ธํฉ๋๋ค(`feedback_platform_claim_staleness` ๊ณ์ด โ ํ๋ซํผ ์ฃผ์ฅ์ ์ํจ์ฑ).
|
|
96
96
|
|
|
97
|
+
> **v2.1.251+**: Bashยท๊ฒฝ๋ก ๊ถํ๊ฒ์ฌ ์ฐํ ์์ 5๊ฑด์ด ํ ๋ฆด๋ฆฌ์ฆ์์ ํจ๊ป ๋ฐ๊ฒฌยท์์ ๋์์ต๋๋ค โ (a) ์ ์ ์
ธ ๋ณ์์ ์ฐ์ ์์ ๋์
ํ๋ ๋ช
๋ น(`OPTIND=1/0`, `RANDOM=2+2`)์ auto-approveํ๋ ๊ฒฐํจ, (b) ์๋๋ฐ์ค ๋ด Bash ๋ช
๋ น์ด ์๊ธฐ output file์ ๋ฆฌ๋ค์ด๋ ํธยท๊ต์ฒดํ ์ ์๋ ๊ฒฐํจ, (c) ์์
๋๋ ํ ๋ฆฌ ๋ด๋ถ ์ฌ๋งํฌ๊ฐ permission check **์ดํ** ๊ต์ฒด(TOCTOU)๋์ด Read/Write/Edit๊ฐ ์น์ธ ์์ญ ๋ฐ์ ์ ๊ทผํ ์ ์๋ ๊ฒฐํจ, (d) Grep/Glob์ด ์ฌ๋งํฌ๋ก ๋๋ฌํ ๊ฒ์ ๊ฒฝ๋ก์ `Read(...)` deny ๊ท์น์ ์ ์ฉํ์ง ๋ชปํ๋ ๊ฒฐํจ, (e) Workflow tool์ด permission check ์คํ **์ ์** ์ธ์
์ด ์ฝ์ ์ ์๋ `scriptPath`๋ฅผ ๋จผ์ ์ฝ๊ณ ์๋ฌ์ ๊ทธ ๊ฒฝ๋ก๋ฅผ ๊ทธ๋๋ก ์ธ์ฉํ๋ ๊ฒฐํจ(cross-ref R023 Workflow Script Sanity Check). ํ ๋ฆด๋ฆฌ์ฆ์์๋ง 5๊ฑด์ด ๋์๋ค๋ ์ฌ์ค ์์ฒด๊ฐ ์ ใ์ผ๋ฐ ๊ตํใโ ๋จ์ผ ๋ฆด๋ฆฌ์ฆ์ ํ๋ซํผ ๊ถํ ๊ฐ์ ์ ๋กค๋ฐฑ๋ ์ ์์ผ๋ฏ๋ก ํญ๊ตฌ์ ๋ณดํธ๋ง์ผ๋ก ๊ฐ์ฃผํ์ง ์๋๋ค โ ๋ฅผ ๊ฐํ๊ฒ ์ฌํ์ธ์ํต๋๋ค.
|
|
98
|
+
|
|
99
|
+
> **v2.1.247~251 ์ฌ๋์
์ฌ๋ถ ํ์ธ (์ค์ธก)**: ์ ใ์ผ๋ฐ ๊ตํใ์ด ์ธ๊ธํ๋ v2.1.233 ๋กค๋ฐฑ 2๊ฑด(Windows Git Bash์ Cygwin-style symlink ์ฐํ, Bash ์
๋ ฅ ๋ฆฌ๋ค์ด๋ ์
`< file`)์ "์ขํ ํํ ์ฌ๋์
"์ v2.1.247~251 CHANGELOG ๋ฒ์์์ **ํ์ธ๋์ง ์์์ต๋๋ค** โ "Cygwin"์ด๋ผ๋ ๋จ์ด๋ `< file` ์
๋ ฅ ๋ฆฌ๋ค์ด๋ ์
์ธ๊ธ๋ 4๊ฐ ๋ฆด๋ฆฌ์ฆ ์ด๋์๋ ์์ต๋๋ค. ๋์ v2.1.251์ ์ 5๊ฑด์ (c)(d)์ฒ๋ผ **๋ฉ์ปค๋์ฆ์ด ๋ค๋ฅธ** ๋ณ๊ฐ์ ์ฌ๋งํฌยท๊ฒฝ๋ก ์ฐํ ์์ ์ด ์๋ก ๋ฑ์ฅํ์ต๋๋ค โ ๊ฐ์ "์ฌ๋งํฌ ์ฐํ"๋ผ๋ ๊ฒฐ๊ณผ์ด์ง๋ง ์์ธ ๋ฒ๊ทธ๋ ๋ค๋ฆ
๋๋ค. ๋ฐ๋ผ์ ์ "233์์ ๋กค๋ฐฑ๋จ" ์์ ์ ์ด ์์ ๊น์ง **์ฌ์ ํ ์ ํจ**ํ๋ฉฐ, ์ฌ๋์
์ด ํ์ธ๋๋ฉด ์ด ๋
ธํธ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
|
|
100
|
+
|
|
101
|
+
> **v2.1.238+**: Bash ๋๊ตฌ์ permission ๊ฒ์ฌ๊ฐ zsh ์ ์ฉ ์กฐ๊ฑด๋ฌธ(shell conditional) ๋ฌธ๋ฒ์ ๋ํด ์ถ๊ฐ๋ก ๊ฐ์ ๋์์ต๋๋ค. ์ด๋ ์ v2.1.221 "zsh `[[ ]]` ์ ๊ท์ ์กฐ๊ฑด๋ฌธ ์์์ ์จ๊ฒจ์ง ๋ช
๋ น์ด ๊ถํ ๊ฒ์ฌ๋ฅผ ์ฐํ"์ **์ง์ ์ฐ์ฅ์ **์
๋๋ค โ "๊ฐ์ "์ผ๋ก๋ง ๊ธฐ์ ๋์ด ์์ด v2.1.221 ์์ ์ด ์์ ํด๊ฒฐ์ด ์๋์๊ฑฐ๋ ์ถ๊ฐ ์ฐํ ๋ฒกํฐ๊ฐ ์์์์ ์์ฌํฉ๋๋ค. ์ด ์ ์ฅ์์ Bash ๋๊ตฌ ์คํ ์
ธ์ด zsh์ด๋ฏ๋ก(R005 #1540 ์ค์ธก) ์ง์ ๊ด๋ จ๋ฉ๋๋ค.
|
|
102
|
+
|
|
103
|
+
> **v2.1.246/248+**: (246) ๋์ ๋งค๋ฌ๋ฆฐ `&&`/`||`๊ฐ ์๋ ์์๋(malformed) ๋ช
๋ น์ ๋ํด Bash ๊ถํ๊ฒ์ฌ๊ฐ ์ด์ **ํญ์ ์น์ธ์ ์๊ตฌ**ํฉ๋๋ค โ ๊ตฌ๋ฒ์ ์์๋ ์ด๋ฐ ํํ๊ฐ ๊ฒ์ฌ๋ฅผ ์ฐํํ ์ ์์์ต๋๋ค. (248) `--restricted`(๋๋ `CLAUDE_CODE_RESTRICTED=1`) ๋ชจ๋๊ฐ ์ ์ค๋์ด ๋ช
๋ น/์ฝ๋ ์คํ ๋๊ตฌ์ `WebFetch`๋ฅผ ์ ๊ฑฐํ๊ณ (`--tools`์ ๋ช
์ ์ ์์ธ), ํ์ผ ๋๊ตฌ๋ฅผ ์์
๋๋ ํ ๋ฆฌ ๋ด๋ถ๋ก ์ ํํ๋ฉฐ, `bypassPermissions`๋ฅผ ๊ฑฐ๋ถํ๊ณ , user/project/local settings ํ์ผ์ ๋ฌด์ํฉ๋๋ค. ์ด ์ ์ฅ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก `bypassPermissions`๋ฅผ ์ฐ๋ฏ๋ก(R010 Universal bypassPermissions) `--restricted`์๋ **์ํธ ๋ฐฐํ์ **์
๋๋ค โ ์ด ์ ์ฅ์ ์ํฌํ๋ก์ฐ์๋ ์ ์ฉํ์ง ์๋, ์ ๊ท ์์ ๋ชจ๋ ์ต์
์ผ๋ก ์กด์ฌ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
|
|
104
|
+
|
|
97
105
|
### Todo/Task ๋๊ตฌ ๊ธฐ๋ณธ ์ ๊ฑฐ (v2.1.233+) โ ์ ํ์ โ
|
|
98
106
|
|
|
99
107
|
CHANGELOG v2.1.233 ์๋ฌธ: *"Todo/task-tracking tools (TaskCreate/Get/Update/List, TodoWrite) are no longer available on Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; set `CLAUDE_CODE_ENABLE_TODO_TOOLS=1` to bring them back"*. ์ด ์ ์ฅ์ ์์ด์ ํธ **49๊ฐ ์ค 46๊ฐ**(`claude-sonnet-5` 41 + `claude-opus-5` 5)๊ฐ ๋์ ๋ชจ๋ธ์ด๋ฏ๋ก ์คํ ํ๊ฒฝ์ ๊ธฐ๋ณธ๊ฐ์ **๋ถ์ฌ**๋ค(์์ฌ 3๊ฐ๋ `haiku`).
|
|
@@ -35,6 +35,12 @@ The following git commands have caused working tree loss in past sessions (#1146
|
|
|
35
35
|
|
|
36
36
|
> **v2.1.221/222+**: v2.1.222์์ worktree-isolated ์ธ์
๊ณผ ๊ทธ subagent๊ฐ main checkout์ ๋ํด ํ๊ดด์ git ๋ช
๋ น์ ์คํํ ์ ์๋ ๋ฌธ์ ๊ฐ ์์ ๋์ด, isolation์ด ๋ชจ๋ ์ธ์
ํ์
์ file edit๊ณผ Bash์ ์ ์ฉ๋ฉ๋๋ค. v2.1.221์์๋ `/fork` ์ธ์
์ด ์๋ณธ ์ธ์
checkout์ด ์๋๋ผ ์์ฒด worktree๋ฅผ ์์ฑํ๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. **์ํ ์๋**: ์ Destructive Git Commands ํ์ per-invocation ์น์ธ ์๊ตฌ์ ์๋ Pre-Delegation Blast-Radius Enumeration์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. ํ๋ซํผ isolation์ ๊ฒฉ๋ฆฌ ๊ฒฝ๊ณ๋ฅผ ๊ฐํํ ๋ฟ, ์ฌ์ฉ์๊ฐ ํ๋จํ๋ ๋ฐ ํ์ํ blast-radius ์ด๊ฑฐ๋ฅผ ๋์ฒดํ์ง ์์ต๋๋ค(v2.1.183/208 ํ๋ซํผ ๋ธ๋ก๊ณผ ๋์ผํ defense-in-depth ๊ด๊ณ).
|
|
37
37
|
|
|
38
|
+
> **v2.1.234/236/238+**: ์น์ธ ๋ค์ด์ผ๋ก๊ทธ ํ์ ๋ฌด๊ฒฐ์ฑ ๊ฒฐํจ์ด 3๊ฐ ๋ฆด๋ฆฌ์ฆ ์ฐ์์ผ๋ก ๋ฐ๊ฒฌยท์์ ๋์์ต๋๋ค. (234) permission ํ๋กฌํํธ comment ํ๋์์ Shift+Tab์ ๋๋ฅด๋ฉด ํ๋๋ฅผ ๋ซ๋ ๋์ **edit์ ์น์ธํ๊ณ ์ธ์
์ ์ฒด edit ๊ถํ์ ๋ถ์ฌ**ํ๋ ๊ฒฐํจ. (236) managed-settings ์น์ธ ํ๋กฌํํธ๊ฐ **ํ์๋์ง ์์ผ๋ฉด์ ์ฒซ ํค์
๋ ฅ์ ์น์ธ์ผ๋ก ์๋น**ํ๋ ๊ฒฐํจ โ ํ๋กฌํํธ๋ฅผ ๋ณด์ง ๋ชปํ ์ฌ์ฉ์์ ๋ฌด๊ดํ ์
๋ ฅ์ด ์น์ธ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์์์ต๋๋ค. (238) ๋ํ์์ ํ์ ํ
์คํธ์ "don't ask again" ์ต์
์ด ์ด์ ํญ์ ์ค์ ์น์ธ ๋ฒ์์ ์ผ์นํ๋๋ก ๊ฐ์ ๋๊ณ , ๋ด์ฉ์ด ์์ ํ ํ์๋ ์ ์์ผ๋ฉด "don't ask again"์ด ๋ณด๋ฅ๋ฉ๋๋ค. ์ด 3๊ฑด์ ์ v2.1.223 "ํญยท๋น๊ฐ์ ์ ๋์ฝ๋ ํจ๋ฉ ๋ช
๋ น์ด ์๊ธฐ ์ผ๋ถ๋ฅผ ์จ๊น" ๊ฒฐํจ๊ณผ **๊ฐ์ ๊ณ์ด์ ๋ฐ๋ณต**์ด๋ฉฐ, ๋จ๋ฐ ๊ฒฐํจ์ด ์๋๋ผ ์น์ธ ๋ค์ด์ผ๋ก๊ทธ ํ์ ๋ฌด๊ฒฐ์ฑ์ด ์ฌ๋ฌ ๋ฆด๋ฆฌ์ฆ์ ๊ฑธ์ณ ๊ณ์ ๋ฐ๊ฒฌ๋๊ณ ์๋ ๊ตฌ์กฐ์ ๊ณ์ด์์ ์ค์ฆํฉ๋๋ค. Pre-Delegation Blast-Radius Enumeration(๋ชจ๋ธ์ด ํ๊ดด ๋์์ ๋ณ๋ ์ด๊ฑฐ)์ด ํ๋ซํผ ๋ค์ด์ผ๋ก๊ทธ๋ก ๋์ฒด๋ ์ ์๋ค๋ ์์น์ ์ด ๋ฐ๋ณต์ผ๋ก ๋์ฑ ๊ฐํ๋ฉ๋๋ค.
|
|
39
|
+
|
|
40
|
+
> **v2.1.236+**: macOS ์๋๋ฐ์ค์์ wildcard read-deny ๊ท์น(์: `**/.env`)์ด ์ด์ ํ์ฉ๋ read ์์ญ **๋ด๋ถ์์๋ ์ฐ์ ์ ์ฉ**๋๊ณ , ๋งค์นญ๋ ๋๋ ํ ๋ฆฌ์ ์ฝํ
์ธ ๊น์ง ์ปค๋ฒํ๋ฉฐ, ํ์ผ๋ช
๋ณ๊ฒฝ์ผ๋ก ์ฐํํ ์ ์์ต๋๋ค. ์ v2.1.224 "sandbox filesystem deny ํญ๋ชฉ์ ํํ ์ฌ๋์๊ฐ ์กฐ์ฉํ ์ฐํ ๊ฐ๋ฅํ๋ ๊ฒฐํจ"๊ณผ ๊ฐ์ sandbox deny ๊ท์น ์ฐํ ๊ณ์ด์ ์ถ๊ฐ ํ๋๋์
๋๋ค โ ๊ตฌ๋ฒ์ ์์๋ read-deny ์์ผ๋์นด๋๊ฐ ํ์ฉ ์์ญ ์์์ ๋ฌด๋ ฅํ๋๊ฑฐ๋ ํ์ผ๋ช
rename์ผ๋ก ์ฐํ๋ ์ ์์์ต๋๋ค.
|
|
41
|
+
|
|
42
|
+
> **v2.1.246/251+**: ์๊ฒฉ์ฆ๋ช
์ ์ก ๊ฒฝ๊ณ ๊ฒฐํจ 2๊ฑด์ด ์์ ๋์์ต๋๋ค. (246) ์๋ํํฐ ๊ฒ์ดํธ์จ์ด(`ANTHROPIC_BASE_URL`)์ฉ API ํค๊ฐ Anthropic ํ
๋ ๋ฉํธ๋ฆฌ/๋ฉํธ๋ฆญ ์์ฒญ์ ํจ๊ป ์ค๋ ค ์ ์ก๋๋ ๊ฒฐํจ โ ๊ตฌ๋ฒ์ ์์๋ ๊ฒ์ดํธ์จ์ด ์๊ฒฉ์ฆ๋ช
์ด ์๊ธฐ ํธ์คํธ ๋ฐ์ผ๋ก ์ ์ถ๋์ต๋๋ค. (251) `/ultrareview` ๋ฐ ๋ก์ปฌ ์๋ฉ cloud session์ด `prod.env` ๊ณ์ดยท`*.tfvars` ํ์ผ, ๋๋ ์๊ฒฉ์ฆ๋ช
ํ์ผ์ ์๋ํฐ swap/temp/backup ์ฌ๋ณธ(`key.pem.tmp`, `id_rsa.swo`)์ ์
๋ก๋ํ๋ ๊ฒฐํจ โ ์ด์ ๋ก์ปฌ์ ๋จ์ต๋๋ค. ์ด ์ ์ฅ์๋ `/ultrareview`๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋, ๋ ํญ๋ชฉ ๋ชจ๋ ์ด ์น์
์ "์๊ฒฉ์ฆ๋ช
์ ์ฅ์ ๋คํ ๊ธ์ง" ์์น๊ณผ ๋์ผํ ์ํ ํด๋์ค์ ๋ํ ํ๋ซํผ ์ธก ๋ฐฉ์ด์ด๋ฏ๋ก ๊ธฐ๋กํฉ๋๋ค.
|
|
43
|
+
|
|
38
44
|
### Pre-Delegation Blast-Radius Enumeration
|
|
39
45
|
|
|
40
46
|
> Origin: #1307 ์ฐ๋น #1 (High) โ user chose "discard local changes and pull", and `git reset --hard origin/develop` was delegated immediately โ user rejected (interrupt). The blast radius โ that "discard local changes" included 18 files of *intended* uncommitted work (rule edits, new skills, new guides), not just a version downgrade โ was never enumerated for the user.
|