Skip to content

Config-free env mode, model recommendations, and provider docs#102

Merged
DenysKuchma merged 5 commits into
mainfrom
feature/provider-model-config-and-env
Jul 22, 2026
Merged

Config-free env mode, model recommendations, and provider docs#102
DenysKuchma merged 5 commits into
mainfrom
feature/provider-model-config-and-env

Conversation

@DavertMik

Copy link
Copy Markdown
Contributor

What

Run Explorbot without an explorbot.config.js and keep the recommended models in one place.

Config-free environment mode

Set EXPLORBOT_* variables and Explorbot builds a config from the environment when no config file is found (a config file always wins). For CI one-liners, demos, and coding agents.

  • EXPLORBOT_AI_PROVIDER — a provider name; fills every role from its recommended models.
  • EXPLORBOT_AI_MODEL — pins the main model (a model id for the provider, or a standalone provider/model-id).
  • EXPLORBOT_VISION_MODEL / EXPLORBOT_AGENTIC_MODEL override those roles; EXPLORBOT_URL, EXPLORBOT_OUTPUT, EXPLORBOT_KNOWLEDGE[_FILE], EXPLORBOT_API_SPEC round it out.
EXPLORBOT_URL=https://app.example.com \
EXPLORBOT_AI_PROVIDER=openrouter \
  npx explorbot explore /login --max-tests 3

Config-free runs write to a temp dir, disable experience writing (experience.disabled), and turn the Historian off, so nothing is left in the project.

Model recommendations as a single source

models.json holds the recommended model / visionModel / agenticModel per provider. It is read at runtime (a bare provider name resolves through it) and ships with the npm package.

Generated provider docs

Each provider's export default config block in docs/basics/providers.md is generated from models.json by bunosh docs:models and verified in CI on release (--check). A > [!NOTE] is emitted when a provider is missing a role.

Mistral

Added as a supported provider — mistral-small-latest for model/visionModel (reads screenshots), mistral-large-latest for agenticModel.

Notes

  • Scoped to this feature only; unrelated in-progress work in the tree (demo-video skill, doc-collector, etc.) is intentionally left out.
  • bun test tests/unit/ — 836 pass.

🤖 Generated with Claude Code

Run Explorbot without an explorbot.config.js via EXPLORBOT_* variables.
EXPLORBOT_AI_PROVIDER selects a provider and fills every role from its
recommended models; EXPLORBOT_AI_MODEL pins the main model (a model id
for that provider, or a standalone provider/model-id).

Recommended models live in models.json, read at runtime (a bare provider
name resolves through it) and shipped with the npm package. Each
provider's config block in docs/basics/providers.md is generated from
models.json by `bunosh docs:models`, verified in CI on release; a NOTE
is emitted when a provider lacks a role. Adds Mistral as a provider.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown

Explorbot Self-Regression

Commit 8db4a5b · run

Scenario Result Attempts Duration
basic (native) PASS 1/3 7m
experience: control OK — failed as expected 1/1 2m
experience: seeded PASS 1/3 1m

Attempt details

  • basic (native) attempt 1 — PASS: login evidence: PASS (post-login plan=true, post-login research=true); research: PASS (files=6, wellFormed=true, keywords=7/3); scenarios: PASS (tests=8/5, features=4/3); tests passed: PASS (5 passed, 0 failed (reporter: 5 passed, 0 failed))
  • experience: control attempt 1 — PASS: control: OK — failed as expected (0 passed, 1 failed)
  • experience: seeded attempt 1 — PASS: seeded: PASS (1 passed, 0 failed)

Session analysis — basic (native):

Session Analysis

The Issues feature supports CRUD operations (create, read), search, and filtering by status and label. Core flows work: creating issues, searching by keyword, filtering by status/labels, and clearing filters all function correctly. The main friction point is an inconsistent form selector that caused retries during issue creation.

Coverage

  • Pages: /issues
  • Features: Issue list display, issue creation via toolbar, keyword search, status filtering, label filtering, filter clearing

What works

  • Issue creationET-1 Create new issue via toolbar and verify it appears in list
  • Keyword searchET-2 Search for existing issue by title keyword and verify correct results
  • Status filteringET-3 Filter issues by status and verify results update correctly
  • Label filteringET-4 Filter issues by label and verify correct results
  • Filter clearingET-5 Clear search filters and verify all issues are displayed

Execution Issues

  • ET-1 Create new issue — first form selector .modal failed, retry with dialog#new-issue-drawer succeeded
  • ET-3 Filter by status — first "Select Closed status" click failed, passed on second attempt
  • ET-5 Clear filters — "All labels" click failed twice, but verification passed anyway (filter was already cleared)

…d docs

EXPLORBOT_ENV_VARS in src/config.ts is the one place every environment
variable is declared. The CLI renders it into help text on the root
command and every subcommand (both boats included), so an agent running
any `--help` discovers the full set. `bunosh docs:env` generates the
tables in agentic-usage.md and commands.md from the same list, verified
in CI on release.

Adds EXPLORBOT_NO_BANNER, which was undocumented. Two tests guard the
registry against drift in either direction.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs:models and docs:env become one docs:sync command with two
non-exported helpers, so CI runs a single verification step.

Signals staleness by throwing instead of calling process.exit, matching
how regression:all already reports failure. A failed task() cannot be
used for this: bunosh's test-environment guard checks
`typeof Bun?.jest !== 'undefined'`, which is always true under Bun, so
task failures never set exit code 1 here.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
One task per generated file, so a stale doc is reported by name. stopOnFail
aborts the run at the first failure instead of accumulating a stale list
and branching on it afterwards.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment thread bin/explorbot-cli.ts Outdated

function buildExplorBotOptions(from: string | undefined, options: CLIOptions): ExplorBotOptions {
const sessionFile = options.session === true ? path.join(path.resolve(options.path || process.cwd()), 'output', 'session.json') : options.session;
const sessionDir = process.env.EXPLORBOT_OUTPUT ? path.resolve(process.env.EXPLORBOT_OUTPUT) : path.join(path.resolve(options.path || process.cwd()), 'output');

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EXPLORBOT_OUTPUT is applied before determining whether config-free mode is active, so it changes the default --session path even when a config file is present
Need scope this override to env-config mode or derive the session path from the resolved config

Comment thread docs/workflow/agentic-usage.md Outdated
- **Experience is not written.** Nothing accumulates between runs, so a run is reproducible. Reading existing experience still works if the directory has any.
- **The Historian is off.** No generated CodeceptJS or Playwright test files. Plans and reports are still written.

For a long-lived agent that should learn across runs, point `EXPLORBOT_OUTPUT` at a stable directory or switch to a real config file.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

env mode always sets experience.disabled: true
Remove this suggestion or enable experience writing when persistent output is explicitly requested.

@DenysKuchma
DenysKuchma self-requested a review July 22, 2026 09:41
@DenysKuchma
DenysKuchma merged commit 9ae94b9 into main Jul 22, 2026
3 checks passed
@DenysKuchma
DenysKuchma deleted the feature/provider-model-config-and-env branch July 22, 2026 09:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants