@uchibeke/gallivant 0.0.0-stage → 0.2.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 (168) hide show
  1. package/CONTRIBUTING.md +26 -0
  2. package/LICENSE +204 -0
  3. package/README.md +239 -2
  4. package/SECURITY.md +19 -0
  5. package/bin/gallivant.mjs +261 -0
  6. package/bin/package-plugin.mjs +16 -0
  7. package/bin/release-live.mjs +29 -0
  8. package/bin/release-package.mjs +23 -0
  9. package/bin/session-runtime.mjs +13 -0
  10. package/bin/task-delivery-state.mjs +12 -0
  11. package/docs/README.md +72 -0
  12. package/docs/agent-setup.md +228 -0
  13. package/docs/app.md +111 -0
  14. package/docs/architecture.md +265 -0
  15. package/docs/chains.md +102 -0
  16. package/docs/codex-cloud.md +284 -0
  17. package/docs/commands.md +649 -0
  18. package/docs/config.md +437 -0
  19. package/docs/execution.md +796 -0
  20. package/docs/guardrails.md +311 -0
  21. package/docs/install.md +398 -0
  22. package/docs/launch.md +45 -0
  23. package/docs/learning.md +369 -0
  24. package/docs/network-recovery.md +101 -0
  25. package/docs/openai-agents.md +457 -0
  26. package/docs/prd.md +246 -0
  27. package/docs/preparation.md +110 -0
  28. package/docs/release-qualification.md +196 -0
  29. package/docs/releasing.md +149 -0
  30. package/docs/runtime-environment.md +113 -0
  31. package/docs/task-delivery.md +476 -0
  32. package/docs/tasks.md +739 -0
  33. package/lib/aport.mjs +95 -0
  34. package/lib/attribution.mjs +95 -0
  35. package/lib/block.mjs +89 -0
  36. package/lib/capabilities.mjs +3 -0
  37. package/lib/chains.mjs +222 -0
  38. package/lib/codex_cloud.mjs +160 -0
  39. package/lib/codex_cloud_config.mjs +20 -0
  40. package/lib/codex_cloud_input.mjs +49 -0
  41. package/lib/codex_cloud_result.mjs +74 -0
  42. package/lib/commands/doctor.mjs +466 -0
  43. package/lib/commands/init.mjs +245 -0
  44. package/lib/commands/learn.mjs +54 -0
  45. package/lib/commands/new.mjs +47 -0
  46. package/lib/commands/ready.mjs +45 -0
  47. package/lib/commands/register.mjs +249 -0
  48. package/lib/commands/resume.mjs +224 -0
  49. package/lib/commands/serve.mjs +349 -0
  50. package/lib/commands/start.mjs +247 -0
  51. package/lib/commands/start_services.mjs +22 -0
  52. package/lib/commands/status.mjs +150 -0
  53. package/lib/commands/task.mjs +73 -0
  54. package/lib/commands/up.mjs +228 -0
  55. package/lib/commands/why.mjs +143 -0
  56. package/lib/config.mjs +461 -0
  57. package/lib/context.mjs +102 -0
  58. package/lib/control.mjs +202 -0
  59. package/lib/control_contract.mjs +16 -0
  60. package/lib/coordinator.mjs +19 -0
  61. package/lib/credential.mjs +161 -0
  62. package/lib/daemon.mjs +156 -0
  63. package/lib/deliverable.mjs +357 -0
  64. package/lib/events.mjs +261 -0
  65. package/lib/executable.mjs +31 -0
  66. package/lib/execution.mjs +707 -0
  67. package/lib/execution_contract.mjs +15 -0
  68. package/lib/execution_input.mjs +4 -0
  69. package/lib/execution_io.mjs +94 -0
  70. package/lib/execution_journal.mjs +69 -0
  71. package/lib/execution_preparation.mjs +29 -0
  72. package/lib/execution_result.mjs +266 -0
  73. package/lib/fs.mjs +140 -0
  74. package/lib/gh.mjs +289 -0
  75. package/lib/git.mjs +434 -0
  76. package/lib/harness.mjs +521 -0
  77. package/lib/harness_log.mjs +432 -0
  78. package/lib/hash.mjs +16 -0
  79. package/lib/identity.mjs +98 -0
  80. package/lib/learning.mjs +654 -0
  81. package/lib/learning_contract.mjs +2 -0
  82. package/lib/learning_data.mjs +135 -0
  83. package/lib/learning_input.mjs +111 -0
  84. package/lib/learning_qualification.mjs +67 -0
  85. package/lib/learning_signer.mjs +151 -0
  86. package/lib/learning_store.mjs +88 -0
  87. package/lib/log.mjs +53 -0
  88. package/lib/network_diagnostics.mjs +64 -0
  89. package/lib/network_recovery.mjs +42 -0
  90. package/lib/notify.mjs +58 -0
  91. package/lib/openai_agents.mjs +373 -0
  92. package/lib/openai_agents_config.mjs +14 -0
  93. package/lib/openai_agents_http.mjs +87 -0
  94. package/lib/openai_agents_input.mjs +15 -0
  95. package/lib/openai_agents_sources.mjs +112 -0
  96. package/lib/owner_delivery.mjs +443 -0
  97. package/lib/plugin_package.mjs +340 -0
  98. package/lib/prd.mjs +635 -0
  99. package/lib/preparation_agents.mjs +33 -0
  100. package/lib/preparation_codex.mjs +212 -0
  101. package/lib/probe.mjs +126 -0
  102. package/lib/prompt.mjs +238 -0
  103. package/lib/provider_health.mjs +55 -0
  104. package/lib/public-format.mjs +31 -0
  105. package/lib/public_output.mjs +49 -0
  106. package/lib/release_package.mjs +154 -0
  107. package/lib/repository_files.mjs +86 -0
  108. package/lib/run.mjs +385 -0
  109. package/lib/run_log.mjs +94 -0
  110. package/lib/runtime-environment.mjs +87 -0
  111. package/lib/runtime_dependencies.mjs +15 -0
  112. package/lib/runtime_node.mjs +107 -0
  113. package/lib/runtime_state.mjs +174 -0
  114. package/lib/sources/index.mjs +27 -0
  115. package/lib/sources/prd.mjs +50 -0
  116. package/lib/start_contract.mjs +37 -0
  117. package/lib/state.mjs +246 -0
  118. package/lib/task_allowance.mjs +31 -0
  119. package/lib/task_completion.mjs +61 -0
  120. package/lib/task_contract.mjs +450 -0
  121. package/lib/task_delivery.mjs +219 -0
  122. package/lib/task_delivery_cancel.mjs +34 -0
  123. package/lib/task_delivery_contract.mjs +61 -0
  124. package/lib/task_delivery_mcp.mjs +40 -0
  125. package/lib/task_delivery_store.mjs +43 -0
  126. package/lib/task_delivery_view.mjs +88 -0
  127. package/lib/task_environment.mjs +281 -0
  128. package/lib/task_prepare.mjs +224 -0
  129. package/lib/task_store.mjs +38 -0
  130. package/lib/tasks.mjs +513 -0
  131. package/lib/tick.mjs +1654 -0
  132. package/lib/time.mjs +36 -0
  133. package/lib/tracker/assets.mjs +43 -0
  134. package/lib/tracker/pages.mjs +320 -0
  135. package/lib/tracker/runs.mjs +102 -0
  136. package/lib/tracker/stream.mjs +74 -0
  137. package/lib/tracker_process.mjs +107 -0
  138. package/lib/verification_sandbox.mjs +181 -0
  139. package/node_modules/smol-toml/LICENSE +24 -0
  140. package/node_modules/smol-toml/README.md +605 -0
  141. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  142. package/node_modules/smol-toml/dist/date.js +156 -0
  143. package/node_modules/smol-toml/dist/error.d.ts +37 -0
  144. package/node_modules/smol-toml/dist/error.js +67 -0
  145. package/node_modules/smol-toml/dist/extract.js +289 -0
  146. package/node_modules/smol-toml/dist/index.cjs +770 -0
  147. package/node_modules/smol-toml/dist/index.d.ts +44 -0
  148. package/node_modules/smol-toml/dist/index.js +34 -0
  149. package/node_modules/smol-toml/dist/parse.d.ts +73 -0
  150. package/node_modules/smol-toml/dist/parse.js +164 -0
  151. package/node_modules/smol-toml/dist/primitive.js +151 -0
  152. package/node_modules/smol-toml/dist/stringify.d.ts +32 -0
  153. package/node_modules/smol-toml/dist/stringify.js +219 -0
  154. package/node_modules/smol-toml/dist/struct.js +156 -0
  155. package/node_modules/smol-toml/dist/util.d.ts +43 -0
  156. package/node_modules/smol-toml/dist/util.js +57 -0
  157. package/node_modules/smol-toml/package.json +68 -0
  158. package/npm-shrinkwrap.json +1823 -0
  159. package/package.json +105 -4
  160. package/templates/claude-settings.json +18 -0
  161. package/templates/passport.gallivant.json +83 -0
  162. package/templates/plugin/bundled-runtime.json +26 -0
  163. package/templates/plugin/schemas/mcp.schema.json +120 -0
  164. package/templates/plugin/schemas/plugin.schema.json +65 -0
  165. package/templates/plugin/task-delivery.SKILL.md +60 -0
  166. package/templates/prd.md +32 -0
  167. package/templates/tracker/tracker.css +301 -0
  168. package/templates/tracker/tracker.js +721 -0
@@ -0,0 +1,228 @@
1
+ # Let an agent set up Gallivant
2
+
3
+ Give the prompt below to your coding agent. It can inspect prerequisites, run
4
+ the published setup command, read the resulting report and validate a first task.
5
+ You handle account login and any required trust prompts. Setup does not need
6
+ access to every private repository, and running the setup command does not start
7
+ a paid session.
8
+
9
+ Start with **Codex or Claude and one repository**. Those are the harnesses supported
10
+ by `gallivant init`. [Hosted Agents API](openai-agents.md) uses an explicit config
11
+ instead; [other harnesses](../README.md#harness-support) have different setup and
12
+ capability boundaries. An installed binary alone does not establish working model
13
+ access or safe unattended operation.
14
+
15
+ ## Prompt to give your agent
16
+
17
+ ```text
18
+ Set up Gallivant on this machine using its current docs:
19
+ https://github.com/uchibeke/gallivant/blob/main/docs/agent-setup.md
20
+ https://github.com/uchibeke/gallivant/blob/main/docs/install.md
21
+
22
+ Inspect the installed version, operating system, Node architecture, existing
23
+ Gallivant config and target repository before changing anything. Use the actual
24
+ CLI --help and the docs matching the installed version. Prefer an already working
25
+ Codex or Claude setup. Preserve existing credentials, settings, running jobs,
26
+ worktrees and uncommitted changes. Report proposed config changes without secrets.
27
+
28
+ From inside the target checkout, run the published setup command:
29
+ npx --yes @uchibeke/gallivant init --harness codex (or --harness claude), then
30
+ read its report. Do not clone the Gallivant repository or install it globally
31
+ unless I ask. If the command stops because gh or the harness is signed out, tell
32
+ me the exact login command it printed and wait; do not sign in for me. Do not
33
+ overwrite an existing config, weaken security settings, install hooks, change
34
+ repository protections or elevate privileges without my authorization. Never ask
35
+ me to paste API keys or tokens into this conversation. Use the provider's login
36
+ flow or a private credential file instead.
37
+
38
+ Ask only for missing decisions: target repository and checkout, approved base
39
+ branch, preferred available harness, first task scope, and allowed spending.
40
+ A setup request alone does not authorize inference, pushes or PR creation.
41
+ Prepare and validate a written brief without starting it unless I have authorized
42
+ the first run. Plain-language task preparation also uses inference.
43
+
44
+ Finish with a short report: installed version/path, config path, selected harness,
45
+ repository/base, doctor results, reviewer and completion evaluator settings,
46
+ remaining blockers, and the exact command to start the validated first task.
47
+ If I authorized that task, start it once, verify the saved run identity and status,
48
+ and give me its dashboard or SSH-tunnel instructions. Do not claim a running or
49
+ completed task unless observed. Do not merge, publish, deploy or alter accounts.
50
+ ```
51
+
52
+ If the user already provided those decisions and permissions, reuse them. Do not
53
+ ask for the same approval again. This guide does not authorize any particular
54
+ provider, repository, spend or broader machine change by itself.
55
+
56
+ ## 1. Inspect before installing
57
+
58
+ Use the user's shell and package manager; no path to a particular person's home
59
+ is required. The coordinator supports macOS and Linux with Node 22 or newer.
60
+ Linux needs `ps` from `procps`/`procps-ng`. Harnesses and hosted artifact verification
61
+ have their own sandbox prerequisites; see [installation](install.md).
62
+
63
+ ```sh
64
+ node --version
65
+ node -p 'process.platform + " " + process.arch'
66
+ npm --version
67
+ git --version
68
+ gh --version
69
+ jq --version
70
+ command -v gallivant
71
+ gh auth status
72
+ ```
73
+
74
+ A missing command is a prerequisite to fix, not a reason to disable a guardrail.
75
+ Use the distribution's supported package instructions. Check the chosen harness
76
+ version/login using its CLI; `gallivant doctor` performs Gallivant's compatibility
77
+ and configuration checks after setup. Do not print credential files or tokens.
78
+
79
+ Inspect the target checkout separately from the Gallivant installation:
80
+
81
+ ```sh
82
+ cd /path/to/target-repository
83
+ git status --short
84
+ git remote -v
85
+ git branch --show-current
86
+ git config --get user.name
87
+ git config --get user.email
88
+ ```
89
+
90
+ Replace the path with the actual authorized checkout. Do not reset, clean,
91
+ automatically commit, or switch a dirty checkout. Confirm which GitHub repository
92
+ and base branch the task should use; the current branch is not necessarily the
93
+ approved PR target. Account login and Git identity belong to the user.
94
+
95
+ ## 2. Run the setup command
96
+
97
+ Use the [current installation instructions](install.md#2-the-command). After
98
+ GitHub and the selected harness are signed in, from inside the target checkout:
99
+
100
+ ```sh
101
+ npx --yes @uchibeke/gallivant init --harness codex # or: --harness claude
102
+ ```
103
+
104
+ `npx` runs the published package on demand; it installs nothing globally and
105
+ does not clone this repository. `init` is noninteractive. It refuses, writing
106
+ nothing, when the directory is not a GitHub checkout, `gh` or the harness is
107
+ signed out, or the login cannot push to the repository; report the printed
108
+ command to the user instead of working around it. Otherwise it creates
109
+ `~/.gallivant/config.json` (mode 600) when none exists, records the current
110
+ repository in `repos` once, creates the worktrees directory and prints the
111
+ `doctor` report. Exit status `1` means checks remain, not that setup failed.
112
+
113
+ With an existing config, `init` keeps every key as written and adds only the
114
+ current repository. Do not edit unrelated keys. The normal path is
115
+ `~/.gallivant/config.json`; use `$GALLIVANT_HOME/config.json` if that variable is
116
+ already set. Pass `--worktrees /absolute/path` only on first creation; later
117
+ runs refuse a different directory.
118
+
119
+ If the user prefers a persistent command, `npm install -g @uchibeke/gallivant`
120
+ is the documented option; ask before installing globally. Avoid `sudo npm
121
+ install`; use a user-owned Node installation or prefix. Do not silently replace
122
+ a different installed version while its daemon is running.
123
+
124
+ Before a real run, finish the [harness guardrail setup](install.md#7-aport-on-claude-code)
125
+ for the selected harness. Some steps require human interaction: for example,
126
+ Codex's initial `/hooks` trust prompt cannot be automated. Report such a blocker
127
+ instead of changing the enforcement level or bypassing it.
128
+
129
+ `init` records the repository without a base branch; its pull requests target
130
+ the default branch unless the user chooses otherwise with `start --base` or a
131
+ `{ "repo", "base" }` entry, following [configuration](config.md#the-base-branch).
132
+ Review the config diff without printing credentials. Confirm these decisions
133
+ before dispatch:
134
+
135
+ | Decision | What must be established |
136
+ |---|---|
137
+ | Repository access | The run can read/push the intended repository; use a selected-repository token where appropriate. Public-only work does not require private-repository access. |
138
+ | Base protections | Required PR/ruleset protections exist. `doctor` suggests repairs; it does not authorize changing organization policy. |
139
+ | Review | The default Codex GitHub reviewer is installed for this repo, another supported reviewer is configured, or the user explicitly chose `reviewer: null` for CI and trusted human feedback. |
140
+ | Completion evaluator | Default APort hosted confirmation needs network access. A local evaluator is an explicit user choice, not an automatic workaround for a failure. |
141
+ | Cost | Confirm `max_iterations`, provider budget controls and allowed spend. `max_budget_usd` is a native per-run dollar cap for Claude; other local harnesses have no equivalent enforced dollar cap. |
142
+
143
+ Run `gallivant doctor` (or `npx --yes @uchibeke/gallivant doctor`) again and
144
+ report every failure. Do not treat “signed in (API unchecked)” as proof of
145
+ inference access. `doctor` without extra flags checks
146
+ configuration, credentials and repository access without launching a model run.
147
+ `doctor --probe` launches a real Claude sandbox test when Claude is configured;
148
+ `doctor --send` sends a real notification. Use those only when authorized.
149
+
150
+ ## 3. Validate a first task without inference
151
+
152
+ In the target checkout, use a new task name that does not already exist:
153
+
154
+ ```sh
155
+ gallivant new first-docs-task
156
+ # Edit docs/prds/first-docs-task.md to describe the agreed task.
157
+ gallivant ready docs/prds/first-docs-task.md --check
158
+ ```
159
+
160
+ With no `--harness` flag, `new` uses the first configured harness. If several are
161
+ configured, pass `--harness` with the harness agreed during setup.
162
+
163
+ Fill every required section with repository-specific facts. Pick a small useful
164
+ change, such as documenting existing test commands, with concrete acceptance
165
+ criteria and verification. The template deliberately contains placeholders;
166
+ validation must fail until they are replaced. [The PRD contract](prd.md) lists the
167
+ rules. Expected result: every rule says `ok` and exit status is `0`.
168
+
169
+ `ready --check` reads and validates locally without loading credentials, starting
170
+ a daemon or invoking a model. This is a useful stopping point when setup is
171
+ approved but implementation is not. Do not mark a failing brief ready manually.
172
+
173
+ If paid preparation is authorized, [natural-language task intake](tasks.md) can
174
+ write the brief instead. Use `task inspect` and returned revision/question IDs to
175
+ continue that same task; do not resubmit it simply because clarification is needed.
176
+
177
+ ## 4. Start once, when authorized
178
+
179
+ Record readiness, then dispatch the validated brief against the approved branch:
180
+
181
+ ```sh
182
+ gallivant ready docs/prds/first-docs-task.md
183
+ gallivant start docs/prds/first-docs-task.md --base YOUR_APPROVED_BASE
184
+ gallivant status --json
185
+ ```
186
+
187
+ Replace `YOUR_APPROVED_BASE` with the actual branch. `ready` can contact the
188
+ configured completion evaluator and updates the brief; `start` launches paid work
189
+ and permits repository changes, pushes and PR creation within that task.
190
+ It also starts/reuses the daemon and dashboard, and attempts to open the browser.
191
+ Do not launch a second `up` process.
192
+
193
+ For a headless machine, use `start ... --no-open`. Reach the loopback dashboard
194
+ through SSH instead of exposing it publicly:
195
+
196
+ ```sh
197
+ # On your own computer; replace user@host with the coordinator's SSH destination.
198
+ ssh -N -L 8791:127.0.0.1:8791 user@host
199
+ ```
200
+
201
+ Then open `http://127.0.0.1:8791` locally. Substitute the reported port if configured
202
+ differently. `--no-server` skips the dashboard while keeping task monitoring.
203
+ Keep the coordinator awake and online; there is no automatic reboot/login service
204
+ installer. Startup is not a system service installation.
205
+
206
+ Save the reported task/run handle, worktree and status. If startup returns an error,
207
+ inspect `status` and `why HANDLE` before retrying: work may have started before a
208
+ service or browser failed. Diagnose network problems with
209
+ [the bounded network check](network-recovery.md). Send corrections with
210
+ `say HANDLE --note "..."`; use `resume HANDLE` for a stopped execution and
211
+ `recheck HANDLE` for an eligible PR review check. Neither is a blind retry for
212
+ unknown provider state.
213
+
214
+ `cancel HANDLE` fences further dispatch and requests provider cancellation;
215
+ confirm its status. `down` stops monitoring/dashboard services but **leaves active
216
+ agent processes running**. A ready-for-human result still requires the owner's
217
+ review and merge.
218
+
219
+ ## What setup verification proves
220
+
221
+ The package's `npm run test:install` check packs the tarball and runs the
222
+ README's `npx` setup command against it from a disposable repository, with
223
+ fixture `gh` and `codex` commands and a throwaway home. It proves which binary
224
+ ran, the config and directory permissions, repository registration, repeat
225
+ safety and the printed next steps. It does not use a real account, invoke a
226
+ model or certify a provider's current availability. A first authorized
227
+ end-to-end task is still needed to verify the user's actual repository
228
+ permissions, provider entitlement, sandbox, CI and review integration.
package/docs/app.md ADDED
@@ -0,0 +1,111 @@
1
+ # The app and the orchestration boundary
2
+
3
+ Gallivant has a local browser dashboard, a CLI, and a shared task-delivery API.
4
+ They use the same task state and review coordinator. The dashboard shows what is
5
+ running, what needs attention and why; you can send a correction or resume an
6
+ existing run without finding its terminal session.
7
+
8
+ For a first run, use [installation](install.md) and [natural-language tasks](tasks.md).
9
+ The work can be code, documentation, research or another verifiable repository
10
+ artifact. GitHub pull requests remain the delivery surface; arbitrary browser
11
+ chores, email delivery and deployments are not separate supported task targets.
12
+
13
+ ## Start the dashboard
14
+
15
+ ```sh
16
+ gallivant start
17
+ ```
18
+
19
+ This ensures the daemon and dashboard are running, then opens the browser at
20
+ `http://127.0.0.1:8791`. `gallivant serve` uses the same startup path. Pass
21
+ `--no-open` to keep it in the background, `--no-server` to omit the dashboard,
22
+ or `--no-daemon` when you manage the coordinator separately. See
23
+ [commands](commands.md) for port selection, foreground mode and service ownership.
24
+ The dashboard is a local control surface, not a publicly exposed server.
25
+
26
+ ## Work with an existing run
27
+
28
+ The dashboard and run sidebar share the CLI's status model. A run page shows
29
+ its current state, stop reason, PR link, session history and streamed logs.
30
+ History can be loaded without redispatching work. Provider capabilities, saved
31
+ execution state and artifact summaries are exposed through the same tracker;
32
+ reading a page does not poll a provider or incur inference.
33
+
34
+ Run actions have different effects:
35
+
36
+ | Action | Effect |
37
+ | --- | --- |
38
+ | Recheck PR | Ask the coordinator to refresh GitHub checks/review state and apply its normal readiness rules. |
39
+ | Resume agent | Continue the existing task on its current approved instructions. |
40
+ | Message agent | Send an operator correction to the existing session, including after a PR is ready for review. |
41
+ | Cancel task | Request cancellation through the shared provider-aware control path. |
42
+
43
+ The message composer is separate from the fixed actions. Normally a message waits
44
+ for active work to settle. Local providers with interrupt support offer an explicit
45
+ interrupt option; hosted providers expose only the controls they implement.
46
+ Requests are queued, and the daemon must be running to apply them. Messages keep
47
+ the brief, permissions and consumed budget; they do not authorize a new scope,
48
+ merge or deployment. Changing the delivery contract requires the explicit
49
+ resnapshot flow. Closed or merged PRs require a new task.
50
+
51
+ The current dashboard controls existing registered runs. Prepare new work through
52
+ `gallivant task` or `new` → `ready` → `start`. The exported
53
+ [task-delivery package](task-delivery.md) lets an authenticated host provide its own
54
+ intake UI/MCP surface without implementing another runner. That package is not
55
+ evidence that a hosted service or plugin integration is deployed.
56
+
57
+ ## The browser boundary
58
+
59
+ GET routes read saved state. One `POST /api/run/control` route queues a bounded
60
+ operator request under the shared mutation lock; the daemon performs the action.
61
+ The POST requires a loopback peer, a loopback Host with the actual serving port,
62
+ an exact same-origin header and the server's CSRF token. Remote readers receive
63
+ no control token. There is no arbitrary shell command route.
64
+
65
+ These checks resist cross-origin requests and DNS rebinding; they are not
66
+ multi-user authentication or isolation from another process running as the same
67
+ OS user. Keep the standalone tracker on loopback. A server mounting the tracker
68
+ owns its authentication and bind address. Do not expose it through an unauthenticated
69
+ proxy. CSP, HTML escaping and text-only log insertion protect rendering of
70
+ repository, reviewer and agent-controlled text.
71
+
72
+ `mount(ctx, {base})` lets an existing dashboard, including Command Center, delegate
73
+ a path prefix. The tracker provides SSE logs with a bounded initial tail,
74
+ `Last-Event-ID` continuation and explicit history gaps. The CLI, standalone UI and
75
+ mounted UI retain one coordinator and one set of run identities.
76
+
77
+ ## Local and hosted harnesses
78
+
79
+ Five local CLI adapters and OpenAI Agents API are implemented. Claude, Codex and
80
+ Agents API also have bounded natural-language preparation. Codex Cloud has a
81
+ transport but new dispatch is unavailable until the chosen environment can be
82
+ verified against the intended repository. [Configuration](config.md#execution-providers)
83
+ and the provider guides distinguish implemented capability, account access and
84
+ live qualification.
85
+
86
+ A hosted harness moves implementation compute off the device; it does not move
87
+ Gallivant's coordinator, GitHub publication or local verification. If this machine
88
+ sleeps, orchestration waits for it to return. Running the coordinator on a Node
89
+ host you operate requires its durable state and appropriate verification isolation.
90
+ Gallivant does not currently sell or provision that host for you.
91
+
92
+ Provider credentials and models belong to the selected harness/provider setup.
93
+ A subscription, API key or dashboard connection is not automatically usable by a
94
+ different transport. Costs depend on provider pricing, caching, task duration and
95
+ review rounds; Gallivant does not promise that API use is cheaper than a subscription.
96
+ See [execution](execution.md) for cost visibility and limits.
97
+
98
+ ## Product decisions and future work
99
+
100
+ Gallivant owns the delivery contract, session ownership, retry bounds, review
101
+ feedback and completion evidence. Harnesses own tool execution and context
102
+ management. Adding a provider extends that boundary; it does not add a second
103
+ agent loop. Thin CLI adapters and durable hosted transports share the same review
104
+ state machine even though their execution details differ.
105
+
106
+ Earlier product exploration proposed a native desktop wrapper, managed hosting,
107
+ per-round harness routing and bundled provider plans. These remain possible
108
+ future directions, not capabilities enabled by this release. A desktop shell
109
+ would add conveniences such as an application icon; the browser dashboard already
110
+ provides run controls. Any future routing must preserve explicit provider consent,
111
+ authority, continuity and budget ownership rather than silently switching a run.