Commit Graph
22 Commits
Author SHA1 Message Date
Nash Aschenbath 2ed390de39 fix(claude): detect typed rate-limit interruptions (#1908)
A Claude seat that hits a rate limit now reads as at its limit, from Claude Code's typed `StopFailure` hook with `error: rate_limit`. OpenRig never reads the error text. The wake ladder then holds the seat's handoffs for its existing retry interval instead of typing into a stopped seat. Limit events are ordered by when the hook fired, so an older event arriving late doesn't clear or reassert a limit. When seats sharing a Claude home report conflicting limit windows, only the failing seat is held.

Known limit: a helper Claude started from the seat's shell inherits the seat's environment, so its rate-limit hook is attributed to the seat. On the same login that's right, since the quota is the account's. A helper on a different login can hold the seat's handoffs for one retry interval. Binding the hook to Claude's own session id would remove that.

17 files, +533 -47, of which 361 are test lines. The plugin version is unchanged.
2026-10-26 07:55:44 -07:00
Mike Schwarz c3c404f10e docs: state the 0.7.3 limits where people rely on them, and list rig seat history (#2104)
Docs only. These are the gaps the 0.7.3 docs check found, fixed on main:

- The Hermes preset and its example no longer say a stopped seat's gateway exits once idle; that hasn't been checked, so they say to check with `ps`.
- The Codex permission envelope in `rig-spec.md` says OpenRig's tests prove the launch flags, not that Codex enforces them, and that an OpenRig older than 0.7.3 launches the seat without the envelope.
- Stopping a community seat says whether the harness's own processes survive isn't exercised, so check them after `rig down`.
- `getting-started.md` and `help.md` say `rig setup` and `rig doctor` run the tmux capture check (`tmux_capture`).
- `docs/as-built/cli-reference.md` lists `rig seat history`.

6 files, +18 -9.
2026-10-26 06:57:45 -07:00
Nash Aschenbath b6c0e3140d fix(daemon): surface Codex first-login gates before timeout (#1967)
When Codex is waiting at its initial sign-in chooser or API-key entry, startup now reports `attention_required` with `login_required` and a sign-in explanation, instead of eventually reporting a generic readiness timeout. Startup context stays pending, nothing is typed into the login screen, and `rig ps --nodes --json` shows the reason and the continuation hint through the existing startup and inventory path.

The shared probe requires a native Codex process, or the adapter's verified native descendant, and a current, complete login panel with nothing after it. It distinguishes older composer text above the panel from a newer composer below it, and an unverified wrapper is checked and recaptured before readiness or menu automation. Detection is limited to the captured complete English chooser and API-key layouts; other authentication screens keep their existing handling. Claude's refusal handling from #1417 is unchanged: its persistent "Not logged in" footer alone still doesn't prove a login blocker for gateway users.

Validation: fixtures captured from the official Codex CLI 0.164.0 in a fresh container with no credentials and networking disabled, covering the chooser and API-key screens in wide and narrow terminals and managed --no-daemon launches. The new regressions fail on the original probe; 558 focused readiness, adapter, startup and inventory tests pass. The startup regression uses the real Codex adapter with captured terminal content, real SQLite persistence, the nodes HTTP route and the CLI JSON projection, and checks the attention status, the login explanation, held startup context and zero delivered files or keystrokes. This verifies recognition and startup propagation, not a completed native login. docs/reference/help.md covers finishing the sign-in and continuing.

Addresses #6. Thanks to @Aschenbath.
2026-10-24 23:46:44 -07:00
Mike Schwarz aa16224637 docs(0.6.7): bring the README and reference docs to the 0.6.7 cut (#1009)
Bring the README and docs/reference to the 0.6.7 cut: install links point at v0.6.7, and every changed statement matches the source. Text only.
2026-10-08 04:23:45 -07:00
Mike Schwarz da5e9a927a Open the OpenRig TUI and operator as the handoff after install, sized to the person's terminal (#998)
After install the agent opens the OpenRig TUI and operator as the handoff, sized to the person's terminal (operator alone under 120 columns, 50/50 from 120, an openrig kernel space inside Herdr), reusing a space only under its own name with live attached panes. Supersedes #989, #990 and #992.
2026-10-08 01:12:02 -07:00
Mike Schwarz 680a210bd3 docs: point installing agents to the rigs skill instead of restating it (#971)
Installing agents are pointed to the rigs skill instead of a restated copy; the recovery relays the command OpenRig prints.
2026-10-07 16:27:21 -07:00
Mike Schwarz fe23026fae docs: WSL2 is the Windows route; name both Pi credential routes (#963)
WSL2 is documented as the supported Windows route, and the Pi credential line names both routes.
2026-10-07 14:14:52 -07:00
Mike Schwarz a5f039590d docs: add a user's reported WSL2 setup to the getting-started guide (#960)
The getting-started guide records WSL2 as one user's reported working setup, not a supported platform.
2026-10-07 13:22:49 -07:00
Mike Schwarz ff0de7b9da docs: make the welcome screen discoverable from help (#950)
Help, setup output and docs make the welcome screen discoverable: on a desktop the agent opens it with rig terminal open saved:kernel --window; over headless SSH it gives the attach command.
2026-10-07 12:16:23 -07:00
Mike Schwarz 64bbcb3b1f docs: ship a what-changed note for agents on an upgraded install (#934)
Ships a what-changed note for agents on an upgraded install, reachable through rig context and pointed to from the help guide and the upgrade skill.
2026-10-07 01:45:03 -07:00
Mike Schwarz 960011982c fix(cli): align setup and doctor authentication checks (#924)
rig doctor reuses setup's local authentication checks, so the two agree; existing doctor checks are unchanged, and the footer notes that only selected harnesses need a login.
2026-10-07 00:57:43 -07:00
Mike Schwarz 3cdb3eb478 docs: publish the one-command install with a stable link (#917)
Publishes the one-command install with a stable link and a dry-run preview in the README, getting-started and help.
2026-10-06 23:43:25 -07:00
Mike Schwarz 51bd931ed6 docs: bring the reference docs to the 0.6.6 cut (#903)
Brings the README and the reference docs to the 0.6.6 release commit 2620dea8: claims checked against source at that commit, schema-2 and legacy bundle installs described separately, the permission-default exceptions kept in the short summaries, and plain wording for in-flight Slack work.
2026-10-06 19:58:38 -07:00
Mike Schwarz 5653be8492 docs: offer the kernel view before the first project team (#859)
After setup, the guided path now reaches the OpenRig view before any starter team: check the selected login, start the daemon if needed, read the kernel's actual state, and ask "Open the OpenRig view now?". Yes opens a new space without taking over the current terminal; No and SSH get the command for later. The person then tells the operator their goal and chooses a first project team. Setup's closing steps, the getting-started guide, help and the installing-agent onboarding say the same thing; started is not called ready.
2026-10-05 22:32:58 -07:00
Mike Schwarz 71276237ce fix(terminal): show all kernel conversation roles by default (#854)
The default saved:kernel view now opens TUI, advisor and operator on every kernel, including single-runtime ones, where the operator was previously hidden. The default view draws them as one row of three columns on herdr and cmux; saved views and other views keep the existing grid. Guide, help, setup and onboarding text describe the same view.
2026-10-05 22:12:43 -07:00
Mike Schwarz a60bf42b97 feat(terminal): provide a default kernel conversation view (#830)
`rig terminal open saved:kernel` now works without editing YAML. With no saved kernel view, OpenRig builds one in memory from the installed kernel's actual bindings (advisor, operator and TUI; advisor and TUI for a single-runtime kernel) and opens it through the existing view and provider path. Missing or unbound roles are named absent with a reason; if nothing can attach, the result names every missing role instead of opening an empty view. A user's own kernel view still wins, and opening never starts, restarts or restores a seat. Getting started, help, the README, setup's closing guidance and onboarding now point to the command.
2026-10-05 20:17:11 -07:00
Mike Schwarz 82eb4bed0f docs: open a new kernel conversation space after installation (#821)
After installation, the installing agent tells the person it will open a terminal so they can see their OpenRig agents, then opens a new space with existing tools: herdr, else cmux, else a plain terminal window. The first space shows the kernel advisor, the operator agent and the OpenRig TUI for a dual kernel, or the advisor and the TUI for a single-runtime kernel; it never takes over the installing agent's terminal or an existing space. Getting started gives the same steps as exact commands for a person, with session names taken from the kernel inventory, and on a headless or SSH target it says so and gives the exact attach command. The README, help, onboarding guide and setup's final text point to it.
2026-10-05 15:49:59 -07:00
Mike Schwarz fcaf1f8ee8 docs(first-run): refresh getting started, the startup guide, help and launch docs against main (#779)
Refreshes `docs/reference/getting-started.md`, `agent-startup-guide.md`, `help.md`, `developing.md`, `worktree-builds.md` and `non-interruptive-mode.md` against main. Corrects a `rig seat set-permissions` example that didn't resolve, the startup layer order (culture before rig), the documented `resources.hooks`, which validation now refuses, and a known problem fixed in 0.6.5. Adds the recovery path after a startup gate (`rig seat continue`, the startup attention line), Claude's bypass warning and `--non-interruptive`, `builtin:auto`, the readiness window and startup proof, and `npm ci` plus build for development. Commands checked against a help capture of `a350c59b`. Part of the 0.6.6 developer documentation refresh. Text only.
2026-10-05 02:42:45 -07:00
Mike Schwarz 1a3ffc245e feat(daemon): give Codex seats network inside workspace-write unless Codex reports an opt-out (#608)
Codex seats launched with OpenRig's plain workspace-write floor could not reach the local daemon, because Codex's sandbox defaults network access off. Before such a launch, OpenRig now runs one short-lived codex app-server with the seat's own executable, HOME, CODEX_HOME and cwd, reads config/read (with layers) and configRequirements/read, and adds -c sandbox_workspace_write.network_access=true to that launch only when Codex reports no explicit setting from any layer and no requirement pins it. Any explicit user, project, managed or requirements value wins.

The reader is reader-only (plugins and apps disabled), has a finite deadline, checks RPC results rather than exit codes, cleans up only its own descendants, and never blocks the daemon's event loop. Named profiles, legacy YOLO and full bypass are not read and their commands are unchanged. A deadline, RPC error, unknown shape, missing binary or unsupported selection adds nothing and the original launch proceeds, which may leave network off. Codex startup may write its own state files under CODEX_HOME, read its auth store and fetch managed policy; the read and the launch are not atomic. These are disclosed in the docs.

Refs #275
2026-10-03 01:42:12 -07:00
Mike Schwarzanddev50-planner c9c9e200a5 docs: correct developer docs, the capability page and known problems against source (#468)
* docs: correct developer docs, the capability page and known problems against source

Checked against source at e6a391b6:
- developing.md: pull requests run .github/workflows/tests.yml; test:repo
  also builds the daemon and checks context-pack generation.
- rig-spec.md: lists the stub runtime and what it is.
- The onboarding capability page: execution view --project, the three
  first-project recipes, per-seat permission and typing-guard verbs, the
  rig policy permissions namespace, and the web UI being off by default.
- help.md known problems: matched to the open issues and to what main fixes.
- test-system README, scripts README, ROUTING and evals README: match the
  scenario runner, stub launch scripts and eval cases as they exist.

* docs(test-system): say the scenario runner has no proof binding

rig proof show exists. The proof surface is reserved because no scenario
surface reads it (readSurface throws UnboundSurfaceError) and the validator
rejects it (RESERVED_SURFACES).

---------

Co-authored-by: dev50-planner <[email protected]>
2026-10-02 03:49:11 -07:00
008c9faada fix(daemon): bring 0.6.4's browser boundary, legacy-launch retention and browser docs to main (#407)
* fix(restore): retain inconclusive legacy Claude launches (#346)

Co-authored-by: v-openrig-build <[email protected]>
(cherry picked from commit eef01465a3)

* fix(daemon): check target name and browser origin once on /api (#358)

The daemon now checks every /api request once, before any route or cross-host read-through runs, including WebSocket upgrades.

- Target names: localhost, IP literals, this machine's own names and its own MagicDNS name are accepted without setup; other names are refused with a remedy (OPENRIG_ALLOWED_HOSTS, or a configured bearer token, which waives only the name check).
- Browser origins: when present, an Origin must be the built-in UI's own origin (with the web UI enabled) or listed in OPENRIG_ALLOWED_ORIGINS; a token never overrides an origin refusal.
- Host and Origin are read from the raw request headers, so duplicate or empty values are refused rather than collapsed.
- Refusals are a 403 with a one-sentence remedy and code; rig ps and the TUI now show it. Refusal logging is sanitized, bounded and deduplicated.
- Route-level authorization is unchanged.

Adapted for main: the existing /api Origin guard (apiOriginProtection) and the
terminal WebSocket Origin check stay in place. The boundary is mounted before the
Origin guard, so its refusal codes and remedies are what callers see; the terminal
route and its tests are unchanged from main.

(cherry picked from commit 7d77d73b9c)

* docs: add browser access reference (#372)

Adds docs/reference/browser-access.md (which addresses and browser pages the
daemon accepts, the two allowances, refusal remedies and limits) and links it
from the help guide's daemon-access section.

Co-authored-by: dev50-planner <[email protected]>
(cherry picked from commit a3cc6c8a10)

* test(daemon): expect the browser boundary's refusal from the real app

On the real daemon app the /api browser boundary now runs before the Origin
guard, so a cross-origin browser request is refused with the boundary's code
(browser_origin_refused) and remedy. The status stays 403; the middleware-level
cases of the Origin guard are unchanged.

* docs(reference): name the allowed origin the web UI needs at other names

On main the terminal WebSocket check and the /api Origin guard stay in place
alongside the browser boundary, so the web UI opened at a non-loopback name or
address needs that page's exact origin in OPENRIG_ALLOWED_ORIGINS.

---------

Co-authored-by: v-openrig-build <[email protected]>
Co-authored-by: dev50-planner <[email protected]>
2026-10-01 21:19:03 -07:00
Mike Schwarzandv-openrig-build 61f13f64ff docs: one help guide for agents (docs/reference/help.md, rig context get help) (#113)
* docs: point agents to the OpenRig help route when OpenRig misbehaves

Add a short pointer to https://www.openrig.dev/help/agents in the
managed start guidance every seat reads, the openrig-skills index (all
three identical copies, digests regenerated) and the README 'For agents'
line. The route sends a symptom to version-matched docs and known
issues and explains how to reach the team. rig --version and rig doctor
help when available, but a broken install is not a reason to skip the
page. No new command.

* docs: one help guide for agents, served by rig context get help

Agent help now lives in one file, docs/reference/help.md. It ships with every
install, so it matches the installed version, and Context7 indexes it. A new
static context pack, help, serves the same file through `rig context get help`
by symlinking to it. The pack build copies the link's target, so installs get a
real file.

The pack generator accepts a static-pack symlink only when it points to a file
under docs/reference/. Any other link fails the build before anything is
written. Tests cover the help pack's bytes and both symlink cases.

The startup guidance, the openrig-skills index (all three copies), the
onboarding capability map, README and SUPPORT now point to `rig context get
help`, falling back to the installed file or openrig.dev/help/agents (the same
text) when `rig` won't run.

* docs(help): say contact options, not a contact form

The website's help page lists email and public Q&A; it has no contact form.

* docs(help): load linked guides on demand; correct the installed fallback path

F1: `rig context get help` served help.md alone, so its links to
getting-started, instance-layout and rig-spec had nothing to resolve against.
A new static pack, reference, symlinks exactly those three files from
docs/reference/. help.md keeps its source-relative links and adds the
`rig context get reference/<file>[#section]` address beside each, so a guide
loads only when it's needed and a help read stays small.

F2: the broken-rig fallback named docs/reference/help.md "in the installed
package". The package build copies these files to daemon/docs/reference/ in
@openrig/cli. Corrected in help.md, the startup guidance and the openrig-skills
index (all three copies, digests regenerated).

Tests: the reference pack ships real files equal to their sources; every
address help.md teaches resolves through the daemon's address route, section
and whole-file; the help preview contains none of the three manuals; a fixture
proves the address check fails on a missing target; source links and the
installed-path text match build-package.sh.

---------

Co-authored-by: v-openrig-build <[email protected]>
2026-09-28 20:59:08 -07:00