agent-bios 0.18.0 → 0.19.1

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 (55) hide show
  1. package/DEPENDENCIES.md +236 -80
  2. package/INSTALL.md +112 -0
  3. package/README.md +187 -524
  4. package/claude/CLAUDE.md +1 -1
  5. package/claude/guides/cli-multi-model-workflow.md +1 -1
  6. package/claude/guides/learning-flow.md +23 -12
  7. package/claude/guides/session-distill-workflow.md +22 -12
  8. package/claude/skills/understand/SKILL.md +52 -22
  9. package/codex/AGENTS.md +1 -1
  10. package/codex/guides/cli-multi-model-workflow.md +1 -1
  11. package/codex/guides/learning-flow.md +23 -12
  12. package/codex/guides/session-distill-workflow.md +22 -12
  13. package/compose/app_bridge/SKILL.md +75 -0
  14. package/compose/app_bridge/agents/openai.yaml +2 -0
  15. package/compose/app_bridge/scripts/bridge.py +76 -0
  16. package/compose/bootstrap/SKILL.md +12 -1
  17. package/compose/corpus.py +31 -9
  18. package/compose/corpus_app.py +456 -0
  19. package/compose/corpus_import.py +529 -0
  20. package/compose/corpus_install.py +202 -18
  21. package/compose/corpus_session.py +27 -0
  22. package/compose/corpus_setup.py +676 -0
  23. package/compose/corpus_setup_cli.py +585 -0
  24. package/compose/corpus_setup_i18n.py +324 -0
  25. package/compose/corpus_setup_ui.py +647 -0
  26. package/compose/corpus_store.py +213 -32
  27. package/compose/corpus_transaction.py +43 -10
  28. package/compose/corpus_ui_runtime.py +278 -0
  29. package/compose/corpus_understand.py +173 -22
  30. package/compose/setup/START.md +158 -0
  31. package/compose/ui_runtime/linkify_it_py-2.2.0-py3-none-any.whl +0 -0
  32. package/compose/ui_runtime/manifest.json +238 -0
  33. package/compose/ui_runtime/markdown_it_py-4.2.0-py3-none-any.whl +0 -0
  34. package/compose/ui_runtime/mdit_py_plugins-0.6.1-py3-none-any.whl +0 -0
  35. package/compose/ui_runtime/mdurl-0.1.2-py3-none-any.whl +0 -0
  36. package/compose/ui_runtime/platformdirs-4.11.8-py3-none-any.whl +0 -0
  37. package/compose/ui_runtime/pygments-2.21.0-py3-none-any.whl +0 -0
  38. package/compose/ui_runtime/rich-15.0.0-py3-none-any.whl +0 -0
  39. package/compose/ui_runtime/textual-8.2.8-py3-none-any.whl +0 -0
  40. package/compose/ui_runtime/typing_extensions-4.16.0-py3-none-any.whl +0 -0
  41. package/docs/advanced-launch.md +131 -0
  42. package/docs/assets/corpus-studio.svg +227 -0
  43. package/docs/corpus.md +117 -0
  44. package/docs/recovery.md +201 -0
  45. package/docs/session-model.md +120 -0
  46. package/docs/setup.md +206 -0
  47. package/docs/understand.md +88 -0
  48. package/install.sh +75 -46
  49. package/launch/agent-launch.py +99 -52
  50. package/launch/provision-venv.sh +44 -13
  51. package/learn/collect-learning.py +14 -5
  52. package/learn/learning.schema.json +2 -2
  53. package/package.json +14 -2
  54. package/provenance.json +1 -1
  55. package/wrappers/claude-run.sh +10 -13
@@ -0,0 +1,158 @@
1
+ # Set up agent-bios through conversation
2
+
3
+ This guide uses the same installation controller as the terminal wizard. The
4
+ conversation collects choices and presents effects; `setup` validates and executes
5
+ them. It needs local command and file access on the intended machine, Bash, and
6
+ Python 3.11 or newer. Codex CLI, an additional model login, and Textual are not
7
+ requirements for this route.
8
+
9
+ ## Start without an installed skill
10
+
11
+ The user can request installation using the public repository link. Follow the
12
+ repository's root `INSTALL.md` to obtain and verify the source, select the language
13
+ and run `setup start`. The agent resolves paths; the user does not need a checkout,
14
+ an installed skill or a long installation prompt. An explicitly selected trusted
15
+ local source remains valid. Preserve the acquisition's exact revision and location
16
+ for the review and any resume. If the selected public revision lacks conversation
17
+ setup, report that limitation instead of invoking an older installation route.
18
+
19
+ ## Choose the entrypoint and language
20
+
21
+ For an already registered app bridge, run `python3 "$BRIDGE" setup start`, where
22
+ `BRIDGE` is the absolute helper path beside the loaded skill. Read the returned
23
+ `guide_path`. For an acquired source, use the verified `setup_argv` from its start
24
+ response. Keep using that entrypoint and the reported private roots throughout
25
+ the review. Shell variables from one app tool call do not persist to the next;
26
+ pass absolute arguments or set the variable in the same call.
27
+
28
+ `start` returns language choices, a suggested language and execution context without
29
+ probing dependencies or creating private setup state. Confirm English, 한국어 or
30
+ 日本語, honoring an explicit language already chosen by the user, before `inspect`.
31
+ Use the selected language for questions and explanations; retain identifiers,
32
+ paths, versions, raw diagnostics and command arguments exactly. Use a native
33
+ question control when the current host exposes one for this interaction, or ask
34
+ ordinary concise questions. The conversation does not require custom widgets.
35
+
36
+ The commands below use `agent-bios` as shorthand for that verified entrypoint. In
37
+ an app bridge call, replace `agent-bios setup` with `python3 "$BRIDGE" setup`.
38
+
39
+ ```bash
40
+ agent-bios setup inspect --language ko
41
+ agent-bios setup discover --project-root /absolute/project
42
+ ```
43
+
44
+ ## Collect and review the choices
45
+
46
+ Use `inspect`'s `default_plan`, inventory and choices. Present all dependency
47
+ capabilities with readiness, purpose and installation destination. Ready dependencies
48
+ are observations, not requested actions: include only chosen missing dependencies
49
+ with returned recipes in `dependencies`. Do not create shell recipes from model
50
+ memory. A dependency's presence does not authorize installing another one.
51
+
52
+ `retained_corpus` reports local personal instructions and host learning records
53
+ already stored on this device as `{target, label, item_count}`; localized labels are
54
+ in `display.retained_corpus`. Present this separately as a read-only storage view,
55
+ not as extra installation choices or evidence of active use. Counts cover stored,
56
+ nonremoved items regardless of enable overrides or current host/project eligibility,
57
+ and reveal no bodies. Do not copy these rows into `targets`; use the source `choices`
58
+ and the user's activation-policy decision.
59
+
60
+ Collect the six plan fields without asking the user to author JSON:
61
+
62
+ - `selection_mode` and `targets`: keep saved policy, no active corpus, all available
63
+ corpus, or specific returned package/domain/item targets. Start from the returned
64
+ default. No active corpus retains private library assets but delivers no corpus.
65
+ - `dependencies`: chosen installable inventory IDs; an empty list installs none.
66
+ - `app_bridge`: the explicit **Connect to the Codex app** choice, adding `$agent-bios`
67
+ for setup and personal instruction management. Registration enables discovery only;
68
+ each task still requires its own explicit corpus use.
69
+ - `project_roots` and `import_paths`: absolute project folders and explicitly
70
+ selected files from discovery. Capture is independent of corpus selection.
71
+
72
+ Keep saved policy uses `selection_mode: null` and `targets: null`. No active corpus
73
+ uses `"none"` and `[]`. Explicit choices use `"selected"` and their target list;
74
+ all available corpus uses `"selected"` and `["all"]`.
75
+
76
+ Discovery checks known global instruction locations and the specified project
77
+ roots. Show detected sources before selecting them. Capture preserves originals
78
+ and prepares private evidence for later model review; it is not an automatically
79
+ optimized personal corpus. Read the import procedure only when the user requests
80
+ that subsequent review.
81
+
82
+ Save choices to a new caller-owned artifact. Run `plan` and save its complete
83
+ stdout bytes to another new caller-owned artifact:
84
+
85
+ ```bash
86
+ agent-bios setup plan --language ko --input /absolute/choices.json > /absolute/review.json
87
+ ```
88
+
89
+ The returned review envelope contains `review_id`, `context`, `language`,
90
+ `preview` and `summary`. Keep the entire envelope; do not reconstruct it from the
91
+ summary, copy only `preview`, change its IDs, or accept truncated output. Show the
92
+ concrete private paths, selected dependency commands/destinations, corpus policy,
93
+ app discovery change and selected capture sources. Keep the exact artifact
94
+ available for inspection. Preparing these caller-owned files is separate from
95
+ applying installation effects.
96
+
97
+ Apply the saved envelope only when its concrete choices are authorized. Existing
98
+ authorization for those exact choices does not require another confirmation.
99
+
100
+ ```bash
101
+ agent-bios setup apply --input /absolute/review.json --review-id REVIEW_ID --yes
102
+ ```
103
+
104
+ The engine checks the reviewed context, source bytes, private state and package
105
+ before its effects. If the review is stale, show a fresh plan and explain the
106
+ changed effects; do not bypass checks. Report completed dependencies, private
107
+ installation, bridge registration and pending import separately. A partial failure
108
+ or cancellation does not roll back completed external package installations.
109
+
110
+ ## Continue or resume
111
+
112
+ ```bash
113
+ agent-bios setup status --review-id REVIEW_ID
114
+ agent-bios setup resume --review-id REVIEW_ID
115
+ ```
116
+
117
+ These commands do not execute the remaining installation. `status` reports the
118
+ recorded attempt in `receipt`, `result` and `state`; a past `complete` result does
119
+ not establish the current runtime's health. Inspect `handoff` for current readiness
120
+ and any `needs_action`. Package verification, full runtime verification and helper
121
+ verification are independent observations; one does not prove the others.
122
+ `replayed: true` means the existing attempt was returned without executing it again.
123
+ If `handoff.verification` is `"deferred"`, its readiness fields are null: they are
124
+ unverified, not false. Status can return recorded progress while setup holds the
125
+ private-state lock. Follow `needs_action` and retry status when that operation has
126
+ settled; require checked readiness before using a handoff to continue.
127
+
128
+ `resume` adds `remaining_plan`, `review` and `needs_action`. When `review` is
129
+ non-null, save that entire nested review object to a new caller-owned JSON artifact
130
+ using deterministic JSON extraction. Do not pass the enclosing status response or
131
+ `remaining_plan` to Apply. Preserve every review field, including `continuation`,
132
+ and use the nested review's own `review_id`. Review its remaining effects before
133
+ applying within the user's authorization. If `review` is null, inspect the stated
134
+ reason; unknown prior effects are not permission to replay package installation.
135
+ When `resumed_from` is present, the response has followed a receipt's `continued_by`
136
+ link to an existing continuation. Report the returned child `review_id` rather than
137
+ assuming the original ID is current.
138
+
139
+ After an explicit app registration succeeds, use `handoff.helper_argv` only when
140
+ `helper_usable` is true, appending `setup` and the desired operation.
141
+ `helper_verified` confirms helper bytes, while `helper_usable` also requires a
142
+ verified package and no pending work blocking it. Otherwise inspect `needs_action`
143
+ and current readiness before continuing. A usable helper can continue in this task
144
+ even if native skill discovery has not refreshed. Without a
145
+ verified helper, a verified runtime's `setup_argv` already includes `setup`;
146
+ `cli_argv` does not. Supply the returned `environment` with each call. These arrays
147
+ are command arguments, not shell snippets. Finish applying an existing review
148
+ through its reviewed entrypoint/context; changing entrypoints requires a fresh
149
+ review. Status and subsequent setup can use the verified handoff.
150
+ Do not create a duplicate personal skill or edit host discovery settings to force
151
+ refresh. Once discovered, `$agent-bios` is the ordinary entrypoint. Registration
152
+ on disk is not proof of discovery or corpus loading.
153
+
154
+ If capture completed, report its actual capture ID and returned next action. Its
155
+ semantic review, proposed consumption placement and revision-checked import are
156
+ separate from installation. Setup enables no hooks, native agent registration,
157
+ permissions or edits to global/project instruction files. Each app task requires
158
+ its own explicit corpus use; neither setup nor opening the app performs it.
@@ -0,0 +1,238 @@
1
+ {
2
+ "schema_version": 1,
3
+ "source": "pypi",
4
+ "python_requirement": ">=3.11",
5
+ "root_requirement": "textual==8.2.8",
6
+ "packages": [
7
+ {
8
+ "name": "linkify-it-py",
9
+ "version": "2.2.0",
10
+ "filename": "linkify_it_py-2.2.0-py3-none-any.whl",
11
+ "sha256": "3adc40eb5af300b2605fcfdb968c24e1d780a90f1f2221af7c15e5111e94d443",
12
+ "size_bytes": 21971,
13
+ "expanded_bytes": 66766,
14
+ "modules": [
15
+ "linkify_it"
16
+ ],
17
+ "license_files": [
18
+ "linkify_it_py-2.2.0.dist-info/licenses/LICENSE"
19
+ ],
20
+ "requires_python": ">=3.10",
21
+ "requires_dist": [
22
+ "pytest; extra == \"test\"",
23
+ "coverage; extra == \"test\"",
24
+ "pytest-cov; extra == \"test\"",
25
+ "pytest-timeout; extra == \"test\"",
26
+ "pre-commit; extra == \"dev\"",
27
+ "isort; extra == \"dev\"",
28
+ "flake8; extra == \"dev\"",
29
+ "black; extra == \"dev\"",
30
+ "pyproject-flake8; extra == \"dev\"",
31
+ "pytest; extra == \"benchmark\"",
32
+ "pytest-benchmark; extra == \"benchmark\"",
33
+ "sphinx; extra == \"doc\"",
34
+ "sphinx_book_theme; extra == \"doc\"",
35
+ "myst-parser; extra == \"doc\""
36
+ ]
37
+ },
38
+ {
39
+ "name": "markdown-it-py",
40
+ "version": "4.2.0",
41
+ "filename": "markdown_it_py-4.2.0-py3-none-any.whl",
42
+ "sha256": "9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a",
43
+ "size_bytes": 91687,
44
+ "expanded_bytes": 244684,
45
+ "modules": [
46
+ "markdown_it"
47
+ ],
48
+ "license_files": [
49
+ "markdown_it_py-4.2.0.dist-info/licenses/LICENSE",
50
+ "markdown_it_py-4.2.0.dist-info/licenses/LICENSE.markdown-it"
51
+ ],
52
+ "requires_python": ">=3.10",
53
+ "requires_dist": [
54
+ "mdurl~=0.1",
55
+ "psutil ; extra == \"benchmarking\"",
56
+ "pytest ; extra == \"benchmarking\"",
57
+ "pytest-benchmark ; extra == \"benchmarking\"",
58
+ "commonmark~=0.9 ; extra == \"compare\"",
59
+ "markdown~=3.4 ; extra == \"compare\"",
60
+ "mistletoe~=1.0 ; extra == \"compare\"",
61
+ "mistune~=3.0 ; extra == \"compare\"",
62
+ "panflute~=2.3 ; extra == \"compare\"",
63
+ "markdown-it-pyrs ; extra == \"compare\"",
64
+ "linkify-it-py>=1,<3 ; extra == \"linkify\"",
65
+ "mdit-py-plugins>=0.5.0 ; extra == \"plugins\"",
66
+ "gprof2dot ; extra == \"profiling\"",
67
+ "mdit-py-plugins>=0.5.0 ; extra == \"rtd\"",
68
+ "myst-parser ; extra == \"rtd\"",
69
+ "pyyaml ; extra == \"rtd\"",
70
+ "sphinx ; extra == \"rtd\"",
71
+ "sphinx-copybutton ; extra == \"rtd\"",
72
+ "sphinx-design ; extra == \"rtd\"",
73
+ "sphinx-book-theme~=1.0 ; extra == \"rtd\"",
74
+ "jupyter_sphinx ; extra == \"rtd\"",
75
+ "ipykernel ; extra == \"rtd\"",
76
+ "coverage ; extra == \"testing\"",
77
+ "pytest ; extra == \"testing\"",
78
+ "pytest-cov ; extra == \"testing\"",
79
+ "pytest-regressions ; extra == \"testing\"",
80
+ "pytest-timeout ; extra == \"testing\"",
81
+ "requests ; extra == \"testing\""
82
+ ]
83
+ },
84
+ {
85
+ "name": "mdit-py-plugins",
86
+ "version": "0.6.1",
87
+ "filename": "mdit_py_plugins-0.6.1-py3-none-any.whl",
88
+ "sha256": "214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d",
89
+ "size_bytes": 66663,
90
+ "expanded_bytes": 172036,
91
+ "modules": [
92
+ "mdit_py_plugins"
93
+ ],
94
+ "license_files": [
95
+ "mdit_py_plugins-0.6.1.dist-info/licenses/LICENSE"
96
+ ],
97
+ "requires_python": ">=3.10",
98
+ "requires_dist": [
99
+ "markdown-it-py>=2.0.0,<5.0.0",
100
+ "pre-commit ; extra == \"code-style\"",
101
+ "myst-parser ; extra == \"rtd\"",
102
+ "sphinx-book-theme ; extra == \"rtd\"",
103
+ "coverage ; extra == \"testing\"",
104
+ "pytest ; extra == \"testing\"",
105
+ "pytest-cov ; extra == \"testing\"",
106
+ "pytest-regressions ; extra == \"testing\"",
107
+ "pytest-timeout ; extra == \"testing\""
108
+ ]
109
+ },
110
+ {
111
+ "name": "mdurl",
112
+ "version": "0.1.2",
113
+ "filename": "mdurl-0.1.2-py3-none-any.whl",
114
+ "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8",
115
+ "size_bytes": 9979,
116
+ "expanded_bytes": 23308,
117
+ "modules": [
118
+ "mdurl"
119
+ ],
120
+ "license_files": [
121
+ "mdurl-0.1.2.dist-info/LICENSE"
122
+ ],
123
+ "requires_python": ">=3.7",
124
+ "requires_dist": []
125
+ },
126
+ {
127
+ "name": "platformdirs",
128
+ "version": "4.11.8",
129
+ "filename": "platformdirs-4.11.8-py3-none-any.whl",
130
+ "sha256": "52f2f181bbfde907966932cc8312d967d02976422d66d537ea16092b8e291081",
131
+ "size_bytes": 24027,
132
+ "expanded_bytes": 129535,
133
+ "modules": [
134
+ "platformdirs"
135
+ ],
136
+ "license_files": [
137
+ "platformdirs-4.11.8.dist-info/licenses/LICENSE"
138
+ ],
139
+ "requires_python": ">=3.10",
140
+ "requires_dist": []
141
+ },
142
+ {
143
+ "name": "pygments",
144
+ "version": "2.21.0",
145
+ "filename": "pygments-2.21.0-py3-none-any.whl",
146
+ "sha256": "2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9",
147
+ "size_bytes": 1250147,
148
+ "expanded_bytes": 4621166,
149
+ "modules": [
150
+ "pygments"
151
+ ],
152
+ "license_files": [
153
+ "pygments-2.21.0.dist-info/licenses/AUTHORS",
154
+ "pygments-2.21.0.dist-info/licenses/LICENSE"
155
+ ],
156
+ "requires_python": ">=3.9",
157
+ "requires_dist": [
158
+ "colorama>=0.4.6; extra == 'windows-terminal'"
159
+ ]
160
+ },
161
+ {
162
+ "name": "rich",
163
+ "version": "15.0.0",
164
+ "filename": "rich-15.0.0-py3-none-any.whl",
165
+ "sha256": "33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb",
166
+ "size_bytes": 310654,
167
+ "expanded_bytes": 1245816,
168
+ "modules": [
169
+ "rich"
170
+ ],
171
+ "license_files": [
172
+ "rich-15.0.0.dist-info/licenses/LICENSE"
173
+ ],
174
+ "requires_python": ">=3.9.0",
175
+ "requires_dist": [
176
+ "ipywidgets (>=7.5.1,<9) ; extra == \"jupyter\"",
177
+ "markdown-it-py (>=2.2.0)",
178
+ "pygments (>=2.13.0,<3.0.0)"
179
+ ]
180
+ },
181
+ {
182
+ "name": "textual",
183
+ "version": "8.2.8",
184
+ "filename": "textual-8.2.8-py3-none-any.whl",
185
+ "sha256": "267375fd402dc8d981457212efa71f0e3365fd17bba144ba9bb3ed7563cb374a",
186
+ "size_bytes": 731418,
187
+ "expanded_bytes": 2827661,
188
+ "modules": [
189
+ "textual"
190
+ ],
191
+ "license_files": [
192
+ "textual-8.2.8.dist-info/licenses/LICENSE"
193
+ ],
194
+ "requires_python": ">=3.9,<4.0",
195
+ "requires_dist": [
196
+ "markdown-it-py[linkify] (>=2.1.0)",
197
+ "mdit-py-plugins",
198
+ "platformdirs (>=3.6.0,<5)",
199
+ "pygments (>=2.19.2,<3.0.0)",
200
+ "rich (>=14.2.0)",
201
+ "tree-sitter (>=0.25.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
202
+ "tree-sitter-bash (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
203
+ "tree-sitter-css (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
204
+ "tree-sitter-go (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
205
+ "tree-sitter-html (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
206
+ "tree-sitter-java (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
207
+ "tree-sitter-javascript (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
208
+ "tree-sitter-json (>=0.24.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
209
+ "tree-sitter-markdown (>=0.3.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
210
+ "tree-sitter-python (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
211
+ "tree-sitter-regex (>=0.24.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
212
+ "tree-sitter-rust (>=0.23.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
213
+ "tree-sitter-sql (>=0.3.11) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
214
+ "tree-sitter-toml (>=0.6.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
215
+ "tree-sitter-xml (>=0.7.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
216
+ "tree-sitter-yaml (>=0.6.0) ; (python_version >= \"3.10\") and (extra == \"syntax\")",
217
+ "typing-extensions (>=4.4.0,<5.0.0)"
218
+ ]
219
+ },
220
+ {
221
+ "name": "typing-extensions",
222
+ "version": "4.16.0",
223
+ "filename": "typing_extensions-4.16.0-py3-none-any.whl",
224
+ "sha256": "481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8",
225
+ "size_bytes": 45571,
226
+ "expanded_bytes": 182767,
227
+ "modules": [
228
+ "typing_extensions"
229
+ ],
230
+ "license_files": [
231
+ "typing_extensions-4.16.0.dist-info/licenses/LICENSE"
232
+ ],
233
+ "requires_python": ">=3.9",
234
+ "requires_dist": []
235
+ }
236
+ ],
237
+ "bundle_id": "f86c64655f21c67f45a1b43cf5ea16da5f4b6957a5ce0b8b222e8e8f8d2c1194"
238
+ }
@@ -0,0 +1,131 @@
1
+ # Launch configuration
2
+
3
+ [← Overview](../README.md) · [Setup](setup.md) · [Corpus](corpus.md) · [Sessions](session-model.md) · [Recovery](recovery.md) · [Launch](advanced-launch.md) · [Understand!](understand.md)
4
+
5
+ Inspect settings before launching. Some Builder and internal-wrapper defaults use permission bypass. A configured review or registered hook is not evidence that it ran.
6
+
7
+ ## Preflight and settings
8
+
9
+ The preflight keeps the current setup above each choice, supports the configured model
10
+ catalog and **Other**, and offers Builder presets, Software Engineer / Vanilla,
11
+ Session distill, Custom, Language, and **Corpus Studio**. Studio is the same backend as
12
+ `agent-bios corpus`: it searches and renders the library, edits Markdown and
13
+ consumption surface, and requires Preview then revision-bound Apply. Packaged
14
+ entrypoints validate and temporarily extract their included UI bundle before loading
15
+ Rich/Textual. A missing or corrupt bundle fails explicitly; no preinstalled Textual
16
+ environment is required. Interface catalogs change only human UI text;
17
+ model-consumed corpus remains English.
18
+
19
+ Every arrow-key TUI selection screen keeps the complete current setup in a fixed top
20
+ panel, followed by the highlighted option's description and the option list. Custom
21
+ opens a persistent settings hub for the main tier, review setup, host policy, global instruction files, and tier
22
+ bindings. Every edit returns to that hub; **Start with these settings** is the final
23
+ launch confirmation, while **Exit without launching** cancels it. When the numbered
24
+ launcher flow is selected with `--no-tui`, `b` is the back command. These controls configure an explicit
25
+ agent-bios launch; they do not restore global instruction installation. Optional
26
+ shell wiring is controlled separately from the root **Shell connection** menu.
27
+
28
+ ## Tiers and restricted seats
29
+
30
+ Tier defaults come from the launch profile and the guides' Environment Binding
31
+ tables. Claude Haiku 4.5 has no effort parameter: its tier entry, native agent
32
+ definition and projected call omit it. SWEEP is one-rule-per-item read-only work.
33
+ As a main seat it disables child delegation and requires review off (for example,
34
+ Solo); a requested review needs a HELM or WORKHORSE main instead. Codex SWEEP mains
35
+ use a read-only sandbox; Claude SWEEP mains use restricted Read/Glob/Grep tools
36
+ and an empty, strict MCP configuration. Other main roles retain their selected
37
+ policies, and explicit personal model/effort overrides remain available.
38
+
39
+ ## Global instruction files
40
+
41
+ Activated sessions include the user's global instruction documents by default.
42
+ **Custom → My global instruction files** can exclude them, or use
43
+ `agent-launch --preset balanced --exclude-global-instructions claude`. The CLI flag
44
+ sets Custom's initial choice; the final visible choice is what gets saved and run.
45
+ The choice is retained by managed resume, which cannot change it through a new flag.
46
+
47
+ Exclusion currently supports Claude Code 2.1.263 and newer: a per-call
48
+ `claudeMdExcludes` setting omits the global `CLAUDE.md`, its imports, and user
49
+ `rules/`. Project instructions and project memory remain, as do native settings,
50
+ authentication, tool registrations, and permissions. No global file is rewritten.
51
+ An existing CLI `--settings` argument, ambiguous relative/empty configuration home,
52
+ symlinks, glob characters in the configuration path, or a project/global file alias
53
+ is refused rather than replaced or silently included. Current Codex exclusion is
54
+ unavailable; its native loader has no selective global-document switch. Vanilla
55
+ and ordinary CLI launches retain their native loading behavior.
56
+ This controls automatic instruction loading, not file access or memory erasure:
57
+ tools can still open files, and project memory or prior conversation content can
58
+ contain instructions independently of the excluded documents.
59
+
60
+ ## Native hooks and agents
61
+
62
+ Native corpus consumption is default-off. `agent-bios corpus snapshot --host codex
63
+ --native --json` (or `--host claude`) composes a preview; `agent-launch --corpus-native`
64
+ opts one configured session into selected corpus hooks. Both hosts use the same
65
+ installed Python carrier and typed `event`/`matcher` binding. Authoring accepts the
66
+ combined event vocabulary; compilation reports an event unsupported by the selected
67
+ host without changing its name or executing it through another event.
68
+
69
+ Claude receives a namespaced plugin per CorpusRef through `--plugin-dir`. Codex
70
+ receives inline `hooks.<Event>` config through per-session `-c` arguments. Existing
71
+ user, project and session hooks remain present, and resume retains the pin's exact
72
+ registrations. Neither adapter installs global hooks. Codex hook enablement and native
73
+ trust still apply: new or changed definitions need review in `/hooks`. Discovery is
74
+ checked before launch, but discovery alone does not establish execution. Hooks use the
75
+ host's command permissions; opting in permits the selected carrier to run. Editing an
76
+ event binding does not rewrite the Python carrier's input/output contract.
77
+
78
+ Native corpus agents currently use Claude plugins and retain authored frontmatter and
79
+ plugin-qualified names, distinct from launcher's bare tier agents. A Codex agent
80
+ projection still needs to translate agent-specific model and tool restrictions; this
81
+ does not limit shared hook delivery. Arbitrary prose promoted to `event` or `delegated`
82
+ cannot become executable, and hidden discovery/config members are refused.
83
+
84
+ ## Optional shell connection
85
+
86
+ **Shell connection** in the root TUI offers **Restore connection** and **Remove
87
+ connection**, with confirmation before writing. The same owner is available as
88
+ `agent-bios shell` (status), `agent-bios shell restore`, and `agent-bios shell remove`;
89
+ `--dry-run` previews either action. Restore backs up existing files and adds one
90
+ managed block to `${ZDOTDIR:-$HOME}/.zshrc`, plus a managed `shell.zsh`. Open a new
91
+ terminal or source that `.zshrc` to load it. Interactive, argument-free `claude` and
92
+ `codex` then open the TUI; argument-bearing and non-TTY calls go to the original CLI
93
+ without added permission flags. Removal preserves other shell text and withdraws
94
+ loaded managed wrappers on the next shell command. An edited managed file or block
95
+ is preserved and reported for reconciliation, not overwritten. Backups remain private
96
+ under `runtime/shell-backups/`; `ZDOTDIR` must match the connection's recorded path.
97
+ Updates preserve an opted-in connection; reset and uninstall remove it. This setting
98
+ never edits global `AGENTS.md`/`CLAUDE.md`, project files, or corpus content. Ordinary
99
+ private installation also leaves those globals alone; explicit `migrate` can remove
100
+ the old agent-bios-managed regions and imports while preserving user-authored text.
101
+ First opt-in records ownership before publishing shell wiring, so interrupted restores
102
+ remain recoverable. Reset and uninstall also detect receipt-less managed scripts from
103
+ older interrupted restores. Install repairs a missing or non-executable owned launcher;
104
+ an unavailable launcher falls back to the native CLI. Recovery rechecks path ancestors
105
+ before writing and refuses redirected symlink targets.
106
+
107
+ ## Scripted launches and forwarded arguments
108
+
109
+ Both the legacy shell adapter and the optional private shell connection preserve
110
+ argument-bearing and non-TTY calls as direct backend invocations. The private
111
+ connection adds no permission flags on that path. Without opting in, the private
112
+ default installs no shell functions; an explicit `agent-launch` call projects a
113
+ launch profile or corpus snapshot.
114
+
115
+ Direct `agent-launch` calls still require a valid profile to resolve the backend command and its default arguments. `--preset`, `--custom`, or `--dry-run` select the configured-launch path even when non-TTY or combined with `--no-tui`; a non-TTY bare `--dry-run` deterministically uses Balanced, and a custom profile without that preset must pass `--preset NAME`. Forwarded backend arguments are appended verbatim after the projected defaults; one that would override a projected option (the seat, the contract, delegation, policy) is refused at launch so the contract keeps describing the run, and the summary discloses forwarded arguments when present. For scripted configured launches, call `$HOME/.local/bin/agent-launch --preset NAME --yes HOST -- ...` or add `$HOME/.local/bin` to `PATH`. The summary goes to stderr so backend stdout stays machine-consumable.
116
+
117
+ ## Review routing
118
+
119
+ Review runs cross-family by default (`review_family`, default `cross`; `same` selects same-family projection): because the main's tiers are one model family, every dispatchable review route — native and the deep route — runs on the opposite family. The exception is `slash-review`, the host's own built-in review command (`/code-review` on Claude, with `ultra` for its deep multi-agent pass; `/review` on Codex): it needs no dependency and always resolves, but being the main's own command it cannot be dispatched cross-family, so under `cross` it runs as the same-family floor and its verdicts are labeled PROPOSED. A Claude main dispatches gpt/codex review (native via the `codex-run` reviewer wrapper resolved under `$CODEX_HOME/bin`, deep via plain `codex exec -m <frontier model> -c model_reasoning_effort="ultra"` with a self-contained packet on stdin — `-c service_tier="fast"` is the explicit faster, shallower opt-in); a Codex main dispatches Anthropic/Claude review (native via `claude -p --permission-mode plan`, deep via the `claude` CLI headless with the keyword `ultracode` in the prompt, which is what opens Claude Code's dynamic workflow for that turn). The concrete reviewer command, resolved absolute path, and opposite-family tier bindings are named in the injected session-start contract; cross-family reviewers are dispatched as read-only subprocesses, not CLI-native subagents, since neither CLI hosts the other family as a native subagent. When a cross-family route is unavailable at launch or unauthenticated at use time it degrades to same-family native subagent review labeled PROPOSED (family collapse) rather than blocking; a requested non-none review with no cross-family route and no same-family fallback (delegation off) stays fail-closed. A reviewer this launcher has never seen is yours to add: **Register another reviewer…** in the review editor asks for the descriptor a method needs, proves the candidate by running it through the real config reader before a byte is written, and appends it to `review-methods.local.toml` beside your config — a file the installer never deploys, verifies, or overwrites, whose entries face exactly the validation a shipped one does and whose name may not shadow a shipped method. A refusal shows the reader's own message and leaves that file byte-identical. Review setup means configured/requested; this launcher does not claim that review completed, and unavailable runtimes such as Ultrawork are not offered until integrated.
120
+
121
+ ## Internal adapters and permission boundaries
122
+
123
+ When the internal Codex wrappers are available to a configured route, `codex-helm` follows the local CLI default and launches the HELM main with `--dangerously-bypass-approvals-and-sandbox`; an explicit `--sandbox MODE` disables bypass for that run regardless of flag order. `AGENTS.md` gives root/main local Codex sessions standing ordinary-subagent authorization when the delegation gates fire. A non-Ultra HELM main sets native multi-agent off by default and instructs HELM to send tiered dispatch through the internal `codex-run` adapter, where the selected model, effort, and sandbox are pinned; native multi-agent defaults on only when the HELM main itself is explicitly Ultra. FRONTIER is instructed to run as a separate `gpt-6-astra` root that is always read-only, at max by default, Ultra for genuinely divisible complex work, or a lower supported effort when cost or latency dominates. Because the HELM main has bypass authority and arbitrary expert `-c` by design, this dispatch route is an instruction-backed, live-E2E-verified default rather than a security boundary. Keep `codex-run` as the low-level internal adapter, not as a user-facing policy boundary. Both wrappers accept `-c key=value` as an expert override, and that override may intentionally change wrapper defaults for a single run. The private installer keeps wrapper files in its immutable release rather than populating `$CODEX_HOME/bin`; a route that still names a native-home wrapper is unavailable until its adapter path is resolved.
124
+
125
+ `claude-run` is the Claude-side review adapter carried by the release, and it takes `--model` and `--effort` to pin the seat. Omitting either warns and dispatches anyway, matching `codex-run`: refusing outright turned "the review ran unpinned" into "the review did not run", which is the worse of the two. The honest signal is downstream instead — an unpinned dispatch can name no seat, so it emits no receipt and the method adjudicates to UNKNOWN rather than to a clean pass. Its default denies the mutating tools, which is not the OS-level sandbox its Codex twin gets — do not read the two defaults as equivalent guarantees.
126
+
127
+ ## Review receipts
128
+
129
+ **Review receipts.** A launch reports what it *projected*, because at launch no review has run — so a clean verdict without a receipt is PROPOSED, never ACHIEVED. Given `REVIEW_RECEIPT_DIR`, both adapters record what they observed of the dispatch they just performed: exit status, a hash of the packet fed in, a hash of the bytes returned, and the seat actually sent. Unset, they behave exactly as they would otherwise and write nothing. `agent-launch --fold-receipts DIR PACKET MAIN_DISPATCH_ID` folds a run into a `ReviewReceipts/v1` bundle — several passes of one method become the one record it is judged on — and `agent-launch --verify-receipts PLAN BUNDLE` adjudicates it, exiting non-zero unless every selected method verified. Adapting another tool needs no change here: call `agent-launch --emit-receipt` from your adapter and prove it conforms with `agent-launch --check-adapter SEAT -- CMD`, which is adjudicated by the same code that credits a real review. A receipt is still written by whoever ran the review, so this buys drift rather than honesty: what it stops is a reviewer that quietly never ran, returned nothing, or exited non-zero reading as a clean pass.
130
+
131
+ See [verification and limits](session-model.md#verification-and-limits) for the evidence boundary, authenticated resume, and unsupported native named profiles.