feat(cli): add omnigent host --background to run the host daemon detached (#4317)
## Related issue Closes OMNI-2516 — https://linear.app/omnigent/issue/OMNI-2516 ## Summary - `omnigent host` only ever ran in the foreground, so registering a machine as a host cost a dedicated terminal — even though the detached daemon it needs already exists and is what `run` / `claude` / `codex` spawn via `_ensure_host_daemon()`. `--background` exposes that path directly: spawn (or adopt) the daemon, report it, and return. - Sign-in stays interactive. A detached daemon has no terminal to run the browser login on, so `_ensure_databricks_server_auth()` runs in the foreground *before* the spawn; otherwise the daemon dies in the background with an opaque "redirected to a login page" error. `--non-interactive` still fails with the `omnigent login` hint instead of prompting. - In local mode the daemon also owns the local Omnigent server, so the command waits for that server and reports its URL — otherwise the Web UI is unreachable without a follow-up `omnigent server status`. That makes `omnigent host --background` the whole "start everything" step, which is now the README quickstart (it replaces the `server --background` + `host` pair). - A daemon that dies on startup (bad URL, missing credentials) leaves nothing on the terminal, so the command waits a 2s grace and surfaces the daemon log rather than falsely reporting success. Output is a colorized headline plus aligned detail rows, with the stop command on its own line so it can be copied: ``` Started the host daemon in the background (pid 74241). server: https://dbc-…/api/2.0/omnigent log: ~/.omnigent/logs/host/host-20260806-205308-765542.log Stop it with: omnigent host stop --server https://dbc-…/api/2.0/omnigent ``` That stop command mirrors the invocation: `host` and `host stop` resolve their target identically (the `--server` value, else config, else local), so the flag is echoed only when the user named a target — a bare `host --background` prints a bare `omnigent host stop`. Colorizing reuses the existing `NO_COLOR`-aware helper, renamed `_help_style` → `_cli_style` now that it is not help-only. ## Test Plan - `uv run --extra dev pytest tests/host/test_cli_host.py -q` → 21 passed. - Manually, local mode: `omnigent host --background` reported `server: http://127.0.0.1:6767` and a bare `omnigent host stop` (no `--server` typed, none echoed), which then stopped it. - Manually, remote mode: `omnigent host --background --server https://dbc-…` printed the block quoted above; `omnigent host status` showed `process=online host=online`; re-running reported `already running (pid …)` with no second spawn; and the echoed `host stop --server …` stopped it. ## Demo N/A — CLI-only change; the new output is quoted above. ## Type of change - [ ] Bug fix - [x] Feature - [ ] UI / frontend change - [ ] Refactor / chore - [ ] Docs - [ ] Test / CI - [ ] Breaking change ## Test coverage - [x] Unit tests added / updated - [ ] Integration tests added / updated - [ ] E2E tests added / updated - [x] Manual verification completed - [ ] Existing tests cover this change - [ ] Not applicable ## Coverage notes Four new tests in `tests/host/test_cli_host.py` cover the spawn output (including the local server URL and a flagless stop hint), that the foreground daemon loop and in-process local-server bring-up are skipped, reuse of a healthy daemon via an explicit `--server ""` (whose stop hint keeps the flag), and that sign-in runs before the spawn. The daemon spawn and local-server discovery are stubbed, so no process or log file is created. Manual verification covered both modes end to end; the exits-immediately grace path is covered by tests only. ## Changelog `omnigent host --background` starts the local server and registers this machine as a host without tying up a terminal. Signed-off-by: Zeyi (Rice) Fan <zeyi.f@databricks.com>
This commit is contained in:
@@ -301,15 +301,16 @@ full pages through an MCP search server, and verifies each claim across
|
||||
independent sources. It's also the simplest example to copy from: one agent
|
||||
plus one `tools/mcp/*.yaml` server, no sub-agents.
|
||||
|
||||
**Prefer the browser?** Start a server and register your machine as a host:
|
||||
**Prefer the browser?** One command starts the local server and registers this
|
||||
machine as a host:
|
||||
|
||||
```bash
|
||||
omnigent server --background # start the local server and web UI in the background
|
||||
omnigent host # (separate terminal) register this machine as a host
|
||||
omnigent host --background # starts the local server too, then returns
|
||||
```
|
||||
|
||||
In the web UI, hit **New Chat**, pick your machine, and go. Check status with
|
||||
`omnigent server status`; stop everything with `omnigent stop`.
|
||||
Open the server URL it prints, hit **New Chat**, pick your machine, and go.
|
||||
Check status with `omnigent server status`; stop everything with
|
||||
`omnigent stop`.
|
||||
|
||||
### 3. Choose & switch models
|
||||
|
||||
|
||||
Reference in New Issue
Block a user