@uzysjung/agent-harness 26.167.0 → 26.169.0

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.
Files changed (33) hide show
  1. package/README.ko.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/{chunk-KVXCTS6D.js → chunk-SU2RUN2W.js} +116 -88
  4. package/dist/chunk-SU2RUN2W.js.map +1 -0
  5. package/dist/index.js +1643 -966
  6. package/dist/index.js.map +1 -1
  7. package/dist/trust-tier-drift.js +5 -2
  8. package/dist/trust-tier-drift.js.map +1 -1
  9. package/package.json +1 -1
  10. package/templates/CLAUDE.md +7 -0
  11. package/templates/mcp.json +2 -8
  12. package/templates/rules/ship-checklist.md +2 -2
  13. package/templates/skills/audit-harness-fit/SKILL.md +15 -4
  14. package/templates/skills/audit-harness-fit/references/apply.md +18 -0
  15. package/templates/skills/audit-harness-fit/references/audit.md +16 -3
  16. package/templates/skills/audit-harness-fit/references/verification.md +7 -0
  17. package/templates/skills/chatgpt-delegate/SKILL.md +221 -0
  18. package/templates/skills/external-model-consult/SKILL.md +82 -40
  19. package/templates/skills/external-model-consult/references/direct-calls.md +23 -14
  20. package/templates/skills/external-model-consult/references/model-evidence.md +156 -0
  21. package/templates/skills/external-model-consult/scripts/codex-ask.sh +4 -3
  22. package/templates/skills/external-model-consult/scripts/gemini-ask.sh +3 -3
  23. package/templates/skills/gemini-delegate/SKILL.md +223 -0
  24. package/templates/skills/genspark-delegate/SKILL.md +283 -0
  25. package/templates/skills/model-orchestration/SKILL.md +5 -0
  26. package/templates/skills/multi-model-debate/SKILL.md +187 -0
  27. package/templates/skills/multi-model-debate/agents/openai.yaml +4 -0
  28. package/templates/skills/multi-model-debate/references/adapters.md +143 -0
  29. package/templates/skills/multi-model-debate/references/evaluation.md +80 -0
  30. package/templates/skills/multi-model-debate/references/prompts.md +87 -0
  31. package/templates/skills/multi-model-debate/references/research.md +171 -0
  32. package/templates/track-mcp-map.tsv +3 -1
  33. package/dist/chunk-KVXCTS6D.js.map +0 -1
@@ -24,8 +24,9 @@ the source of truth and the user makes the final call.
24
24
 
25
25
  - **Korean phrasing.** Claude's Korean often reads translated and stiff; the
26
26
  installing user's standing preference is Gemini's more idiomatic Korean (a
27
- preference judgment, not a benchmark). For user-facing copy (brochure hero,
28
- UI microcopy, toasts, marketing) that difference is the whole point.
27
+ preference judgment, not a benchmark — evidence: none, ledger `E-NONE-korean`,
28
+ a re-measurement candidate). For user-facing copy (brochure hero, UI microcopy,
29
+ toasts, marketing) that difference is the whole point.
29
30
  - **Second opinion.** A different model with different blind spots is a cheap way
30
31
  to stress-test a plan/spec/design before committing — especially adversarial
31
32
  or persona-based critique.
@@ -37,12 +38,15 @@ the source of truth and the user makes the final call.
37
38
 
38
39
  ## Which provider — the division of labor is the decision rule
39
40
 
40
- | 필요한 것 | Provider | 왜 |
41
- |---|---|---|
42
- | 한국어 뉘앙스·카피 (Mode K) | **Gemini** (`gemini-ask.sh`) | 이 스킬의 전제. Claude 로 되돌리면 존재 이유가 사라진다 |
43
- | 멀티페르소나 / 제3자 비평 (Mode P) | **Gemini** | 비-Claude 관점이 목적. 네이티브 병렬 패널은 `multi-persona-review` |
44
- | 간결화·재구조화 (Mode S) | **Codex** (`codex-ask.sh`) | 문장을 예쁘게가 아니라 **짧고 구조 있게** |
45
- | 이미지 생성 (Mode I) | **Codex 기본** / Gemini 옵션 | codex 는 OS 샌드박스 아래 OUT_DIR 로 직접 쓴다. "Nano Banana"·Gemini 풍을 요청하면 Gemini |
41
+ | 필요한 것 | Provider | 왜 | 근거 |
42
+ |---|---|---|---|
43
+ | 한국어 뉘앙스·카피 (Mode K) | **Gemini** (`gemini-ask.sh`) | 이 스킬의 전제. Claude 로 되돌리면 존재 이유가 사라진다 | 없음 — 선호 판단 (`E-NONE-korean`) |
44
+ | 멀티페르소나 / 제3자 비평 (Mode P) | **Gemini** | 비-Claude 관점이 목적. 네이티브 병렬 패널은 `multi-persona-review` | 없음 — 설계 판단 (`E-NONE-persona`) |
45
+ | 간결화·재구조화 (Mode S) | **Codex** (`codex-ask.sh`) | 문장을 예쁘게가 아니라 **짧고 구조 있게** | 없음 — 설계 판단 (`E-NONE-concision`) |
46
+ | 이미지 생성 (Mode I) | **Codex 기본** / Gemini 옵션 | codex 는 OS 샌드박스 아래 OUT_DIR 로 직접 쓴다. "Nano Banana"·Gemini 풍을 요청하면 Gemini | 없음 — 운영 사실만 (`E-NONE-image`) |
47
+
48
+ 근거 열은 [references/model-evidence.md](references/model-evidence.md) 의 항목 ID 다. 모델 이름과
49
+ 측정값은 그 대장이 소유하고, 이 표는 적지 않는다.
46
50
 
47
51
  한 텍스트에 **구조와 뉘앙스가 둘 다** 필요하면 순서가 있다: **Codex 로 구조를 먼저 잡고,
48
52
  그 결과를 Gemini 로 표현을 다듬는다.** 반대로 하면 다듬은 문장이 재구조화에서 다시 깨진다.
@@ -74,36 +78,43 @@ on their behalf.
74
78
  ## How to call it
75
79
 
76
80
  Prefer the **bundled wrappers** — they encode every guardrail in one place
77
- (neutral temp cwd so the repo is NOT pulled into the agent's workspace, sandbox
78
- pins, env allowlist, secret-shaped-prompt refusal, portable timeout, correct flag
79
- order, artifact collection). They ship next to this SKILL.md when the harness
80
- installs the skill directory. Run via `bash` (no execute-bit assumption):
81
+ (neutral temp cwd to avoid starting in the project workspace, sandbox pins,
82
+ env allowlist, secret-shaped-prompt refusal, portable timeout, correct flag
83
+ order, artifact collection). The temp cwd is not a filesystem read boundary.
84
+ The wrappers ship beside this SKILL.md in `scripts/`.
85
+
86
+ `<skill-dir>` below is **the directory of the SKILL.md you are actually reading** —
87
+ not the current project directory, and not an assumed `.claude/skills` path.
88
+ Claude Code exposes it as `${CLAUDE_SKILL_DIR}`; a project install on Codex,
89
+ OpenCode, or Antigravity places it at `.agents/skills/external-model-consult`.
90
+ Confirm both wrappers exist under `<skill-dir>/scripts/` before calling, and run
91
+ them via `bash` (no execute-bit assumption):
81
92
 
82
93
  ```bash
83
- # Gemini — Korean copy / persona review (project scope; user scope = ~/.claude/...):
84
- bash .claude/skills/external-model-consult/scripts/gemini-ask.sh "PROMPT"
94
+ # Gemini — Korean copy / persona review (same paths in project or user scope):
95
+ bash "<skill-dir>/scripts/gemini-ask.sh" "PROMPT"
85
96
  # multi-line via stdin (never parses the prompt as options):
86
- bash .claude/skills/external-model-consult/scripts/gemini-ask.sh <<'EOF'
97
+ bash "<skill-dir>/scripts/gemini-ask.sh" <<'EOF'
87
98
  ...multi-line prompt...
88
99
  EOF
89
100
  # -t TIER picks a model FAMILY (pro is the default; see "Which tier"):
90
- bash .claude/skills/external-model-consult/scripts/gemini-ask.sh -t claude "PROMPT"
101
+ bash "<skill-dir>/scripts/gemini-ask.sh" -t claude "PROMPT"
91
102
  # -m SLUG skips tier resolution — read the slug out of `agy models`, never type
92
103
  # one from memory (agy rejects a retired model outright):
93
- bash .claude/skills/external-model-consult/scripts/gemini-ask.sh -m SLUG "PROMPT"
104
+ bash "<skill-dir>/scripts/gemini-ask.sh" -m SLUG "PROMPT"
94
105
  # -g OUT_DIR = image mode; files are collected into OUT_DIR:
95
- bash .claude/skills/external-model-consult/scripts/gemini-ask.sh -g ./scratch "PROMPT"
106
+ bash "<skill-dir>/scripts/gemini-ask.sh" -g ./scratch "PROMPT"
96
107
 
97
108
  # Codex — concise rewrite / restructure:
98
- bash .claude/skills/external-model-consult/scripts/codex-ask.sh "PROMPT"
109
+ bash "<skill-dir>/scripts/codex-ask.sh" "PROMPT"
99
110
  # -g OUT_DIR = image mode (workspace-write scoped to a temp dir, network pinned off):
100
- bash .claude/skills/external-model-consult/scripts/codex-ask.sh -g ./scratch "PROMPT"
111
+ bash "<skill-dir>/scripts/codex-ask.sh" -g ./scratch "PROMPT"
101
112
  # -i FILE attaches an input image (screenshot to describe, reference to redraw):
102
- bash .claude/skills/external-model-consult/scripts/codex-ask.sh -i shot.png "PROMPT"
113
+ bash "<skill-dir>/scripts/codex-ask.sh" -i shot.png "PROMPT"
103
114
  # -m MODEL overrides the model — only when the USER names one:
104
- bash .claude/skills/external-model-consult/scripts/codex-ask.sh -m MODEL_ID "PROMPT"
115
+ bash "<skill-dir>/scripts/codex-ask.sh" -m MODEL_ID "PROMPT"
105
116
  # `--` ends option parsing for a prompt that itself starts with a dash:
106
- bash .claude/skills/external-model-consult/scripts/codex-ask.sh -- "-dash prompt"
117
+ bash "<skill-dir>/scripts/codex-ask.sh" -- "-dash prompt"
107
118
  ```
108
119
 
109
120
  **Leave codex's `-m` off by default.** With no `-m` the wrapper passes no model
@@ -111,6 +122,8 @@ flag at all, so codex uses whatever the user's own config selects — that track
111
122
  model upgrades for free, while a model id written down here goes stale and pins
112
123
  the user to a retired model. Codex has no `models` subcommand to enumerate
113
124
  against; the model it actually used is printed on **stderr** (`model: …`).
125
+ (Evidence: none — a staleness design judgment; no measurement says one Codex
126
+ model beats another, ledger `E-NONE-codex-model`.)
114
127
 
115
128
  **Output contract.** stdout carries only the model's reply, wrapped in
116
129
  `<untrusted-gemini-output>` / `<untrusted-codex-output>` tags. stderr carries
@@ -124,10 +137,12 @@ Calls block synchronously; both wrappers cap a call at **300s**
124
137
  image generation ~60–90s and up. Raise your shell tool's own timeout for image
125
138
  calls (often shorter than the wrapper's cap) and warn the user about the wait.
126
139
 
127
- **If the wrapper file isn't present** — on some CLIs the harness installs only
128
- this SKILL.md, not the sidecar scripts — fall back to
129
- [references/direct-calls.md](references/direct-calls.md), which reproduces the
130
- same guardrails inline.
140
+ **If the wrapper files aren't present** — the harness installs the whole skill
141
+ directory on every CLI, so this means a hand-copied or partial SKILL.md — prefer
142
+ restoring the complete folder. Otherwise use
143
+ [references/direct-calls.md](references/direct-calls.md) for CLI mechanics and
144
+ its missing-safeguard checklist. Those short examples do not reproduce every
145
+ wrapper guardrail. Read references relative to this SKILL.md, not the caller's cwd.
131
146
 
132
147
  ## Guardrails (these are the point of the skill)
133
148
 
@@ -139,8 +154,12 @@ same guardrails inline.
139
154
  `--dangerously-skip-permissions`. Codex runs `-s read-only` for text and
140
155
  `-s workspace-write` (scoped to a throwaway dir, with
141
156
  `sandbox_workspace_write.network_access=false`) for images — that restricts
142
- *writes*, not *reads*, and anything its shell reads reaches the provider as
143
- session context. The neutral temp cwd is what keeps your repo out of both.
157
+ *writes*, not *reads*. File content read by the agent can reach the provider as
158
+ session context. A neutral temp cwd avoids starting in the project workspace;
159
+ it does not prevent reading the repo by an absolute path or loading global
160
+ settings/instructions. `HOME` and, when set, `CODEX_HOME` remain available for
161
+ normal CLI configuration and authentication. Do not claim read isolation or
162
+ send local paths as an invitation to inspect files beyond the supplied context.
144
163
  - **Env allowlist.** The wrappers run the CLI under `env -i` with only
145
164
  `PATH · HOME · TERM · LANG` (plus `LC_ALL`, `HTTP_PROXY`, `HTTPS_PROXY`,
146
165
  `NO_PROXY`, `CODEX_HOME` when set) — so ambient tokens (`GH_TOKEN`, `AWS_*`,
@@ -166,7 +185,8 @@ same guardrails inline.
166
185
  ## Which tier — `pro` / `claude` (Gemini side)
167
186
 
168
187
  `-t ` picks a model **family**; the concrete model is resolved from `agy models`
169
- on every call, so nothing here pins a version. Two measured facts shape the policy:
188
+ on every call, so nothing here pins a version. Two measured facts shape the policy
189
+ (ledger `E-2026-07-26-01` — one account, one observation):
170
190
 
171
191
  - **A tier name tells you nothing about recency.** The families do not share a
172
192
  version line — measured 2026-07-26, the fast family was two generations ahead of
@@ -185,13 +205,17 @@ for: it exists because a second model's *judgment* is worth an external round-tr
185
205
  critique that finds what you missed. Those are exactly the calls where a cheaper
186
206
  tier costs you the thing you came for, and a round-trip you have to redo is more
187
207
  expensive than the one you did right. If a call is routine enough that a fast tier
188
- would do, it probably shouldn't be an external call at all.
208
+ would do, it probably shouldn't be an external call at all. This rule is a design
209
+ judgment about not redoing an expensive round-trip — there is no quality
210
+ measurement behind it (evidence: none, ledger `E-NONE-pro`); the two operational
211
+ facts above are `E-2026-07-26-01`.
189
212
 
190
213
  **`-t claude`** — agy also serves Claude models. Reach for it when the Gemini
191
214
  quota is spent and the work can't wait for the reset; when you want a **fresh,
192
- uncontaminated read** (the call carries no repo, no conversation history, and none
193
- of the framing you already committed to — when you suspect your own framing is the
194
- problem, that beats a different vendor); or when you are **running on Antigravity**,
215
+ separate read** (the wrapper does not deliberately attach the repo or this
216
+ conversation history, but the prompt's framing and CLI global settings can still
217
+ influence the answer — when you suspect your framing is the problem, provide a
218
+ neutral brief); or when you are **running on Antigravity**,
195
219
  where you already are Gemini and the Claude tier is the outside opinion.
196
220
 
197
221
  **Not for Mode K.** So when the Gemini pool is empty, **Korean copy waits.** Do not
@@ -202,6 +226,19 @@ Korean phrasing is unavailable until then, and let the user decide — write it
202
226
  themselves, wait, or raise the subscription. An answer the user cannot trust is
203
227
  worth less than a clearly stated gap. (Modes P/S/I have no such premise.)
204
228
 
229
+ **Evidence for these choices — and for Claude model × effort.** Each selection
230
+ rule in this skill names its entry in
231
+ [references/model-evidence.md](references/model-evidence.md) or says there is
232
+ none. This skill does not call Claude models, but choosing a model and effort at
233
+ delegation time is one decision, so the same ledger holds the Claude-side
234
+ measurements too (`E-2026-10-04-01` — one implementation task, lower-bound cost —
235
+ plus `planned` entries for task types nobody has measured). Read that seed together
236
+ with the project's own `docs/model-evidence.md` (for the same task type the project
237
+ entry wins). When no entry covers the task, say so instead of inferring from model
238
+ names or recency. Re-measure only on request, following the ledger's entry
239
+ procedure, and append the result to the project ledger — never edit the seed. This
240
+ section names no models; the ledger owns them.
241
+
205
242
  ## Modes
206
243
 
207
244
  Full prompt templates and worked examples:
@@ -269,12 +306,13 @@ without telling the user why.**
269
306
  round-trip costs more than answering directly.
270
307
  - Internal logs, code identifiers, dev comments — not user-facing, don't polish.
271
308
  - A native parallel-persona panel — `multi-persona-review` where installed.
272
- - Reviewing this repo's code — the repo never enters the provider's workspace
273
- through this skill; use the normal review flow.
274
- - Handing an external CLI actual implementation work in your repo — the guarantee
275
- that makes this skill safe is that the repo never enters the provider's
276
- workspace, and an executor needs the opposite. That lane, its predicates, and
277
- its one-time user approval belong to `model-orchestration` where installed.
309
+ - Reviewing this repo's code — these wrappers receive a narrow supplied prompt
310
+ and start outside the repo; use the normal review flow for repository inspection.
311
+ - Handing an external CLI actual implementation work in your repo — this skill
312
+ is an advisory/generation route, not authorization to inspect or modify a project.
313
+ The temp cwd is not a read-isolation guarantee. The implementation lane, its
314
+ predicates, and its one-time user approval belong to `model-orchestration`
315
+ where installed.
278
316
  - Anything needing repo secrets, or when the user explicitly wants *your* answer.
279
317
 
280
318
  ## References
@@ -285,3 +323,7 @@ without telling the user why.**
285
323
  - [references/direct-calls.md](references/direct-calls.md) — wrapper-free
286
324
  invocations for both providers, with the flag-order and variadic-argument
287
325
  gotchas that make a naive call silently do the wrong thing.
326
+ - [references/model-evidence.md](references/model-evidence.md) — dated
327
+ measurements behind each model / tier / effort choice (or the "no evidence"
328
+ marker), the entry format, and the re-measurement procedure for appending to
329
+ the project's `docs/model-evidence.md`.
@@ -1,21 +1,28 @@
1
1
  # Direct calls (no wrapper)
2
2
 
3
- On CLIs where the harness installs only `SKILL.md` and not the `scripts/` sidecar,
4
- fall back to these. They reproduce the wrapper's guardrails inline — the neutral
5
- throwaway cwd, the explicit binary resolution, and the subshell. **Everything the
6
- wrapper does that you skip here is a guardrail you are choosing to drop.**
7
-
8
- Two notes before either block:
9
-
10
- - Never run these from the repo root. `agy` and `codex` are *agents*: a bare run in
11
- the project dir pulls repo files into their workspace and ships them to the
12
- provider.
3
+ The harness installs the whole skill directory, `scripts/` included, on every CLI.
4
+ When the wrappers are missing anyway (a hand-copied or partial SKILL.md), prefer
5
+ restoring the complete skill folder; use these only as CLI-mechanics examples.
6
+ The short examples below show a neutral throwaway cwd, explicit binary
7
+ resolution, and a subshell; they do **not** reproduce the wrappers' environment
8
+ allowlist, secret-shaped-prompt gate, timeout, or all image-mode restrictions.
9
+ Preserve those existing safeguards before making a direct call; a missing script
10
+ is not permission to drop them. Resolve this reference and the `scripts/`
11
+ directory from `<skill-dir>` — the directory of the SKILL.md actually read — not
12
+ the current project directory.
13
+
14
+ Notes before either block:
15
+
16
+ - Never run these from the repo root. `agy` and `codex` are *agents*: starting in
17
+ the project can expose repo context to the provider. A neutral cwd reduces this
18
+ ambient context but does not block absolute-path reads or global configuration.
19
+ Read-only mode restricts writes; it does not isolate filesystem reads.
13
20
  - Keep the `cd` inside `( )`. In an interactive terminal a bare `cd` persists after
14
21
  the block and silently relocates every later command.
15
22
  - Consulting the same model you are running on is usually circular. On Antigravity
16
- you already are Gemini; on the Codex CLI you already are codex. A fresh isolated
17
- session is only worth it deliberately (e.g. for an uncontaminated second read, or
18
- a guaranteed read-only sandbox).
23
+ you already are Gemini; on the Codex CLI you already are codex. A fresh session
24
+ is only worth it deliberately (e.g. a separate brief without this conversation's
25
+ history). It is not guaranteed independent of prompt framing or global settings.
19
26
 
20
27
  ## Gemini (`agy`) — text
21
28
 
@@ -70,7 +77,9 @@ only and collect from the artifact store afterwards:
70
77
 
71
78
  ## Codex — image generation
72
79
 
73
- `workspace-write` is scoped to the throwaway dir, **never** the repo:
80
+ The requested `workspace-write` working directory is the throwaway dir, not the
81
+ repo. This does not prevent repo reads; retain the wrapper's shell-network and
82
+ other image-mode safeguards before using a direct invocation:
74
83
 
75
84
  ```bash
76
85
  (
@@ -0,0 +1,156 @@
1
+ # Model evidence ledger — seed (모델 · effort 실측 대장)
2
+
3
+ 모델 · 티어 · effort 를 고를 때 근거로 쓰는 **날짜 붙은 관측**의 대장이다. 이 파일은 하네스가
4
+ 릴리즈마다 갱신하는 **시드**다 — **편집하지 마라.** `update` 가 최신판으로 덮고, 고친 판은 백업
5
+ 파일로 밀려난다.
6
+
7
+ **두 파일을 함께 읽는다.**
8
+
9
+ - **이 시드** — 하네스 유지자가 모은 관측. 다른 프로젝트 · 다른 계정에서 잰 것이다.
10
+ - **프로젝트 대장 `docs/model-evidence.md`** — 이 프로젝트에서 잰 것. 없으면 첫 측정 때 만들고,
11
+ 그 뒤로는 **덧붙이기만** 한다(append-only). 하네스의 install · update · uninstall 은 이 파일을
12
+ 만들지도 · 고치지도 · 지우지도 않는다 — 설치자의 파일이다. 프로젝트의 `CLAUDE.md` / `AGENTS.md`
13
+ 가 다른 위치를 적었으면 그곳을 쓴다.
14
+
15
+ 같은 과제 유형에서 프로젝트 항목이 시드와 어긋나면 **프로젝트 항목이 이긴다** — 같은 코드베이스 ·
16
+ 같은 시점의 측정이 더 가깝다.
17
+
18
+ ## 읽는 법
19
+
20
+ - 항목은 관측이지 법칙이 아니다. 결론보다 `limits` 와 `stale_when` 을 먼저 읽는다.
21
+ - 과제 유형이 맞는 `measured` 항목이 없으면 **"근거 없음"이라고 말하고** 고른다. 모델 이름 · 가격 ·
22
+ 출시 순서로 적합성을 추론하지 않는다.
23
+ - `method` 에 체크가 빠진 항목은 그만큼 약한 근거다. 지우지 않고 그대로 둔다.
24
+ - `planned` 는 아직 재지 않은 항목이다 — 근거가 아니라 "여기는 모른다"는 표시다.
25
+ - 스킬 본문은 모델 이름을 적지 않고 이 파일의 항목 ID 만 가리킨다. 이름과 수치는 여기에만 있다.
26
+
27
+ ## 항목 양식 (시드 · 프로젝트 대장 공통)
28
+
29
+ ```markdown
30
+ ### E-YYYY-MM-DD-NN · <과제 유형> — <과제 한 줄> (<영역>)
31
+ - status: measured | planned | superseded-by E-…
32
+ - date: YYYY-MM-DD · where: <어느 프로젝트 · 계정> · scope: task | user-scene | milestone
33
+ - task_type: implementation | design | review | korean-copy | concision | image | debate | 운영 사실
34
+ - method: same-brief ✓/✗ · isolated-worktree ✓/✗ · blind-scoring ✓/✗ (채점자 모델 · effort, 무엇을 봤나)
35
+ · mutation-check ✓/✗ · actual-model-from-transcript ✓/✗ · cost = 하한 여부 · time = 동시 부하 여부
36
+ - candidates: <모델 · effort> …
37
+ - result: (표) 조합 | overall/10 | 결함 | 비용(하한) | 시간
38
+ - conclusion: 조건을 포함한 한 줄
39
+ - limits: 과제 수 · 채점자 수 · 빠진 값 …
40
+ - source: <원문 위치 — 이슈 · PR · 파일 경로>
41
+ - stale_when: 모델 세대 교체 · 과제 유형이 다름 · <날짜> 이후 N개월
42
+ ```
43
+
44
+ 규칙: 항목은 고치지 않는다. 결과가 바뀌면 **새 항목을 쓰고 옛 항목의 status 를 `superseded-by <새 ID>`**
45
+ 로만 바꾼다. 측정 방법이 약하면 약하다고 적은 채로 남긴다. 사람의 판단(선호 · 운영 결정)은 측정값과
46
+ 섞지 않고 "판단(측정 아님)" 으로 따로 적는다.
47
+
48
+ ## 항목을 추가하려면 — 재측정 절차
49
+
50
+ 항목이 `measured` 로 인정받는 조건이 곧 절차다.
51
+
52
+ 1. 같은 과제 · 같은 브리프. 브리프는 측정 전에 고정하고 파일로 남긴다.
53
+ 2. 격리 — 조합마다 별도 worktree(또는 디렉터리). 공유 테스트 자원이 있으면 조합끼리 겹치지 않게.
54
+ 3. 난이도 사다리 — **쉬운 과제부터, 가벼운 모델 · 낮은 effort 부터** 올린다. 어려운 과제 · 강한 모델
55
+ 조합은 그 아래가 떨어진 뒤에 넣는다. 과제 유형이 다르면 다른 항목이다.
56
+ 4. 블라인드 채점 — 채점자는 diff(산출물)만 보고 어느 조합인지 모른다. 채점자 모델 · effort 를 기록한다.
57
+ AC 통과 · 결함 등급 · 가드 뮤테이션(테스트가 실제로 무는지)을 직접 잰다.
58
+ 5. 실제값 — 모델 · effort 는 요청값이 아니라 트랜스크립트의 실제값을 적는다. 못 확인하면 `unknown`.
59
+ 6. 비용은 **하한**(사고 토큰이 빠질 수 있다) · 시간은 동시 부하를 적는다. 모르는 값은 `unknown` 이고
60
+ 꾸미지 않는다.
61
+ 7. 결론은 조건 포함 한 줄. 표본 수와 실패 사례를 적고, 적은 사례의 승률을 법칙으로 쓰지 않는다.
62
+ 8. 단위(scope) — 기본은 과제 1건. 사용자 씬 · 마일스톤 단위로 재면 산출물 기준에 **PR 묶음의 리그레션
63
+ 결과**를 넣고 `scope` 를 그렇게 적는다. 같은 양식, 다른 단위.
64
+ 9. 언제 — 사용자가 요청했을 때, 또는 라우팅 결정에 쓸 항목이 없고 틀렸을 때의 비용이 측정 비용을 넘을 때
65
+ **제안**한다. 주기 실행 · 훅 · 반복 루프를 만들지 않는다. 실제 실행에는 그 격리 자리 · 도구 · 비용에
66
+ 대한 승인이 필요하다.
67
+ 10. 적는 곳 — 프로젝트 `docs/model-evidence.md`(append-only). 시드(이 파일)는 편집하지 않는다.
68
+
69
+ ## 근거 없는 선택 규칙 (재측정 후보)
70
+
71
+ `external-model-consult` 본문의 선택 규칙 중 측정 근거가 **없는** 것. 규칙이 틀렸다는 뜻이 아니라,
72
+ 판단 · 설계로 정했고 측정으로 확인한 적이 없다는 뜻이다.
73
+
74
+ | ID | 규칙 (본문 위치) | 왜 그렇게 정했나 | 재측정한다면 |
75
+ |---|---|---|---|
76
+ | `E-NONE-korean` | 한국어 카피 · 뉘앙스는 Gemini (Why this exists · Which provider, Mode K) | 유지자의 **선호 판단** — 벤치마크 아님 | korean-copy 과제 · Gemini 고성능 티어 대 현재 세션 모델 · 한국어 독자 채점자 블라인드 |
77
+ | `E-NONE-persona` | 멀티페르소나 · 제3자 비평은 Gemini (Mode P) | 비-Claude 관점이 목적이라는 설계 판단 — Codex 와 비교한 측정 없음 | review 과제 · 찾은 실제 결함 수와 중복률 |
78
+ | `E-NONE-concision` | 간결화 · 재구조화는 Codex (Mode S) | 설계 판단 — 다른 모델과 비교한 측정 없음 | concision 과제 · 보존해야 할 내용 누락 수 · 목표 길이 달성 |
79
+ | `E-NONE-image` | 이미지 기본은 Codex (Mode I) | 운영 사실만 — codex 는 OUT_DIR 로 직접 쓰고 Gemini 는 자기 아티팩트 저장소를 거친다. 화질 비교 측정 없음 | image 과제 · 같은 프롬프트 블라인드 |
80
+ | `E-NONE-pro` | Gemini 호출은 항상 `pro` 티어 (Which tier) | 판단 호출에서 싼 티어로 다시 왕복하는 비용을 피하려는 설계 판단 — 티어별 품질 측정 없음. 운영 사실은 `E-2026-07-26-01` | 같은 과제에서 `pro` 대 빠른 티어 |
81
+ | `E-NONE-codex-model` | codex 는 `-m` 없이 사용자 설정 모델 (How to call it) | 적어 둔 모델 ID 가 낡아 은퇴한 모델에 묶이는 것을 막는 설계 판단 — 어느 Codex 모델이 낫다는 측정 없음 | 해당 없음(선택이 아니라 위임) |
82
+
83
+ ## 항목
84
+
85
+ ### E-2026-10-04-01 · implementation — 기존 훅 패턴을 두 화면에 적용 (웹)
86
+
87
+ - status: measured
88
+ - date: 2026-10-04 · where: 하네스 유지자의 다른 프로젝트(이 하네스 저장소 아님) · scope: task
89
+ - task_type: implementation
90
+ - method: same-brief ✓ · isolated-worktree ✓ · blind-scoring ✓ (채점자 Opus 5.5 high, diff 만 봄 —
91
+ AC · 결함 등급) · mutation-check ✓ (가드 뮤테이션으로 테스트가 무는지 직접 측정) ·
92
+ actual-model-from-transcript ✓ · cost = 하한(사고 토큰 제외) · time = 동시 부하 영향 있음
93
+ - candidates: Claude 모델 × effort 8조합
94
+
95
+ | 조합 | overall(10) | 결함 | 비용(하한) | 시간 |
96
+ |---|---|---|---|---|
97
+ | Sonnet 5 · xhigh | 6 | MED 1 · LOW 1 | $6.75 | 22분 |
98
+ | Sonnet 5.5 · medium | 7 | MED 1 · LOW 1 | $1.31 | 10분 |
99
+ | Sonnet 5.5 · high | 8 | LOW 1 | $1.75 | 10분 |
100
+ | Sonnet 5.5 · xhigh | 9 | 0 | $2.42 | 18분 |
101
+ | Sonnet 5.5 · max | 9.5 | 0 | $8.51 | 32분 |
102
+ | Opus 5.5 · low | 8.5 | 0 | $1.62 | 10분 |
103
+ | Opus 5.5 · medium | 9 | 0 | $2.11 | 10분 |
104
+ | Opus 5.5 · high | 9 | 0 | $2.52 | 10분 |
105
+
106
+ - conclusion: **패턴 적용형 구현 과제 1건에서는** Opus 5.5 medium~high 가 9점 · 결함 0 을 10분에 냈다.
107
+ Sonnet 5.5 는 xhigh 에서야 같은 점수였고 더 느리며 비용은 비슷했다(캐시 읽기 단가가 같아 단가 차이가
108
+ 거의 남지 않는다). max 는 +0.5점에 비용 3~4배.
109
+ - 판단(측정 아님 — 유지자, 2026-10-04): 위 결과로 구현 위임 기본을 Opus 5.5 medium~high 로 쓴다.
110
+ Fable 은 중요한 기획 · 설계의 작성이나 검증에만 쓴다 — 이 표에 Fable 은 없으므로 **그 부분은 근거
111
+ 없음**이다. 모델 이름에 역할을 묶지 않는다(같은 판단이 다른 세대에 그대로 이어지지 않는다).
112
+ - limits: 과제 1건(기존 패턴 적용) · 채점자 1명 · 비용은 사고 토큰이 빠진 하한 · 시간은 동시 부하 영향
113
+ · 설계 판단이 큰 과제 · 서버 과제는 측정 안 됨(`E-2026-10-04-P1` · `P2`)
114
+ - source: https://github.com/uzysjung/uzys-agent-harness/issues/681 (본문 표)
115
+ - stale_when: 모델 세대 교체 · 과제 유형이 다름(설계 · 서버 · 리뷰) · 2027-04 이후
116
+
117
+ ### E-2026-07-26-01 · 운영 사실 — Gemini 티어 이름과 쿼터 (agy CLI)
118
+
119
+ - status: measured
120
+ - date: 2026-07-26 · where: 하네스 유지자 계정 1개 · scope: task
121
+ - task_type: 운영 사실(모델 품질 비교가 아님)
122
+ - method: 관측 1회 · `agy models` 목록과 실제 호출 응답을 읽음 · same-brief / blind-scoring 해당 없음
123
+ - result:
124
+ - **티어 이름은 최신성을 말하지 않는다** — 그날 빠른 가족이 `pro` 가족보다 두 세대 앞서 있었다.
125
+ 기억으로 친 슬러그는 거부된다(`invalid model selection`, exit 1).
126
+ - **Gemini 쿼터는 계정당 한 풀이고 Claude 모델은 그 밖이다** — `gemini-3.1-pro-high` ·
127
+ `gemini-3.1-pro-low` · flash 모델 하나가 같은 분에 똑같은 `Individual quota reached … Resets in
128
+ 166h` 로 거절했고, 같은 분의 `claude` 호출은 정상 응답했다. 티어를 낮춰도 피할 수 없다.
129
+ - conclusion: 티어는 **가족**을 고르는 이름이고 버전 문자열은 매 호출 `agy models` 에서 읽는다. 쿼터
130
+ 소진 시 다른 Gemini 티어는 대안이 아니다.
131
+ - limits: 계정 1개 · 관측 1회 · agy 의 모델 목록과 쿼터 정책은 계정 등급 · 시점에 따라 다를 수 있다
132
+ - source: `external-model-consult` 스킬 본문 "Which tier" 절의 측정 기록(2026-07-26)
133
+ - stale_when: agy 모델 목록 · 쿼터 정책 변경 · 계정 등급이 다름
134
+
135
+ ### E-2026-10-04-P1 · design — 설계 판단이 큰 변경 (재측정 계획)
136
+
137
+ - status: planned
138
+ - date: 2026-10-04(계획일) · where: 하네스 유지자 · scope: task
139
+ - task_type: design — 경계 · 계약을 새로 정하는 변경
140
+ - method: 위 재측정 절차 그대로(같은 브리프 · 격리 · 블라인드 · 가드 뮤테이션 · 실제값 · 비용 하한)
141
+ - candidates: Sonnet 5.5 high · xhigh · max / Opus 5.5 medium · high
142
+ - 판단(측정 아님 — 유지자, 2026-10-04): "Sonnet 5.5 는 정말 쉬운 개발에 high 로 쓰고, xhigh · max 를
143
+ Opus 5.5 와 다시 비교한다."
144
+ - limits: 아직 재지 않았다 — 이 과제 유형의 근거는 **없다**
145
+ - source: https://github.com/uzysjung/uzys-agent-harness/issues/681 (첫 댓글)
146
+
147
+ ### E-2026-10-04-P2 · implementation — 서버 · 설치자 디스크 경로 (재측정 계획)
148
+
149
+ - status: planned
150
+ - date: 2026-10-04(계획일) · where: 하네스 유지자 · scope: task
151
+ - task_type: implementation — 삭제 · 덮어쓰기가 있는 서버/디스크 경로(예: update · uninstall 류)
152
+ - method: 위 재측정 절차 그대로
153
+ - candidates: Sonnet 5.5 high · xhigh · max / Opus 5.5 medium · high
154
+ - limits: 아직 재지 않았다 — 이 과제 유형의 근거는 **없다**. `E-2026-10-04-01` 은 패턴 적용형이라 대신하지
155
+ 못한다
156
+ - source: https://github.com/uzysjung/uzys-agent-harness/issues/681 (첫 댓글)
@@ -17,7 +17,7 @@
17
17
  # 5 image mode produced no files · 124 timed out ·
18
18
  # otherwise codex's own exit code.
19
19
  #
20
- # Guardrails: throwaway temp cwd (the repo is NEVER in Codex's workspace);
20
+ # Guardrails: throwaway temp cwd (does not start in the repo; not read isolation);
21
21
  # read-only sandbox for text; workspace-write only for image mode, scoped to
22
22
  # the temp dir with shell network access pinned off; ephemeral session; env
23
23
  # stripped to an allowlist; secret-shaped prompts refused before sending.
@@ -79,8 +79,9 @@ if [ "${#ATTACH[@]}" -gt 0 ]; then
79
79
  done
80
80
  fi
81
81
 
82
- # Neutral cwd → codex can't see the current repo. The final-message file lives
83
- # OUTSIDE the workdir so every file left inside is agent-generated output.
82
+ # Neutral cwd avoids starting in the repo; it does not block absolute-path reads
83
+ # or global configuration. The final-message file lives OUTSIDE the workdir so
84
+ # every file left inside is agent-generated output.
84
85
  WORKDIR="$(mktemp -d)"
85
86
  MSGFILE="$(mktemp)"
86
87
  trap 'rm -rf "$WORKDIR" "$MSGFILE"' EXIT
@@ -23,8 +23,8 @@
23
23
  # 5 image mode produced no files · 124 timed out ·
24
24
  # otherwise agy's own exit code.
25
25
  #
26
- # Guardrails: runs from a throwaway temp dir so the current repo is NOT added
27
- # to agy's workspace and shipped to Google; env stripped to an allowlist;
26
+ # Guardrails: starts from a throwaway temp dir rather than the project workspace;
27
+ # this does not block absolute-path reads or global config. Env stripped to an allowlist;
28
28
  # secret-shaped prompts refused. Image mode NEVER uses
29
29
  # --dangerously-skip-permissions — agy has no OS sandbox, its permission system
30
30
  # IS the sandbox. Instead the prompt forbids shell saves (which headless mode
@@ -106,7 +106,7 @@ if [ -n "$OUTDIR" ]; then
106
106
  MARKER="$(mktemp)"
107
107
  fi
108
108
 
109
- # Neutral cwd → agy won't pull the current repo into its workspace context.
109
+ # Neutral cwd avoids starting in the repo; it is not a filesystem read boundary.
110
110
  WORKDIR="$(mktemp -d)"
111
111
  MSGFILE="$(mktemp)"
112
112
  MODELS_ERR=""