Commit Graph
68 Commits
Author SHA1 Message Date
Rohit C Prasad db6e0af7eb Add Jan, Docker Model Runner and mlx-lm as local server providers
Same shape as llama.cpp/vLLM/LM Studio: address + optional key, models from the server.
Docker's /engines path is added when the user types the root; mlx-lm's help covers the port shared with llama.cpp.
Local-server checks now read LOCAL_SERVERS instead of a hand-kept tuple.
2026-10-26 11:10:29 -07:00
Rohit C Prasad c07f8096a3 Screenshots of the LM Studio provider
Light and dark, for the PR and the docs.
2026-10-25 20:55:44 -07:00
Rohit C Prasad 45d58dc9a5 Add LM Studio as a local server provider
Joins llama.cpp and vLLM: address + optional key, window from its own listing.
Based on #434 by zalex666: name, model and help text.
2026-10-25 20:55:44 -07:00
Rohit C Prasad aa9a6f9bba Screenshots of the Customization tab
Light and dark, for the PR and the docs.
2026-10-25 19:38:29 -07:00
Rohit C Prasad 535467a4d2 Point the web_search_provider notes at Settings > Customization 2026-10-25 19:06:58 -07:00
Rohit C Prasad d55ca63097 Register You.com with the site wall and make key handling uniform
Both You.com hosts join PROVIDER_HOSTS (keyed vs keyless) and the Sites catalogue; the YDC_API_KEY fallback moves to key resolution.
Every provider declares key_mode none/optional/required beside display_name and key_url.
2026-10-25 16:28:18 -07:00
Rohit C Prasad c59c288fe3 Register Firecrawl with the site wall
Firecrawl's host joins PROVIDER_HOSTS and the Access ▸ Sites catalogue.
The class gets display_name and key_url and raises on HTTP errors like the others.
2026-10-25 16:25:35 -07:00
Rohit C Prasad cb49df3644 Register Exa with the site wall
Exa's host joins PROVIDER_HOSTS and the Access ▸ Sites catalogue.
The class gets display_name and key_url and raises on HTTP errors like the others.
2026-10-25 16:24:17 -07:00
Rohit C Prasad 2a19c61345 Register Serper with the site wall and name every provider
Serper's host joins PROVIDER_HOSTS and the Access ▸ Sites catalogue.
Every provider carries display_name and key_url; keyed ones raise on HTTP errors.
2026-10-25 16:22:10 -07:00
Rohit C Prasad 70cd9c731a docs: add cloud_machines_base to config example
Matches the default in coworker/config.py.
2026-10-25 15:13:50 -07:00
ayobamiseun d76f29ee16 docs: document web_search_provider and cloud_* keys in config example
config.example.toml covered 7 of the 13 supported keys; a user reading it
could not discover how to switch web-search providers or point a dev/BYO
deployment at its own cloud instance. Adds web_search_provider (with the
three supported backends) and the cloud_* family (commented out — the
defaults are the production values, and an empty cloud_relay_ws_url
meaningfully disables the relay). Also notes the Windows global config
location and that allowed_commands/auto_allow are global-only until
workspace trust.

Verified: the example parses with tomllib and every key (including the
commented cloud_* names) matches coworker.config._FIELDS.
2026-10-25 15:13:32 -07:00
Devika Verma a952d5463b run: --no-web-tools keeps web_search and web_fetch out of the tool list (OPE-226)
For sealed evaluation runs and air-gapped work. A network block only refuses the call: the model still sees both tools, can spend turns on them, and the record cannot say they were absent. The flag withholds them at registration (build_engine(web_tools=False)), and summary.json and the trajectory record web_tools: false. Without the flag nothing changes.

Tests: with the flag both calls get the engine's unknown-tool answer and the record says false; without it web_fetch is present, shown with a non-URL the tool rejects before any network I/O.
2026-10-20 17:35:20 +05:30
Devika Verma 514c0beb37 llama.cpp and vLLM as providers
Each is a provider of its own with an address and an optional key; the served model, its window and tool support are read from the server (vLLM is probed for tool calling).
Providers carry a kind (local, subscription, api_key) for the settings page; docs/local-servers.md.
2026-10-05 19:49:34 -07:00
Devika Verma 83131c0a6f Per-model settings and a recommended-settings table
model_config.json holds context size, longest reply, thinking, sampling, auto-compact and the default model; the app's API and the CLI read it.
recommended_models.json carries the makers' own values per model, with sources; docs/model-settings.md explains both.
2026-10-05 19:49:34 -07:00
Rohit C Prasad 857e4e7b29 The openworker program for the Mac
build_macos_cli.sh freezes the CLI, signs and notarizes it; the release attaches it for arm64 and x86_64.
install.sh downloads it on a Mac instead of the Python package.
2026-10-05 15:28:03 -07:00
Rohit C Prasad 9de6b83c7f run: retry a failed model call after 2 s, then back off
Waits are now 2, 5, 10, 30, 60, 120, 240, 300, 300 s; the first was 30 s.
One dropped connection no longer costs half a minute.
2026-10-05 11:20:53 -07:00
Rohit C Prasad 00ebf7979f Publish the CLI image to GitHub's container registry
A workflow builds it for Intel and ARM, checks it, and pushes ghcr.io/andrewyng/openworker.
Runs when a release is published, or by hand.
2026-10-05 10:10:05 -07:00
Rohit C Prasad 09dc46575a Inside OpenShell, ask about a blocked site and wait
With a person at the terminal the coworker asks, they allow the site from outside, and it tries again.
With auto-answer it reports the block in its answer, as before.
2026-10-05 06:23:01 -07:00
Rohit C Prasad a2b0225580 Inside OpenShell: the allow-a-site command the agent gives is the whole command
On OpenShell 0.1.2 a rule added without --binary lets no program through.
The doc says a --no-keep run cannot be changed after it ends.
2026-10-05 05:45:16 -07:00
Rohit C Prasad 020263b5bd An image of the CLI for OpenShell, provider profiles, and how to use them
packaging/openshell/Dockerfile: the CLI plus common developer tools, about 1.3 GB.
Profiles for OpenAI and Anthropic name OpenWorker's own Python. docs/openshell-inside.md has the steps.
2026-10-04 20:35:38 -07:00
Rohit C Prasad 0361115e11 OpenShell doc: Docker Desktop's host networking on a Mac 2026-10-04 18:22:02 -07:00
Rohit C Prasad e3af23e4b8 OpenShell 0.1.2: say plainly that every site cannot be allowed, and update the doc page
0.1 refuses any-host wildcards in a policy, so the open profile has no OpenShell form.
The doc page covers 0.1.2 and coming from 0.0.x.
2026-10-04 17:44:25 -07:00
Rohit C Prasad 5c957d2185 run: the retry line gives the cause, and a stop signal ends the wait between retries
A failed model call prints what was underneath it, such as a proxy's 403.
SIGTERM during the wait before a retry now stops the run and leaves its record (exit 130).
2026-10-04 15:46:50 -07:00
Rohit C Prasad bab5b07c9b run: connectors are available, and the record uses the new names
A run has the connectors connected on this computer, as the app does.
summary.json and the trajectory say coworker, approval_mode and auto_answer.
2026-10-04 11:41:00 -07:00
Rohit C Prasad 6e0d58199a run: a folder request is asked in the terminal and yes gives the folder
Yes, yes but read only, no, or a different folder. With --auto-answer or no terminal it is declined by rule, as before.
2026-10-04 11:20:39 -07:00
Rohit C Prasad f3bae90322 run: --approval-mode replaces --mode, and the earlier flag names are gone
--mode, --persona, --attendance and the unlisted mode names are no longer accepted.
Flags cannot be shortened, so --mode is refused instead of being read as --model.
2026-10-04 11:18:40 -07:00
Rohit C Prasad 900bc9f7f2 run: Ctrl-C at a prompt ends the run and leaves its record
Exit code 130. The prompt is read on a daemon thread so the run does not wait for Enter to exit.
2026-10-03 21:05:49 -07:00
Rohit C Prasad 25c9e0ba2d run: uses this computer's settings, asks in the terminal, and saves the session
Default mode is ask; approvals and questions are separate (--auto-answer); --isolated keeps the sealed benchmark run.
Without --out the record goes to sessions/<workspace path>/<session id> in the state folder; --allow-site adds sites for the run.
Exit code 0 only when the task finished; 3 when it stopped early with its record written.
2026-10-03 21:05:07 -07:00
Rohit C Prasad 14e5e8195f run: the approval mode that asks is named ask
The stored name, interactive, is still accepted but unlisted.
2026-10-03 20:47:17 -07:00
Rohit C Prasad 07cc4a3caa run: the task can be piped in on standard input
With no --prompt or --prompt-file, a piped standard input is the task; a terminal or an empty pipe stops with exit code 2.
2026-10-03 20:37:49 -07:00
Rohit C Prasad 8064af1ed1 run: --coworker chooses the coworker, and the workspace defaults to the current folder
--persona still works, unlisted. An unknown coworker id stops the run with exit code 2.
2026-10-03 20:04:17 -07:00
Rohit Prasad c54597913f Merge pull request #680 from andrewyng/issue/ope-196-headless-run
feat(cli): add `openworker run` for unattended tasks, a `dangerously-bypass-approvals` mode and an `auto` attendance (OPE-196, OPE-203, OPE-204)
2026-10-03 20:02:02 -07:00
Rohit C Prasad 2260380edb OpenShell: the agent and the card are told which sites the sandbox blocked
The sandbox's own log is followed from outside; a refusal reaches us up to half a second late.
A failed command waits for it; one that arrives after its result is told with the next result.
2026-10-03 16:15:53 -07:00
Rohit C Prasad a5bc274fb8 Access section: the session's allowed sites, with a list of its own
Sites from Settings are listed plain; sites allowed for this session are marked "Session only".
The person can allow one more for the session or take one back; the running sandbox follows at once.
2026-10-03 15:45:53 -07:00
Rohit C Prasad 84215788ab The agent can ask for a site its commands cannot reach
A new tool, request_network_access, raises a card only a person answers: this session, always, or deny.
A command's result names the sites the sandbox blocked while it ran, and the agent is told the live list each turn.
The header chip lists the sites allowed for this session apart from the machine's.
2026-10-03 15:35:44 -07:00
Rohit C Prasad e45402b3ab A site allowed on the card opens on the running sandbox too
"This session" and "Always allow" now reach the session's commands at once.
OpenShell: the policy is rendered again and set on the sandbox; macOS and Windows: the session's own proxy takes the host.
2026-10-03 11:03:37 -07:00
Rohit C Prasad 319f511336 Allowed sites: the session keeps the stored entries; docs say web tools follow the list
"Always allow" now copies the list back as the store keeps it, so the chip matches Settings.
The three sandbox pages say web search and fetch follow the list; connectors and MCP do not.
2026-10-03 07:54:37 -07:00
Devika Verma 31fac7049a Rename openworker run --root to --add-dir (OPE-196)
"root" already means the superuser and the top of the filesystem; `--add-dir` says what
the flag does and is the name the best-known agent CLIs use for the same idea. Recorded
in summary.json as args.extra_dirs.
2026-10-02 15:11:22 +05:30
Devika Verma 1d0073faaf Add --root to openworker run: extra writable folders beside the workspace (OPE-196)
A harness can put its output contract outside the workspace: CyberGym-E2E runs the agent
in /src and grades /output/fix.patch and /output/poc.bin. OpenWorker's file tools only
write under a declared root, in every permission mode (the dangerous mode clears the
permission floor, but the tools still resolve paths against the session's roots by
construction), while the shell is not scoped. So without a way to declare /output, a
delivery depended on which tool the model happened to pick.

`--root DIR` (repeatable) adds writable roots after the workspace, which stays the folder
relative paths resolve against; the folders are announced to the model in the session's
directories block and recorded under args.roots in summary.json. The reference harness
does the same for Gemini CLI with --include-directories /src,/scripts,/output.
2026-10-02 15:11:22 +05:30
Devika Verma 78acad6758 Add openworker run: one task, no human, a record left behind (OPE-196)
A headless one-shot command beside `up`: give it a task, a folder and a model; it builds the same engine the desktop app uses, runs to the end with attendance `auto` (coworker/unattended.py), and leaves a record: every event, the final conversation, a summary with tokens and cost, every answer the engine gave on the absent user's behalf, the audit log, a per-call model log, and a trajectory in the ATIF interchange format. The trajectory and the exit code are the stable contract; the other files are internal.

State and scratch folders are pointed under --out before the engine starts, so a run never touches the machine's own conversations, keys or settings. A transient provider failure or an empty reply is waited out with backoff and a nudge instead of ending the run; permanent errors are not retried. Tool results are bounded with the full text spilled beside the record. A small price table gives an estimated cost per call as a cross-check; an unpriced model gets counts but no cost.

The mode axis decides approvals (`dangerously-bypass-approvals` prints its warning line here); the runner adds no policy of its own.
2026-10-02 15:11:21 +05:30
Rohit C Prasad f4c50f3837 Desktop app: a fixed port, 8765, so joined machines survive a restart
The app moves to a free port only when 8765 is taken (after waiting 5 s for a previous copy to stop) and the Machines page then says so; OPENWORKER_PORT overrides for developers (OPE-212).
2026-09-29 22:21:51 -07:00
Rohit C Prasad 12f757f30b OpenShell setup on a Mac: check Docker Desktop's kernel for Landlock
A throwaway container asks the kernel; without Landlock the Docker row says update Docker Desktop.
A sandbox that exits at start on such a Mac gets the same message instead of ContainerExited.
2026-09-28 18:31:12 -07:00
Rohit C Prasad 7f4844ca7c Sandbox page: links open the browser, real CLI logos, tools off by default
Wire the Tauri opener plugin so openExternal works in the desktop app.
Tools list shows only folders this machine has, all switched off until chosen.
2026-09-28 17:16:29 -07:00
Rohit C Prasad 4f512b77bd Sandbox settings v6: allowed-sites tick list, three-row OpenShell setup
Network allow list holds only the machine's ticked sites, none by default; strict/standard removed.
The app no longer installs OpenShell; setup is two checks and one step with progress.
DMG build requires grpcio so the sidecar can use OpenShell.
2026-09-28 16:45:49 -07:00
Rohit C Prasad 6b7cae8d5f Sandbox settings v5: one-button setup, two network choices, CLI login presets
Network: registries and search (strict folded in) with the machine's own hosts, or allow everything.
Credentials list only what was added; shipped entries become presets with the variable each tool reads.
A hung docker info no longer fails the OpenShell checklist.
2026-09-28 15:57:29 -07:00
Rohit C Prasad ff54ceaf73 Merge main: OpenShell guided setup (openworker#699) into the Sandbox page
The OpenShell checklist and setup job show under the OpenShell type; the Windows setup keeps its own routes.
Co-Authored-By: Devika Verma <devikaverma11@gmail.com>
2026-09-28 10:30:41 -07:00
Rohit C Prasad f0cc63023c Settings ▸ Sandbox: one switch, then the type, then its options; the Windows setup dialog
Setup and remove routes prove the wall in a throwaway sandbox before the choice takes effect.
Credential entries are a file or a folder, labelled credential or configuration; collapsible cards.
2026-09-28 08:53:33 -07:00
Rohit C Prasad 388caf998e Windows sandbox: one mode only; traverse entries on the way to a granted folder
The same-user fallback is gone: without setup the provider refuses and Settings say why (ruling 18).
A shell could not enter a granted folder under the profile; the parents now get a traverse-only entry.
The entry check matches by SID, so it works for a real account too.
2026-09-27 22:38:07 -07:00
Devika Verma 9a7cc2bcea Settings > Sandbox: the app installs OpenShell itself where it can; one command where it cannot (OPE-207)
From a fresh-user run on WSL (2026-09-27): "Set up sandbox" handed over two
commands, gave no install instructions, and put a Copy button on notes
("found none") and file paths.

- steps carry `command` (run in a terminal, gets Copy) apart from `hint`
  (a note) and `docs` (a Guide link). `checks()` prints command or hint.
- `admin_prefix()`: `sudo -n` when this user may sudo without a password,
  else `pkexec` (the desktop's own password prompt) when there is a display
  and this is not WSL. The app never sees or holds a password.
- `install_openshell()`: NVIDIA's installer as the user on a Mac; on Linux
  under the admin prefix with `loginctl enable-linger` FIRST in the same
  run, because the installer starts the gateway through the user's systemd
  manager, which on WSL does not run until linger is on (it otherwise
  prints "could not reach the user systemd manager" and exits 0 without
  registering the gateway). The job streams its output as progress and it
  can be cancelled.
- No prefix (WSL): the openshell row hands over ONE command, linger + the
  installer, and the job stops until "Check again".
- `enable_linger()` tries the user, then the admin prefix, then hands over.
- Terminal `setup`: linger (sudo) before the installer; Guide URL printed.
- Page: "Run this in a terminal on this machine:" above a command; notes
  plain, no Copy; Guide links; install progress row; a fixable row shows
  its command only once the app could not do it.
- Wording: switch-off text says what it means ("directly on this machine,
  with the same access as your user account"); "stored in <path>" only
  while the switch is on; the credential editor explains itself with an
  npm example and placeholders; "needs download" hint points at the
  button, not a terminal command.
2026-09-27 23:59:06 +05:30
Devika Verma 126e210cec Settings > Sandbox: one switch, a readiness checklist, collapsible sub-settings, and a guided "Set up sandbox" (OPE-207)
The page listed "No sandbox", "macOS sandbox" and "OpenShell" as three equal radio
buttons (with "ready" next to no-sandbox, and "on this Mac" on every OS), and always
showed the network allow list and shared credentials even when they applied to nothing.
Choosing OpenShell did not say what the machine still needed; the user found out when a
session was refused.

Now:
- One switch, "Run agents in a sandbox". Off removes `sandbox_provider` from
  config.toml (it used to write "direct", which also disabled a headless machine's
  automatic-OpenShell rule); on picks Seatbelt on a Mac, OpenShell elsewhere, with a
  dropdown when both exist. On Windows the switch is disabled with the WSL hint.
- Under the switch, for OpenShell: a readiness checklist, the same rows `openworker
  machine sandbox status` prints, now with keys and whether the app may fix each one
  itself, plus two new rows: free disk space for the image (about 10 GB) and Landlock in
  the kernel (OpenShell refuses to start a sandbox without it). Each missing row shows
  the command to run, with Copy.
- "Set up sandbox" runs `SetupJob` on the machine's server: it fixes what the app may
  (bind-mount config and gateway restart, the config line, linger when no administrator
  is needed, the image download with per-layer progress and Cancel) and stops at a step
  that needs an administrator or an installer, showing the command; "Check again"
  continues. It never runs anything as root and never turns the sandbox off. A desktop
  notification says when the download is done.
- Network allow list and shared credentials are collapsible and shown only while the
  switch is on.

`setup_cmd` is refactored into `steps()` (rows with keys and fixability) and one
function per fix, used by both the terminal `setup` and the job, so there is one list
of checks. New endpoints: GET /v1/settings/sandbox/readiness, GET/POST
/v1/settings/sandbox/setup, POST /v1/settings/sandbox/setup/cancel.
2026-09-27 14:34:18 +05:30