Global configuration mode design spec - #107
Merged
Merged
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Explorbot Self-RegressionCommit
Attempt details
Session analysis — basic (native): Session AnalysisExplored the Issues list page functionality including creation, search, status filtering, label filtering, and empty-state handling. All core flows work correctly. Coverage
What works
Execution Issues
|
…stalled Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Explorbot can be configured once per machine in ~/.explorbot instead of per project. Global config is a rung in the core ConfigParser lookup, so core commands and the boats inherit it. - `~/.explorbot/config.js` is tried after the project config paths and before EXPLORBOT_* env vars; a config file still wins wholesale - `~/.explorbot/.env` loads before the cwd .env, so a project key wins - Global mode resolves dirs to `~/.explorbot/sites/<host>/` with full project semantics: experience on, Historian on, reports in the site - Sites auto-register with site.json on first visit and update lastRunAt; later runs reference them by bare host. `explorbot sites` lists them - `explorbot init` opens a Local/Global chooser in a terminal; `--global` runs the setup wizard, `--provider`/`--api-key` skip it for agents - Model roles accept 'provider/model-id' strings, so the global config needs no provider imports it cannot resolve from ~/.explorbot - api-tester derives its site from the endpoint host Implements docs/superpowers/specs/2026-08-03-global-config-design.md Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
DenysKuchma
requested changes
Aug 5, 2026
| Enter the API key for {provider} <Text dimColor>(stored as {envKey})</Text> | ||
| </Text> | ||
| <Box borderStyle="single" borderColor="blue" paddingX={1}> | ||
| <InputReadline value={apiKey} onChange={setApiKey} onSubmit={() => setStep('validate')} placeholder={process.env[envKey] ? 'leave empty to keep the key from your environment' : 'paste the key'} isActive showPrompt={false} /> |
Collaborator
There was a problem hiding this comment.
The API key is rendered as plain text.
InputReadline displays value directly, the secret remains visible in the terminal and may be captured in terminal recordings
|
|
||
| if (raw.startsWith('http://') || raw.startsWith('https://')) { | ||
| const url = new URL(raw); | ||
| return { baseUrl: url.origin, path: `${url.pathname}${url.search}` }; |
Collaborator
There was a problem hiding this comment.
Absolute targets drop the URL fragment
Add support for hash-based SPAs
Unify prima's ~/.explorbot/state/<host> with the site registry, address PR review comments, and give every boat the same missing-configuration hint. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- rename prima's ~/.explorbot/state/<host> to sites/<host> so config-free and global runs share one site folder, and move its artifacts under output/ - keep the URL fragment when resolving a site target, for hash-routed apps - mask the API key while it is typed into the global setup wizard - one missing-configuration message for the CLI and every boat, offering init --global, init, or EXPLORBOT_* variables - agent docs start from the global installation, env vars are the fallback Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A machine-wide installation must not override what a single command asks for, so env-var mode is tried before ~/.explorbot/config.*. A project config still wins over both. Precedence, highest first: --config, project config, EXPLORBOT_*, global. Also takes the env-mode URL from an absolute command target, so EXPLORBOT_AI_PROVIDER=groq explorbot explore https://app.example.com no longer demands EXPLORBOT_URL as well. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
DenysKuchma
requested changes
Aug 6, 2026
Commit 7cc52eb added a self-referential symlink at node_modules because the .gitignore pattern used a trailing slash, which matches directories only and let a symlink of the same name through. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Design spec for global configuration mode:
explorbot init --globalsets up AI config once in~/.explorbot, and every explored site gets a persistent subfolder under~/.explorbot/sites/<host>/with knowledge, experience, and output.Key decisions (spec only, no implementation yet):
ConfigParser: project config →~/.explorbot/config.js(global mode) →EXPLORBOT_*env config. A config file wins wholesale over env vars, as documented today. All boats (prima, api-tester, doc-collector) inherit with zero boat changes.sites/<host>/withsite.json; later runs can use bare references likeapp.example.com/login; newexplorbot sitescommand lists registered sites.init --globalis an interactive Ink wizard (provider → API key → optional validation), with--provideras the non-interactive escape for agents.os.homedir()only; amends the prima spec'sstate/<host>layout tosites/<host>.Review notes
This implements the "Config-Free Operation" direction already committed in the prima boat spec (
2026-08-01-prima-boat-design.md), generalized to the whole tool.🤖 Generated with Claude Code