@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.
- package/README.ko.md +2 -2
- package/README.md +2 -2
- package/dist/{chunk-KVXCTS6D.js → chunk-SU2RUN2W.js} +116 -88
- package/dist/chunk-SU2RUN2W.js.map +1 -0
- package/dist/index.js +1643 -966
- package/dist/index.js.map +1 -1
- package/dist/trust-tier-drift.js +5 -2
- package/dist/trust-tier-drift.js.map +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.md +7 -0
- package/templates/mcp.json +2 -8
- package/templates/rules/ship-checklist.md +2 -2
- package/templates/skills/audit-harness-fit/SKILL.md +15 -4
- package/templates/skills/audit-harness-fit/references/apply.md +18 -0
- package/templates/skills/audit-harness-fit/references/audit.md +16 -3
- package/templates/skills/audit-harness-fit/references/verification.md +7 -0
- package/templates/skills/chatgpt-delegate/SKILL.md +221 -0
- package/templates/skills/external-model-consult/SKILL.md +82 -40
- package/templates/skills/external-model-consult/references/direct-calls.md +23 -14
- package/templates/skills/external-model-consult/references/model-evidence.md +156 -0
- package/templates/skills/external-model-consult/scripts/codex-ask.sh +4 -3
- package/templates/skills/external-model-consult/scripts/gemini-ask.sh +3 -3
- package/templates/skills/gemini-delegate/SKILL.md +223 -0
- package/templates/skills/genspark-delegate/SKILL.md +283 -0
- package/templates/skills/model-orchestration/SKILL.md +5 -0
- package/templates/skills/multi-model-debate/SKILL.md +187 -0
- package/templates/skills/multi-model-debate/agents/openai.yaml +4 -0
- package/templates/skills/multi-model-debate/references/adapters.md +143 -0
- package/templates/skills/multi-model-debate/references/evaluation.md +80 -0
- package/templates/skills/multi-model-debate/references/prompts.md +87 -0
- package/templates/skills/multi-model-debate/references/research.md +171 -0
- package/templates/track-mcp-map.tsv +3 -1
- 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
|
|
28
|
-
|
|
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
|
|
78
|
-
|
|
79
|
-
order, artifact collection).
|
|
80
|
-
|
|
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
|
|
84
|
-
bash
|
|
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
|
|
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
|
|
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
|
|
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
|
|
106
|
+
bash "<skill-dir>/scripts/gemini-ask.sh" -g ./scratch "PROMPT"
|
|
96
107
|
|
|
97
108
|
# Codex — concise rewrite / restructure:
|
|
98
|
-
bash
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
|
143
|
-
session context.
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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 —
|
|
273
|
-
|
|
274
|
-
- Handing an external CLI actual implementation work in your repo —
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
its one-time user approval belong to `model-orchestration`
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
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`
|
|
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
|
|
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
|
|
83
|
-
#
|
|
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:
|
|
27
|
-
#
|
|
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
|
|
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=""
|