agent-bios 0.10.0 → 0.11.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.
@@ -11,33 +11,21 @@ passthrough_args = ["--dangerously-skip-permissions"]
11
11
  # Optional dependencies. `command` gates the route: unresolvable means the route
12
12
  # is unavailable and the review setup degrades without it. `install` is the single
13
13
  # source for both the one-line hint shown when it is missing and what
14
- # `agent-bios install --with <name>` runs.
15
- [capabilities.onto]
16
- command = "onto"
17
- install = "npm i -g onto-mcp"
18
- # How this tool exposes an operation. The adapter is a protocol codec owned by core,
19
- # never a method identity, so a second method reusing the tag is data-only.
20
- # `evidence` names what this tool reports back about the dispatch it performed, and a
21
- # receipt missing any of it is not credited. These three are what onto's override already
22
- # returns on its warning channel. They are here because of a measured incident, not a
23
- # guess: an override that reached no seat resolved to a default provider with a null model
24
- # and did NOT fail, so a reporter with nothing to check would have called it a success.
25
- offers = [{ operation = "structured-review", adapter = "mcp-stdio-v1", hosts = ["codex", "claude"], evidence = ["reached_seat", "billing_mode", "auth_defaulted"] }]
26
-
27
- # ── dynamic workflow, one concept and two host-bound tools ─────────────────
28
- # `ultracode` runs ON CLAUDE and `ultracode-for-codex` runs ON CODEX — the names say which,
29
- # and getting them the wrong way round is the mistake to avoid: the package name is
30
- # "ultracode, ported for codex", not "the codex one is the real one".
31
- #
32
- # What they are FOR, which is what a reader choosing between reviewers actually needs:
33
- # both drive a dynamic workflow, used here as a flexible many-perspective check on an
34
- # IMPLEMENTATION — does it function, does it survive an adversary, does the logic hold,
35
- # does it hold under a real scenario, does it hold under stress. That makes them
36
- # COMPLEMENTARY to onto rather than competing with it: onto looks hardest at whether
37
- # authority, gates and harness are consistent with each other. The two are independently
38
- # selectable, and both single-sided choices are legitimate — a thing whose whole point is
39
- # that it WORKS can be reviewed by the workflow alone, and a logic-bearing document,
40
- # ontology, harness or gate can be reviewed by onto alone.
14
+ # `agent-bios install --with <name>` runs. How a tool exposes an operation is its
15
+ # `offers` list: the adapter there is a protocol codec owned by core, never a method
16
+ # identity, so a second method reusing the tag is data-only, and `evidence` names what
17
+ # the tool reports back about the dispatch it performed — a receipt missing any of it
18
+ # is not credited.
19
+
20
+ # ── deep review, one concept and two host-bound mechanisms ─────────────────
21
+ # Both shipped deep reviewers are the host CLIs themselves nothing to install beyond
22
+ # the CLI, which is a host rather than a reviewer. `ultracode` runs ON CLAUDE (the
23
+ # Claude Code workflow keyword); `codex-exec` runs ON CODEX (the CLI's non-interactive
24
+ # exec mode). What they are FOR: a deep check on an IMPLEMENTATION does it function,
25
+ # does it survive an adversary, does the logic hold, does it hold under a real scenario,
26
+ # does it hold under stress. The Claude side fans that across many agents; the Codex
27
+ # side hands the whole packet to one frontier-effort pass. Personal or third-party
28
+ # reviewers register in the user-owned methods file, never here.
41
29
 
42
30
  [capabilities.ultracode]
43
31
  # Not a separate tool: the Claude Code CLI's own dynamic workflow, opened by putting the
@@ -55,17 +43,24 @@ command = "${backend}"
55
43
  # claude only: the keyword trigger is a Claude Code feature, so a codex seat cannot run it.
56
44
  offers = [{ operation = "workflow-review", adapter = "host-workflow-v1", hosts = ["claude"] }]
57
45
 
58
- [capabilities.ultracode-for-codex]
59
- command = "ultracode-for-codex"
60
- install = "npm i -g ultracode-for-codex"
61
- # codex only, and this is the tool's nature rather than a policy: it drives the Codex
62
- # app-server and takes its model catalog from there, so a reviewer seated on the
63
- # claude host is a seat it cannot fill. Declaring both hosts made a codex-main launch
64
- # emit "run ultracode-for-codex on claude-fable-5", which cannot work.
46
+ [capabilities.codex-exec]
47
+ # The Codex CLI's own non-interactive exec mode. As with `ultracode` above, the command
48
+ # IS the configured backend — `${backend}` and not a duplicated literal, because a
49
+ # duplicated default breaks for anyone whose backend is a wrapper or an absolute path.
50
+ # No `install`: that field is EXECUTED by `agent-bios install --with`, and a missing
51
+ # codex CLI is a missing host, not a missing reviewer.
52
+ command = "${backend}"
53
+ # codex only, and this is the tool's nature rather than a policy: `exec`,
54
+ # `-s read-only`, `-c model_reasoning_effort` and `-c service_tier` are Codex CLI
55
+ # surface (verified against installed codex-cli 0.146.0), so a claude seat cannot
56
+ # run it. `-s read-only` pins the sandbox the descriptor promises; what stays
57
+ # inherited is the ambient ~/.codex configuration (AGENTS.md, config.toml), so
58
+ # this reviewer is read-only but not hermetic — the codex-run wrapper remains the
59
+ # hermetic dispatch when that matters.
65
60
  #
66
- # Between the two, this review is available CROSS-FAMILY from either main — which the
67
- # codex arm previously had no way to express, and so silently went without.
68
- offers = [{ operation = "workflow-review", adapter = "host-workflow-v1", hosts = ["codex"] }]
61
+ # Between the two, this review is available CROSS-FAMILY from a claude main — the
62
+ # opposite family's CLI is dispatched as a fresh read-only subprocess.
63
+ offers = [{ operation = "exec-review", adapter = "exec-stdio-v1", hosts = ["codex"] }]
69
64
 
70
65
  # ── review methods (DESIGN.md §1) ───────────────────────────────────────────
71
66
  # Data only. Adding a method here — including one this repo has never seen — must
@@ -92,59 +87,33 @@ aggregation = "majority"
92
87
  severity_emits = ["blocker", "high", "medium", "low", "info"]
93
88
  severity_map = { blocker = "blocker", high = "high", medium = "medium", low = "low", info = "info" }
94
89
 
95
- [review_methods.onto]
96
- label = "onto structured lens review"
97
- description = "Audits any target — code, a design doc, a whole repo — against the intent you state, looking hardest at whether authority, gates and harness are consistent with one another; complementary to the ultracode workflows rather than an alternative, and enough on its own for a logic-bearing document, ontology, harness or gate. Six lenses, cited issues, dissent kept as an artifact. Needs no diff. Returns a handle, not a result: poll 10+ min, and read record_status before believing a clean report."
98
- capability = "onto"
99
- operation = "structured-review"
100
- # `effort` is sent and `auth` is deliberately NOT. onto's per-call override REPLACES
101
- # a seat whose route differs, so what it omits is dropped rather than inherited —
102
- # which is why effort must be stated: this binding IS the reviewer's pinned rigour.
103
- # auth is the opposite case. onto selects the metered route only when a seat says so in
104
- # writing — `auth = "api_key"` or an `api_key_env` naming the variable to call — and
105
- # defaults to the subscription worker otherwise, so an omitted auth cannot land on
106
- # metered and stating one buys nothing. It does cost something: switching a seat to
107
- # oauth is a route change, so a user who deliberately chose metered loses both their
108
- # auth and the api_key_env that carried it. Omitting it lets onto's default protect the
109
- # unconfigured seat and its overlay preserve the configured one.
110
- instructions = 'call onto_review/onto_prepare_review with llmOverride={{"provider":"{provider}","model":"{model}","effort":"{effort}"}} so onto runs on {provider} at {effort}'
90
+ [review_methods.codex-exec]
91
+ label = "Codex deep exec review"
92
+ # Named for the mechanism, not for the legacy layer. The legacy route token `ultracode`
93
+ # used to BE its capability's key, so naming another tool with the bare name silently
94
+ # repointed the legacy route — the golden caught that, and the fix was to bind the legacy
95
+ # token to a capability explicitly (`LEGACY_ULTRACODE_CAPABILITY`) rather than let a setup
96
+ # name and a tool id be the same string.
97
+ description = "One deep pass by the Codex CLI in non-interactive exec mode: the whole packet handed to a single frontier-effort model rather than fanned out over agents. Use it on things that have to WORK when the strongest single reader beats many angles; the Claude-side workflow below is the fan-out counterpart. Reviews whatever packet you hand it on stdin, so it needs no working-tree state and nothing installed beyond the codex CLI itself."
98
+ capability = "codex-exec"
99
+ operation = "exec-review"
100
+ # The exec flags are the whole mechanism, so they are stated as literals rather than left
101
+ # to the dispatcher's memory. The severity ladder is stated too, and that is what makes
102
+ # the identity map below TRUE rather than copied: this reviewer has no vocabulary of its
103
+ # own it reports on the ladder because the request tells it to.
104
+ instructions = 'dispatch {command} exec -s read-only -m {model} -c model_reasoning_effort="{effort}" as a fresh read-only process with a self-contained review packet on stdin (the -s flag is what makes read-only true rather than promised; append -c service_tier="fast" only when a faster, shallower turnaround is explicitly wanted), and require every finding to carry one of {severities}'
111
105
  output = "review-v1"
112
- perspectives = ["axiology", "coverage", "evolution", "logic", "semantics", "structure"]
106
+ perspectives = ["deep-exec"]
113
107
  trials = 1
114
108
  order = "fixed"
115
109
  swap_augmentation = false
116
110
  aggregation = "union"
117
- # onto's own REVIEW_SEVERITY_ORDER is this same ladder — read in its source, not
118
- # assumed. Identity is correct here for a different reason than the panel below.
119
111
  severity_emits = ["blocker", "high", "medium", "low", "info"]
120
112
  severity_map = { blocker = "blocker", high = "high", medium = "medium", low = "low", info = "info" }
121
113
 
122
- [review_methods.ultracode-for-codex]
123
- label = "Ultracode workflow review (Codex)"
124
- # Named for the tool, not for the legacy layer. The legacy route token `ultracode` used to
125
- # BE this capability's key, so naming the Claude tool `ultracode` silently repointed the
126
- # legacy route at it — the golden caught that, and the fix was to bind the legacy token to
127
- # a capability explicitly (`LEGACY_ULTRACODE_CAPABILITY`) rather than let a setup name and
128
- # a tool id be the same string.
129
- description = "The same dynamic workflow, ported to Codex — same use: things that have to WORK, checked from many angles rather than one. Fans dozens of Codex agents over your UNCOMMITTED working-tree changes for file:line defects, each candidate verified by its own agent. Its built-in code-review fails before spawning anything when the tree holds no reviewable change — clean, or only types it excludes such as .java, Dockerfile or dist/. Passing that gate is not the same as your files being reviewed. Detached: launching exits 0 even when the run dies."
130
- capability = "ultracode-for-codex"
131
- operation = "workflow-review"
132
- instructions = "run {command} against a self-contained review packet on {model}/{effort}"
133
- output = "review-v1"
134
- perspectives = ["orchestration"]
135
- trials = 1
136
- order = "fixed"
137
- swap_augmentation = false
138
- aggregation = "union"
139
- # P0..P3 plus a null severity, taken from the tool's own result contract. The mapping
140
- # is the owner's call: the tool documents the vocabulary but not what each level
141
- # means, so it cannot be derived. "null" keys a finding the tool reports with none.
142
- severity_emits = ["P0", "P1", "P2", "P3", "null"]
143
- severity_map = { P0 = "blocker", P1 = "high", P2 = "medium", P3 = "low", null = "info" }
144
-
145
114
  [review_methods.ultracode]
146
115
  label = "Ultracode workflow review (Claude)"
147
- description = "Claude Code's own dynamic workflow, on Claude. Decomposes the request across many agents and adversarially verifies each candidate finding before it survives. Use it on things that have to WORK — functional, adversarial, logic, scenario and stress passes — where onto is the one to reach for when the question is whether authority, gates and harness agree. Reviews whatever packet you hand it, so it needs no working-tree state. The keyword in the prompt is what opens the workflow: without it the turn is an ordinary session that will answer, plausibly, alone. PRECONDITION this launcher cannot establish: the keyword trigger must be enabled (`workflowKeywordTriggerEnabled`, default true, verified in claude 2.1.220). A resolvable claude CLI proves the command exists, not that the workflow opens — with that setting off the review runs as an ordinary session and would report as though it were orchestrated."
116
+ description = "Claude Code's own dynamic workflow, on Claude. Decomposes the request across many agents and adversarially verifies each candidate finding before it survives. Use it on things that have to WORK — functional, adversarial, logic, scenario and stress passes; the Codex-side deep exec review above is the single-reader counterpart. Reviews whatever packet you hand it, so it needs no working-tree state. The keyword in the prompt is what opens the workflow: without it the turn is an ordinary session that will answer, plausibly, alone. PRECONDITION this launcher cannot establish: the keyword trigger must be enabled (`workflowKeywordTriggerEnabled`, default true, verified in claude 2.1.220). A resolvable claude CLI proves the command exists, not that the workflow opens — with that setting off the review runs as an ordinary session and would report as though it were orchestrated."
148
117
  capability = "ultracode"
149
118
  operation = "workflow-review"
150
119
  # The keyword is the whole mechanism, so it is stated as a literal rather than left to the
@@ -167,9 +136,6 @@ severity_map = { blocker = "blocker", high = "high", medium = "medium", low = "l
167
136
  # the reverse map must be unique so it resolves to exactly one validatable seat.
168
137
  provider = "openai"
169
138
  models = ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna"]
170
- # onto review seat used when a CROSS-family main (Claude) routes onto review to
171
- # this (gpt/codex) family; must be an onto review-role registered (provider, model).
172
- onto_review = { provider = "openai", model = "gpt-5.6-sol" }
173
139
 
174
140
  [hosts.codex.tiers.frontier]
175
141
  model = "gpt-5.6-sol"
@@ -209,9 +175,6 @@ sweep = "${CODEX_HOME}/agents/sweep.toml"
209
175
  [hosts.claude]
210
176
  provider = "anthropic"
211
177
  models = ["claude-fable-5", "claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5"]
212
- # onto review seat used when a CROSS-family main (Codex) routes onto review to
213
- # this (anthropic/claude) family; must be an onto review-role registered (provider, model).
214
- onto_review = { provider = "anthropic", model = "claude-fable-5" }
215
178
 
216
179
  [hosts.claude.tiers.frontier]
217
180
  model = "claude-fable-5"
@@ -241,7 +204,7 @@ claude_permission_mode = "bypassPermissions"
241
204
 
242
205
  [presets.deep-review]
243
206
  label = "Deep review"
244
- description = "HELM with hybrid onto, native, and Ultracode review at deep FRONTIER effort."
207
+ description = "HELM with the base panel plus both deep reviewers — Codex exec at ultra and the Claude workflow — at FRONTIER effort."
245
208
  mode = "builder"
246
209
  main_tier = "helm"
247
210
  frontier_effort = { codex = "ultra", claude = "max" }
@@ -318,22 +281,15 @@ tier = "helm"
318
281
  provider = "openai"
319
282
  tier = "frontier"
320
283
 
321
- [presets.deep-review.review.hosts.claude.methods."onto"]
322
- provider = "openai"
323
- tier = "frontier"
324
-
325
- [presets.deep-review.review.hosts.claude.methods."ultracode-for-codex"]
284
+ [presets.deep-review.review.hosts.claude.methods."codex-exec"]
326
285
  provider = "openai"
327
- tier = "frontier"
286
+ model = "gpt-5.6-sol"
287
+ effort = "ultra"
328
288
 
329
289
  [presets.deep-review.review.hosts.codex.base]
330
290
  provider = "anthropic"
331
291
  tier = "frontier"
332
292
 
333
- [presets.deep-review.review.hosts.codex.methods."onto"]
334
- provider = "anthropic"
335
- tier = "frontier"
336
-
337
293
  [presets.deep-review.review.hosts.codex.methods."ultracode"]
338
294
  provider = "anthropic"
339
295
  tier = "frontier"
@@ -350,22 +306,15 @@ tier = "workhorse"
350
306
  provider = "openai"
351
307
  tier = "frontier"
352
308
 
353
- [presets.session-distill.review.hosts.claude.methods."onto"]
309
+ [presets.session-distill.review.hosts.claude.methods."codex-exec"]
354
310
  provider = "openai"
355
- tier = "frontier"
356
-
357
- [presets.session-distill.review.hosts.claude.methods."ultracode-for-codex"]
358
- provider = "openai"
359
- tier = "frontier"
311
+ model = "gpt-5.6-sol"
312
+ effort = "ultra"
360
313
 
361
314
  [presets.session-distill.review.hosts.codex.base]
362
315
  provider = "anthropic"
363
316
  tier = "frontier"
364
317
 
365
- [presets.session-distill.review.hosts.codex.methods."onto"]
366
- provider = "anthropic"
367
- tier = "frontier"
368
-
369
318
  [presets.session-distill.review.hosts.codex.methods."ultracode"]
370
319
  provider = "anthropic"
371
320
  tier = "frontier"
@@ -0,0 +1,66 @@
1
+ # UI text catalog: English, the reference key-set. Every `t("key")` in
2
+ # launch/agent-launch.py must exist here, and ko.toml/ja.toml must carry
3
+ # exactly this key-set — the parity gate holds all three, both directions.
4
+ # Chrome only: launch-contract text is never sourced from a catalog.
5
+
6
+ "mode.title" = "Mode"
7
+ "mode.swe.label" = "Software Engineer"
8
+ "mode.swe.description" = "Repo-scoped work that defers to the project's own AGENTS.md/CLAUDE.md: a bare Vanilla session, or Custom to configure one."
9
+ "mode.builder.label" = "Builder"
10
+ "mode.builder.description" = "Tune tiers, review routes, and permissions across fixed presets; includes Custom."
11
+ "mode.distill.label" = "Session distill"
12
+ "mode.distill.description" = "Enter the dedicated session-distill hub: status, packages, versions, and session start."
13
+
14
+ "language.label" = "Language"
15
+ "language.description" = "Choose the TUI language (English / 한국어 / 日本語). The corpus the AI consumes stays English; this changes the launcher's screens only."
16
+ "language.title" = "Language"
17
+ "language.en.description" = "Show the launcher's screens in English."
18
+ "language.ko.description" = "런처 화면을 한국어로 표시합니다."
19
+ "language.ja.description" = "ランチャーの画面を日本語で表示します。"
20
+
21
+ "corpus.label" = "Corpus packages"
22
+ "corpus.description" = "Choose which corpus domain packages are installed; applying runs the installer's onboard loop (install + activation canary)."
23
+ "corpus.title" = "Corpus packages"
24
+ "corpus.core.line" = "core + infra always install; the checklist covers the optional domain packages."
25
+ "corpus.toggle.description" = "Toggle this domain package. Nothing changes until Apply."
26
+ "corpus.apply.label" = "Apply selection"
27
+ "corpus.apply.description" = "Run agent-bios onboard with exactly the checked set; the installer deploys, canaries, and records the outcome."
28
+ "corpus.apply.unchanged" = "the checked set equals the applied one — nothing to apply"
29
+ "corpus.unavailable.line1" = "The corpus status projection is missing or predates domain reporting."
30
+ "corpus.unavailable.line2" = "Run: agent-bios install (it rewrites the projection this screen reads)"
31
+ "corpus.back.hint" = "Return to the mode menu."
32
+
33
+ "wizard.title" = "Register another reviewer"
34
+ "wizard.id.label" = "Method id (kebab-case)"
35
+ "wizard.label.label" = "Label (shown in the method list)"
36
+ "wizard.description.label" = "Description (what it reviews best)"
37
+ "wizard.drives.title" = "What runs this reviewer?"
38
+ "wizard.drives.tool.label" = "An installed tool"
39
+ "wizard.drives.tool.description" = "The method drives a capability: a command this machine can resolve, with an operation/adapter/hosts offer."
40
+ "wizard.drives.panel.label" = "Fresh host subprocesses (panel-shaped)"
41
+ "wizard.drives.panel.description" = "No tool: isolated passes by the host CLI itself. The reader requires at least 2 distinct perspectives and 2 trials."
42
+ "wizard.cap.name.label" = "Capability name"
43
+ "wizard.cap.command.label" = "Command (resolved on PATH, or ${backend} for the host CLI)"
44
+ "wizard.cap.install.label" = "Install line (runs via agent-bios install --with; '-' for none)"
45
+ "wizard.cap.operation.label" = "Operation (the join key between method and offer)"
46
+ "wizard.cap.adapter.title" = "Adapter (core protocol codec)"
47
+ "wizard.cap.hosts.title" = "Which host seats can this tool fill?"
48
+ "wizard.cap.hosts.both" = "both (codex and claude)"
49
+ "wizard.perspectives.label" = "Perspectives (comma-separated, at least 2)"
50
+ "wizard.trials.label" = "Trials (at least 2)"
51
+ "wizard.instructions.label" = "Instructions (slots: {command} {model} {effort} {provider} {host} {service_tier} {perspectives} {trials} {severities})"
52
+ "wizard.emits.label" = "Severity values YOUR reviewer reports, verbatim (comma-separated)"
53
+ "wizard.map.title" = "Map to the canonical ladder"
54
+ "wizard.confirm.title" = "The reader accepted this block — write it?"
55
+ "wizard.confirm.target" = "Appends to:"
56
+ "wizard.confirm.write.label" = "Write it"
57
+ "wizard.confirm.write.description" = "Append atomically; your file's existing content is untouched."
58
+ "wizard.confirm.edit.label" = "Edit answers again"
59
+ "wizard.refused.title" = "The reader refused this block"
60
+ "wizard.refused.header" = "Validation is the reader's own; its message, verbatim:"
61
+ "wizard.refused.edit.label" = "Edit answers (kept as defaults)"
62
+ "wizard.refused.edit.description" = "Walk the questions again; every answer is pre-filled."
63
+ "wizard.refused.contract.label" = "Show the file contract"
64
+ "wizard.raced.line" = "The methods file changed while the wizard was open; nothing was written. Re-run the registration."
65
+ "wizard.postwrite.line" = "Post-write re-read did not show the method; the file was restored from your shell's perspective — inspect it by hand."
66
+ "wizard.done.line" = "Registered and live in this launcher:"
@@ -0,0 +1,63 @@
1
+ # UI text catalog: Japanese. Key-set must equal en.toml exactly (gate-enforced).
2
+
3
+ "mode.title" = "モード"
4
+ "mode.swe.label" = "Software Engineer"
5
+ "mode.swe.description" = "プロジェクト自身の AGENTS.md/CLAUDE.md に従うリポジトリ範囲の作業: 素の Vanilla セッション、または Custom で構成します。"
6
+ "mode.builder.label" = "Builder"
7
+ "mode.builder.description" = "固定プリセットで tier・レビュールート・権限を調整します。Custom を含みます。"
8
+ "mode.distill.label" = "Session distill"
9
+ "mode.distill.description" = "専用の session-distill ハブへ: ステータス、パッケージ、バージョン、セッション開始。"
10
+
11
+ "language.label" = "言語"
12
+ "language.description" = "TUI の言語を選択します (English / 한국어 / 日本語)。AI が消費するコーパスは英語のままで、ランチャーの画面だけが変わります。"
13
+ "language.title" = "言語"
14
+ "language.en.description" = "Show the launcher's screens in English."
15
+ "language.ko.description" = "런처 화면을 한국어로 표시합니다."
16
+ "language.ja.description" = "ランチャーの画面を日本語で表示します。"
17
+
18
+ "corpus.label" = "コーパスパッケージ"
19
+ "corpus.description" = "インストールするコーパスのドメインパッケージを選択します。適用するとインストーラーの onboard ループ(インストール + 起動カナリア)が実行されます。"
20
+ "corpus.title" = "コーパスパッケージ"
21
+ "corpus.core.line" = "core + infra は常にインストールされます。このチェックリストは任意のドメインパッケージのみを扱います。"
22
+ "corpus.toggle.description" = "このドメインパッケージを切り替えます。Apply まで何も変わりません。"
23
+ "corpus.apply.label" = "選択を適用"
24
+ "corpus.apply.description" = "チェックされた集合そのままで agent-bios onboard を実行します。デプロイ・カナリア・結果記録はインストーラーが行います。"
25
+ "corpus.apply.unchanged" = "チェックされた集合は適用済みの集合と同じです — 適用するものがありません"
26
+ "corpus.unavailable.line1" = "corpus status projection が存在しないか、ドメイン報告以前のバージョンです。"
27
+ "corpus.unavailable.line2" = "実行: agent-bios install (この画面が読む projection を書き直します)"
28
+ "corpus.back.hint" = "モードメニューに戻ります。"
29
+
30
+ "wizard.title" = "別のレビュアーを登録"
31
+ "wizard.id.label" = "Method id (kebab-case)"
32
+ "wizard.label.label" = "ラベル (method 一覧に表示)"
33
+ "wizard.description.label" = "説明 (何のレビューが得意か)"
34
+ "wizard.drives.title" = "このレビュアーは何が実行しますか?"
35
+ "wizard.drives.tool.label" = "インストール済みのツール"
36
+ "wizard.drives.tool.description" = "method が capability を駆動します: このマシンで解決できる command と operation/adapter/hosts offer。"
37
+ "wizard.drives.panel.label" = "新しい host サブプロセス (panel 型)"
38
+ "wizard.drives.panel.description" = "ツールなし: host CLI 自体の隔離パス。reader は相異なる perspective 2 つ以上と trial 2 回以上を要求します。"
39
+ "wizard.cap.name.label" = "Capability 名"
40
+ "wizard.cap.command.label" = "Command (PATH で解決、host CLI なら ${backend})"
41
+ "wizard.cap.install.label" = "Install 行 (agent-bios install --with が実行; なければ '-')"
42
+ "wizard.cap.operation.label" = "Operation (method と offer を結ぶ join key)"
43
+ "wizard.cap.adapter.title" = "Adapter (core プロトコル codec)"
44
+ "wizard.cap.hosts.title" = "このツールが担える host seat は?"
45
+ "wizard.cap.hosts.both" = "両方 (codex と claude)"
46
+ "wizard.perspectives.label" = "Perspectives (カンマ区切り、2 つ以上)"
47
+ "wizard.trials.label" = "Trials (2 以上)"
48
+ "wizard.instructions.label" = "Instructions (slot: {command} {model} {effort} {provider} {host} {service_tier} {perspectives} {trials} {severities})"
49
+ "wizard.emits.label" = "レビュアーが実際に報告する severity 値、そのまま (カンマ区切り)"
50
+ "wizard.map.title" = "canonical ladder へマッピング"
51
+ "wizard.confirm.title" = "reader がこのブロックを受理しました — 書き込みますか?"
52
+ "wizard.confirm.target" = "追記先:"
53
+ "wizard.confirm.write.label" = "書き込む"
54
+ "wizard.confirm.write.description" = "アトミックに追記します。ファイルの既存内容には触れません。"
55
+ "wizard.confirm.edit.label" = "回答を再編集"
56
+ "wizard.refused.title" = "reader がこのブロックを拒否しました"
57
+ "wizard.refused.header" = "検証は reader のものです。そのメッセージをそのまま:"
58
+ "wizard.refused.edit.label" = "回答を編集 (既定値として保持)"
59
+ "wizard.refused.edit.description" = "質問をやり直します。すべての回答が事前入力されています。"
60
+ "wizard.refused.contract.label" = "ファイル契約を表示"
61
+ "wizard.raced.line" = "ウィザードを開いている間に methods ファイルが変更されました。何も書き込んでいません。登録をやり直してください。"
62
+ "wizard.postwrite.line" = "書き込み後の再読込で method が見つかりません。ファイルを直接確認してください。"
63
+ "wizard.done.line" = "登録完了、このランチャーで即時利用可能:"
@@ -0,0 +1,63 @@
1
+ # UI text catalog: Korean. Key-set must equal en.toml exactly (gate-enforced).
2
+
3
+ "mode.title" = "모드"
4
+ "mode.swe.label" = "Software Engineer"
5
+ "mode.swe.description" = "프로젝트 자체의 AGENTS.md/CLAUDE.md를 따르는 레포 범위 작업: 순정 Vanilla 세션 또는 Custom으로 직접 구성합니다."
6
+ "mode.builder.label" = "Builder"
7
+ "mode.builder.description" = "고정 프리셋들에서 tier·리뷰 라우트·권한을 조정합니다. Custom 포함."
8
+ "mode.distill.label" = "Session distill"
9
+ "mode.distill.description" = "전용 session-distill 허브로 이동: 상태, 패키지, 버전, 세션 시작."
10
+
11
+ "language.label" = "언어"
12
+ "language.description" = "TUI 언어를 선택합니다 (English / 한국어 / 日本語). AI가 소비하는 코퍼스는 영어 그대로이며, 런처 화면만 바뀝니다."
13
+ "language.title" = "언어"
14
+ "language.en.description" = "Show the launcher's screens in English."
15
+ "language.ko.description" = "런처 화면을 한국어로 표시합니다."
16
+ "language.ja.description" = "ランチャーの画面を日本語で表示します。"
17
+
18
+ "corpus.label" = "코퍼스 패키지"
19
+ "corpus.description" = "설치할 코퍼스 도메인 패키지를 선택합니다. 적용하면 설치기의 onboard 루프(설치 + 활성화 카나리)가 실행됩니다."
20
+ "corpus.title" = "코퍼스 패키지"
21
+ "corpus.core.line" = "core + infra는 항상 설치됩니다. 이 체크리스트는 선택 도메인 패키지만 다룹니다."
22
+ "corpus.toggle.description" = "이 도메인 패키지를 토글합니다. Apply 전까지 아무것도 바뀌지 않습니다."
23
+ "corpus.apply.label" = "선택 적용"
24
+ "corpus.apply.description" = "체크된 집합 그대로 agent-bios onboard를 실행합니다. 배포·카나리·결과 기록은 설치기가 수행합니다."
25
+ "corpus.apply.unchanged" = "체크된 집합이 적용된 집합과 같습니다 — 적용할 것이 없습니다"
26
+ "corpus.unavailable.line1" = "corpus status projection이 없거나 도메인 보고 이전 버전입니다."
27
+ "corpus.unavailable.line2" = "실행: agent-bios install (이 화면이 읽는 projection을 다시 씁니다)"
28
+ "corpus.back.hint" = "모드 메뉴로 돌아갑니다."
29
+
30
+ "wizard.title" = "다른 리뷰어 등록"
31
+ "wizard.id.label" = "Method id (kebab-case)"
32
+ "wizard.label.label" = "라벨 (method 목록에 표시)"
33
+ "wizard.description.label" = "설명 (무엇을 가장 잘 리뷰하는지)"
34
+ "wizard.drives.title" = "이 리뷰어는 무엇이 실행하나요?"
35
+ "wizard.drives.tool.label" = "설치된 도구"
36
+ "wizard.drives.tool.description" = "method가 capability를 구동합니다: 이 머신에서 해석 가능한 command와 operation/adapter/hosts offer."
37
+ "wizard.drives.panel.label" = "새 host 서브프로세스 (panel형)"
38
+ "wizard.drives.panel.description" = "도구 없음: host CLI 자체의 격리 pass. reader가 서로 다른 perspective 2개 이상과 trial 2회 이상을 요구합니다."
39
+ "wizard.cap.name.label" = "Capability 이름"
40
+ "wizard.cap.command.label" = "Command (PATH에서 해석, host CLI면 ${backend})"
41
+ "wizard.cap.install.label" = "Install 라인 (agent-bios install --with가 실행; 없으면 '-')"
42
+ "wizard.cap.operation.label" = "Operation (method와 offer를 잇는 join key)"
43
+ "wizard.cap.adapter.title" = "Adapter (core 프로토콜 codec)"
44
+ "wizard.cap.hosts.title" = "이 도구가 채울 수 있는 host seat는?"
45
+ "wizard.cap.hosts.both" = "둘 다 (codex와 claude)"
46
+ "wizard.perspectives.label" = "Perspectives (쉼표 구분, 2개 이상)"
47
+ "wizard.trials.label" = "Trials (2 이상)"
48
+ "wizard.instructions.label" = "Instructions (slot: {command} {model} {effort} {provider} {host} {service_tier} {perspectives} {trials} {severities})"
49
+ "wizard.emits.label" = "리뷰어가 실제로 보고하는 severity 값들, 그대로 (쉼표 구분)"
50
+ "wizard.map.title" = "canonical ladder로 매핑"
51
+ "wizard.confirm.title" = "reader가 이 블록을 수락했습니다 — 기록할까요?"
52
+ "wizard.confirm.target" = "추가 대상:"
53
+ "wizard.confirm.write.label" = "기록"
54
+ "wizard.confirm.write.description" = "원자적으로 append합니다. 파일의 기존 내용은 건드리지 않습니다."
55
+ "wizard.confirm.edit.label" = "답변 다시 편집"
56
+ "wizard.refused.title" = "reader가 이 블록을 거부했습니다"
57
+ "wizard.refused.header" = "검증은 reader의 것입니다. 그 메시지 그대로:"
58
+ "wizard.refused.edit.label" = "답변 편집 (기본값으로 유지됨)"
59
+ "wizard.refused.edit.description" = "질문을 다시 진행합니다. 모든 답이 미리 채워져 있습니다."
60
+ "wizard.refused.contract.label" = "파일 계약 보기"
61
+ "wizard.raced.line" = "마법사가 열려 있는 동안 methods 파일이 바뀌었습니다. 아무것도 기록하지 않았습니다. 등록을 다시 실행하세요."
62
+ "wizard.postwrite.line" = "기록 후 재확인에서 method가 보이지 않습니다. 파일을 직접 확인하세요."
63
+ "wizard.done.line" = "등록 완료, 이 런처에서 즉시 사용 가능:"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-bios",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "releaseDate": "2026-08-10",
5
5
  "description": "A thin, low-level instruction layer for LLM CLI agents: one set of principles and behavior whichever model you run. Deploys into $HOME by copy via an explicit `agent-bios install`.",
6
6
  "bin": {
@@ -17,6 +17,7 @@
17
17
  "codex/agents/",
18
18
  "codex/config-additions.toml",
19
19
  "launch/agent-launch.toml",
20
+ "launch/i18n",
20
21
  "compose/domains.json",
21
22
  "learn/learning.schema.json",
22
23
  "learn/promotions.json",
package/provenance.json CHANGED
@@ -1 +1 @@
1
- {"commit":"2accbf670c653ecc3fcd8fa023cd33a8da7c177d","committedAt":"2026-08-10T06:03:23+09:00","dirty":false}
1
+ {"commit":"7726933922b63dc7d3749e6aa971fb395a26cfad","committedAt":"2026-08-10T16:38:38+09:00","dirty":false}
@@ -4,7 +4,7 @@
4
4
  # Purpose: let a caller (e.g. Claude driving Codex CLI) control, per invocation,
5
5
  # the three levers that otherwise silently vary by consumer — raw Codex CLI and
6
6
  # codex-plugin-cc inherit the real ~/.codex (AGENTS.md + full config.toml), while
7
- # ultracode-for-codex subagents run hermetic (no AGENTS.md, minimal config). This
7
+ # a hermetic reviewer must see none of it (no AGENTS.md, minimal config). This
8
8
  # raw adapter makes that choice explicit instead of implicit. It is not a policy
9
9
  # boundary; callers that pass -c are making expert overrides:
10
10
  # (1) AGENTS.md / global instructions — via CODEX_HOME (the --profile)