@steipete/oracle 0.21.0 → 0.21.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/oracle-cli.js +14 -15
- package/dist/src/browser/executor.js +9 -4
- package/dist/src/browser/profileState.js +2 -0
- package/dist/src/browser/provider.js +15 -1
- package/dist/src/browser/sessionRunner.js +2 -2
- package/dist/src/gemini-web/browserSessionManager.js +15 -2
- package/dist/src/gemini-web/executor.js +1 -1
- package/dist/src/gemini-web/http.js +11 -2
- package/dist/src/remote/client.js +25 -9
- package/dist/src/remote/server.js +19 -5
- package/package.json +11 -10
- package/dist/docs-site/.nojekyll +0 -0
- package/dist/docs-site/CNAME +0 -1
- package/dist/docs-site/RELEASING.html +0 -403
- package/dist/docs-site/advisor.html +0 -317
- package/dist/docs-site/agents.html +0 -375
- package/dist/docs-site/anthropic.html +0 -368
- package/dist/docs-site/bridge.html +0 -421
- package/dist/docs-site/browser-mode.html +0 -636
- package/dist/docs-site/chromium-forks.html +0 -355
- package/dist/docs-site/cli-reference.html +0 -347
- package/dist/docs-site/configuration.html +0 -464
- package/dist/docs-site/favicon.svg +0 -14
- package/dist/docs-site/followup.html +0 -375
- package/dist/docs-site/gemini.html +0 -387
- package/dist/docs-site/grok.html +0 -325
- package/dist/docs-site/index.html +0 -360
- package/dist/docs-site/install.html +0 -335
- package/dist/docs-site/linux.html +0 -321
- package/dist/docs-site/llms.txt +0 -44
- package/dist/docs-site/manual-tests.html +0 -621
- package/dist/docs-site/mcp.html +0 -412
- package/dist/docs-site/multimodel.html +0 -364
- package/dist/docs-site/mythical-pro-agents.html +0 -360
- package/dist/docs-site/notifier.html +0 -338
- package/dist/docs-site/openai-endpoints.html +0 -417
- package/dist/docs-site/openrouter.html +0 -344
- package/dist/docs-site/quickstart.html +0 -369
- package/dist/docs-site/refactor/ux.html +0 -321
- package/dist/docs-site/sessions.html +0 -397
- package/dist/docs-site/social-card.png +0 -0
- package/dist/docs-site/social-card.svg +0 -79
- package/dist/docs-site/spec.html +0 -363
- package/dist/docs-site/testing.html +0 -323
- package/dist/docs-site/tui-debug.html +0 -326
- package/dist/docs-site/windows-work.html +0 -348
- package/dist/docs-site/windows.html +0 -320
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>Local configuration (JSON5) — oracle</title>
|
|
7
|
-
<meta name="description" content="Local configuration (JSON5) — oracle CLI documentation.">
|
|
8
|
-
<link rel="canonical" href="https://askoracle.sh/configuration.html">
|
|
9
|
-
<meta property="og:type" content="website">
|
|
10
|
-
<meta property="og:site_name" content="oracle">
|
|
11
|
-
<meta property="og:title" content="Local configuration (JSON5) — oracle">
|
|
12
|
-
<meta property="og:description" content="Local configuration (JSON5) — oracle CLI documentation.">
|
|
13
|
-
<meta property="og:url" content="https://askoracle.sh/configuration.html">
|
|
14
|
-
<meta property="og:image" content="https://askoracle.sh/social-card.png">
|
|
15
|
-
<meta property="og:image:width" content="1200">
|
|
16
|
-
<meta property="og:image:height" content="630">
|
|
17
|
-
<meta name="twitter:card" content="summary_large_image">
|
|
18
|
-
<meta name="twitter:title" content="Local configuration (JSON5) — oracle">
|
|
19
|
-
<meta name="twitter:description" content="Local configuration (JSON5) — oracle CLI documentation.">
|
|
20
|
-
<meta name="twitter:image" content="https://askoracle.sh/social-card.png">
|
|
21
|
-
<link rel="icon" href="favicon.svg" type="image/svg+xml">
|
|
22
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
23
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
24
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
25
|
-
<script>(function(){var s;try{s=localStorage.getItem('theme')}catch(e){}var d=window.matchMedia&&matchMedia('(prefers-color-scheme: dark)').matches;document.documentElement.dataset.theme=s||(d?'dark':'light')})();</script>
|
|
26
|
-
<style>
|
|
27
|
-
:root{
|
|
28
|
-
--ink:#0e0a1f;
|
|
29
|
-
--text:#1d1832;
|
|
30
|
-
--muted:#6b6582;
|
|
31
|
-
--subtle:#9c95b5;
|
|
32
|
-
--bg:#fafaff;
|
|
33
|
-
--paper:#ffffff;
|
|
34
|
-
--accent:#7c3aed;
|
|
35
|
-
--accent-soft:rgba(124,58,237,.10);
|
|
36
|
-
--accent-strong:#5b21b6;
|
|
37
|
-
--accent-2:#0ea5e9;
|
|
38
|
-
--accent-glow:#a78bfa;
|
|
39
|
-
--line:#e7e3f0;
|
|
40
|
-
--line-soft:#f2eff8;
|
|
41
|
-
--code-bg:#0c0a1a;
|
|
42
|
-
--code-fg:#e9e6f5;
|
|
43
|
-
--code-inline-fg:#1c1734;
|
|
44
|
-
--pill-border:#dcd5ec;
|
|
45
|
-
--shadow-card:0 4px 14px rgba(14,10,31,.08);
|
|
46
|
-
--scrollbar:#cbc4dc;
|
|
47
|
-
}
|
|
48
|
-
:root[data-theme="dark"]{
|
|
49
|
-
--ink:#f5f2ff;
|
|
50
|
-
--text:#cec7e4;
|
|
51
|
-
--muted:#9189a8;
|
|
52
|
-
--subtle:#6a6383;
|
|
53
|
-
--bg:#0a0815;
|
|
54
|
-
--paper:#15102a;
|
|
55
|
-
--accent:#a78bfa;
|
|
56
|
-
--accent-soft:rgba(167,139,250,.18);
|
|
57
|
-
--accent-strong:#c4b5fd;
|
|
58
|
-
--accent-2:#38bdf8;
|
|
59
|
-
--accent-glow:#c4b5fd;
|
|
60
|
-
--line:#272140;
|
|
61
|
-
--line-soft:#1c1734;
|
|
62
|
-
--code-bg:#06040d;
|
|
63
|
-
--code-fg:#e9e6f5;
|
|
64
|
-
--code-inline-fg:#e9e6f5;
|
|
65
|
-
--pill-border:#2c2549;
|
|
66
|
-
--shadow-card:0 4px 18px rgba(0,0,0,.45);
|
|
67
|
-
--scrollbar:#3a3358;
|
|
68
|
-
}
|
|
69
|
-
:root{color-scheme:light}
|
|
70
|
-
:root[data-theme="dark"]{color-scheme:dark}
|
|
71
|
-
*{box-sizing:border-box}
|
|
72
|
-
html{scroll-behavior:smooth;scroll-padding-top:24px}
|
|
73
|
-
body{margin:0;background:var(--bg);color:var(--text);font-family:"Inter",ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;line-height:1.65;overflow-x:hidden;-webkit-font-smoothing:antialiased;font-feature-settings:"cv02","cv03","cv04","cv11";transition:background-color .18s,color .18s}
|
|
74
|
-
::selection{background:var(--accent);color:#fff}
|
|
75
|
-
a{color:var(--accent);text-decoration:none;transition:color .12s}
|
|
76
|
-
a:hover{text-decoration:underline;text-underline-offset:.2em}
|
|
77
|
-
.shell{display:grid;grid-template-columns:268px minmax(0,1fr);min-height:100vh}
|
|
78
|
-
.sidebar{position:sticky;top:0;height:100vh;overflow:auto;padding:24px 22px;background:var(--paper);border-right:1px solid var(--line);scrollbar-width:thin;scrollbar-color:var(--line) transparent;transition:background-color .18s,border-color .18s}
|
|
79
|
-
.sidebar::-webkit-scrollbar{width:6px}
|
|
80
|
-
.sidebar::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px}
|
|
81
|
-
.sidebar-head{display:flex;align-items:center;gap:10px;margin-bottom:24px}
|
|
82
|
-
.brand{display:flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none;flex:1;min-width:0}
|
|
83
|
-
.brand:hover{text-decoration:none}
|
|
84
|
-
.brand .mark{flex:0 0 30px;width:30px;height:30px;border-radius:50%;background:radial-gradient(circle at 32% 32%,#fff 0,#e0d4ff 22%,#7c3aed 60%,#1e1240 100%);box-shadow:0 0 0 1px rgba(124,58,237,.35),0 6px 18px rgba(124,58,237,.35);position:relative}
|
|
85
|
-
.brand .mark::after{content:"";position:absolute;left:50%;top:50%;width:9px;height:9px;border-radius:50%;background:#0c0820;transform:translate(-50%,-50%)}
|
|
86
|
-
.brand strong{display:block;font-size:1.05rem;line-height:1.1;font-weight:600;letter-spacing:0;color:var(--ink)}
|
|
87
|
-
.brand small{display:block;color:var(--muted);font-size:.74rem;margin-top:3px;font-weight:400}
|
|
88
|
-
.theme-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:34px;height:34px;border-radius:8px;border:1px solid var(--line);background:var(--paper);color:var(--muted);cursor:pointer;padding:0;transition:border-color .15s,color .15s,background-color .15s,transform .12s}
|
|
89
|
-
.theme-toggle:hover{border-color:var(--ink);color:var(--ink)}
|
|
90
|
-
.theme-toggle:active{transform:scale(.94)}
|
|
91
|
-
.theme-toggle svg{width:16px;height:16px;display:block}
|
|
92
|
-
.theme-icon-sun{display:none}
|
|
93
|
-
:root[data-theme="dark"] .theme-icon-sun{display:block}
|
|
94
|
-
:root[data-theme="dark"] .theme-icon-moon{display:none}
|
|
95
|
-
.search{display:block;margin:0 0 22px}
|
|
96
|
-
.search span{display:block;color:var(--muted);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:0;margin-bottom:7px}
|
|
97
|
-
.search input{width:100%;border:1px solid var(--line);background:var(--paper);border-radius:8px;padding:9px 12px;font:inherit;font-size:.9rem;color:var(--text);outline:none;transition:border-color .15s,box-shadow .15s,background-color .18s}
|
|
98
|
-
.search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
|
|
99
|
-
nav section{margin:0 0 18px}
|
|
100
|
-
nav h2{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:0;margin:0 0 6px;font-weight:600}
|
|
101
|
-
.nav-link{display:block;color:var(--text);text-decoration:none;border-radius:6px;padding:5px 10px;margin:1px 0;font-size:.9rem;line-height:1.4;transition:background .12s,color .12s}
|
|
102
|
-
.nav-link:hover{background:var(--line-soft);color:var(--ink);text-decoration:none}
|
|
103
|
-
.nav-link.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
|
|
104
|
-
main{min-width:0;padding:32px clamp(20px,4.5vw,56px) 80px;max-width:1180px;margin:0 auto;width:100%}
|
|
105
|
-
.hero{display:flex;align-items:flex-end;justify-content:space-between;gap:22px;border-bottom:1px solid var(--line);padding:8px 0 22px;margin-bottom:8px;flex-wrap:wrap}
|
|
106
|
-
.hero-text{min-width:0;flex:1 1 320px}
|
|
107
|
-
.eyebrow{margin:0 0 8px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:0;font-size:.7rem}
|
|
108
|
-
.hero h1{font-size:2.25rem;line-height:1.1;letter-spacing:0;margin:0;font-weight:700;color:var(--ink)}
|
|
109
|
-
.hero-meta{display:flex;gap:8px;flex:0 0 auto;flex-wrap:wrap}
|
|
110
|
-
.repo,.edit,.btn-ghost{border:1px solid var(--line);color:var(--text);text-decoration:none;border-radius:7px;padding:6px 11px;font-weight:500;font-size:.83rem;background:var(--paper);transition:border-color .15s,color .15s,background .15s}
|
|
111
|
-
.repo:hover,.edit:hover,.btn-ghost:hover{border-color:var(--ink);color:var(--ink);text-decoration:none}
|
|
112
|
-
.edit{color:var(--muted)}
|
|
113
|
-
.home-hero{position:relative;padding:24px 0 32px;margin-bottom:8px;border-bottom:1px solid var(--line)}
|
|
114
|
-
.home-hero>*{position:relative;z-index:1}
|
|
115
|
-
.home-hero h1{font-size:3.4rem;line-height:1.04;letter-spacing:0;margin:0 0 .35em;font-weight:700;color:var(--ink);background:linear-gradient(135deg,var(--ink) 0,#7c3aed 60%,#0ea5e9 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
|
|
116
|
-
:root[data-theme="dark"] .home-hero h1{background:linear-gradient(135deg,#f5f2ff 0,#c4b5fd 50%,#7dd3fc 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
|
|
117
|
-
.home-hero .lede{font-size:1.18rem;line-height:1.55;color:var(--text);margin:0 0 1.2em;max-width:62ch}
|
|
118
|
-
.home-cta{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 18px}
|
|
119
|
-
.home-cta .btn{display:inline-flex;align-items:center;gap:7px;border-radius:8px;padding:10px 16px;font-weight:600;font-size:.92rem;text-decoration:none;transition:background .15s,border-color .15s,color .15s,transform .12s}
|
|
120
|
-
.home-cta .btn-primary{background:linear-gradient(135deg,var(--accent),var(--accent-strong));color:#fff;border:1px solid var(--accent);box-shadow:0 4px 14px rgba(124,58,237,.35)}
|
|
121
|
-
.home-cta .btn-primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);text-decoration:none;transform:translateY(-1px)}
|
|
122
|
-
.home-cta .btn-ghost{padding:10px 16px}
|
|
123
|
-
.home-install{display:flex;align-items:center;gap:12px;background:var(--code-bg);color:var(--code-fg);border-radius:8px;padding:10px 10px 10px 16px;font:500 .9rem/1.2 "JetBrains Mono","SF Mono",ui-monospace,monospace;max-width:34em;border:1px solid #1f1840}
|
|
124
|
-
.home-install .prompt{color:#6f63a3;user-select:none;flex:0 0 auto}
|
|
125
|
-
.home-install code{flex:1;background:transparent;border:0;color:var(--code-fg);font:inherit;padding:0;white-space:pre;overflow:hidden;text-overflow:ellipsis}
|
|
126
|
-
.home-install .copy{flex:0 0 auto;background:rgba(255,255,255,.08);color:var(--code-fg);border:1px solid rgba(255,255,255,.16);border-radius:6px;padding:5px 11px;font:500 .72rem/1 "Inter",sans-serif;cursor:pointer;transition:background .15s,border-color .15s}
|
|
127
|
-
.home-install .copy:hover{background:rgba(255,255,255,.16)}
|
|
128
|
-
.home-install .copy.copied{background:var(--accent);border-color:var(--accent)}
|
|
129
|
-
.home-services{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 18px}
|
|
130
|
-
.home-services span{display:inline-block;padding:3px 10px;border:1px solid var(--pill-border);border-radius:999px;font-size:.78rem;color:var(--muted);background:var(--paper)}
|
|
131
|
-
.home-services span.pill-pro{background:var(--accent-soft);color:var(--accent);border-color:transparent;font-weight:600}
|
|
132
|
-
.home-visual{display:block;width:min(100%,620px);height:auto;margin:22px 0 0;border-radius:8px;border:1px solid var(--line);box-shadow:var(--shadow-card);background:var(--paper)}
|
|
133
|
-
.doc-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:48px;margin-top:24px}
|
|
134
|
-
.doc-grid-home{margin-top:8px}
|
|
135
|
-
@media(min-width:1180px){.doc-grid{grid-template-columns:minmax(0,72ch) 200px;justify-content:start}.doc-grid-home{grid-template-columns:minmax(0,76ch);justify-content:start}}
|
|
136
|
-
.doc{min-width:0;max-width:72ch;overflow-wrap:break-word}
|
|
137
|
-
.doc-home{max-width:76ch}
|
|
138
|
-
.doc h1{font-size:2.6rem;line-height:1.08;letter-spacing:0;margin:0 0 .4em;font-weight:700;color:var(--ink)}
|
|
139
|
-
body:not(.home) .doc>h1:first-child{display:none}
|
|
140
|
-
.doc h2{font-size:1.45rem;line-height:1.2;margin:2em 0 .5em;font-weight:600;letter-spacing:0;color:var(--ink);position:relative}
|
|
141
|
-
.doc h3{font-size:1.1rem;margin:1.7em 0 .35em;position:relative;font-weight:600;color:var(--ink);letter-spacing:0}
|
|
142
|
-
.doc h4{font-size:.98rem;margin:1.4em 0 .25em;color:var(--ink);position:relative;font-weight:600}
|
|
143
|
-
.doc h2:first-child,.doc h3:first-child,.doc h4:first-child{margin-top:.2em}
|
|
144
|
-
.doc :is(h2,h3,h4) .anchor{position:absolute;left:-1.05em;top:0;color:var(--subtle);opacity:0;text-decoration:none;font-weight:400;padding-right:.3em;transition:opacity .12s,color .12s}
|
|
145
|
-
.doc :is(h2,h3,h4):hover .anchor{opacity:.7}
|
|
146
|
-
.doc :is(h2,h3,h4) .anchor:hover{opacity:1;color:var(--accent);text-decoration:none}
|
|
147
|
-
.doc p{margin:0 0 1.05em}
|
|
148
|
-
.doc ul,.doc ol{padding-left:1.3rem;margin:0 0 1.15em}
|
|
149
|
-
.doc li{margin:.25em 0}
|
|
150
|
-
.doc li>p{margin:0 0 .4em}
|
|
151
|
-
.doc strong{font-weight:600;color:var(--ink)}
|
|
152
|
-
.doc em{font-style:italic}
|
|
153
|
-
.doc code{font-family:"JetBrains Mono","SF Mono",ui-monospace,monospace;font-size:.84em;background:var(--line-soft);border:1px solid var(--line);border-radius:5px;padding:.08em .35em;color:var(--code-inline-fg)}
|
|
154
|
-
.doc pre{position:relative;overflow:auto;background:var(--code-bg);color:var(--code-fg);border-radius:8px;padding:14px 18px;margin:1.3em 0;font-size:.85em;line-height:1.6;scrollbar-width:thin;scrollbar-color:#3a3358 transparent;border:1px solid #221c40}
|
|
155
|
-
.doc pre.shiki{background:var(--code-bg)!important;color:var(--code-fg)!important}
|
|
156
|
-
.doc pre::-webkit-scrollbar{height:8px;width:8px}
|
|
157
|
-
.doc pre::-webkit-scrollbar-thumb{background:#3a3358;border-radius:8px}
|
|
158
|
-
.doc pre code{display:block;background:transparent;border:0;color:inherit;padding:0;font-size:1em;white-space:pre}
|
|
159
|
-
.doc pre code .line{display:block;min-height:1.6em}
|
|
160
|
-
.doc pre .copy{position:absolute;top:8px;right:8px;background:rgba(255,255,255,.06);color:var(--code-fg);border:1px solid rgba(255,255,255,.16);border-radius:6px;padding:3px 9px;font:500 .7rem/1 "Inter",sans-serif;cursor:pointer;opacity:0;transition:opacity .15s,background .15s,border-color .15s}
|
|
161
|
-
.doc pre:hover .copy,.doc pre .copy:focus{opacity:1}
|
|
162
|
-
.doc pre .copy:hover{background:rgba(255,255,255,.12)}
|
|
163
|
-
.doc pre .copy.copied{background:var(--accent);border-color:var(--accent);opacity:1}
|
|
164
|
-
.doc blockquote{margin:1.4em 0;padding:10px 16px;border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 8px 8px 0;color:var(--text)}
|
|
165
|
-
.doc blockquote p:last-child{margin-bottom:0}
|
|
166
|
-
.doc table{width:100%;border-collapse:collapse;margin:1.2em 0;font-size:.92em}
|
|
167
|
-
.doc th,.doc td{border-bottom:1px solid var(--line);padding:9px 10px;text-align:left;vertical-align:top}
|
|
168
|
-
.doc th{font-weight:600;color:var(--ink);background:var(--line-soft);border-bottom:1px solid var(--line)}
|
|
169
|
-
.doc hr{border:0;border-top:1px solid var(--line);margin:2.2em 0}
|
|
170
|
-
.toc{position:sticky;top:24px;align-self:start;font-size:.84rem;padding-left:14px;border-left:1px solid var(--line);max-height:calc(100vh - 48px);overflow:auto;scrollbar-width:thin;scrollbar-color:var(--line) transparent}
|
|
171
|
-
.toc::-webkit-scrollbar{width:5px}
|
|
172
|
-
.toc::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px}
|
|
173
|
-
.toc h2{font-size:.66rem;color:var(--muted);text-transform:uppercase;letter-spacing:0;margin:0 0 10px;font-weight:600}
|
|
174
|
-
.toc a{display:block;color:var(--muted);text-decoration:none;padding:4px 0 4px 10px;line-height:1.35;border-left:2px solid transparent;margin-left:-12px;transition:color .12s,border-color .12s}
|
|
175
|
-
.toc a:hover{color:var(--ink);text-decoration:none}
|
|
176
|
-
.toc a.active{color:var(--accent);border-left-color:var(--accent);font-weight:500}
|
|
177
|
-
.toc-l3{padding-left:22px!important;font-size:.94em}
|
|
178
|
-
@media(max-width:1179px){.toc{display:none}}
|
|
179
|
-
.page-nav{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:48px;border-top:1px solid var(--line);padding-top:20px}
|
|
180
|
-
.page-nav>a{display:block;border:1px solid var(--line);background:var(--paper);border-radius:9px;padding:13px 16px;text-decoration:none;color:var(--text);transition:border-color .15s,transform .15s,box-shadow .15s,background-color .18s}
|
|
181
|
-
.page-nav>a:hover{border-color:var(--accent);text-decoration:none;color:var(--ink)}
|
|
182
|
-
.page-nav small{display:block;color:var(--muted);font-size:.7rem;text-transform:uppercase;letter-spacing:0;margin-bottom:5px;font-weight:600}
|
|
183
|
-
.page-nav span{display:block;font-weight:600;line-height:1.3;color:var(--ink)}
|
|
184
|
-
.page-nav-prev{text-align:left}
|
|
185
|
-
.page-nav-next{text-align:right;grid-column:2}
|
|
186
|
-
.page-nav-prev:only-child{grid-column:1}
|
|
187
|
-
.nav-toggle{display:none;position:fixed;top:14px;right:14px;top:calc(14px + env(safe-area-inset-top, 0px));right:calc(14px + env(safe-area-inset-right, 0px));z-index:20;width:40px;height:40px;border-radius:9px;background:var(--paper);border:1px solid var(--line);color:var(--ink);cursor:pointer;padding:10px 9px;flex-direction:column;align-items:stretch;justify-content:space-between;box-shadow:var(--shadow-card)}
|
|
188
|
-
.nav-toggle span{display:block;width:100%;height:2px;flex:0 0 2px;background:currentColor;border-radius:2px;transition:transform .2s,opacity .2s}
|
|
189
|
-
.nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(8px) rotate(45deg)}
|
|
190
|
-
.nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0}
|
|
191
|
-
.nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-8px) rotate(-45deg)}
|
|
192
|
-
@media(max-width:900px){
|
|
193
|
-
.shell{display:block}
|
|
194
|
-
.sidebar{position:fixed;inset:0 30% 0 0;max-width:320px;height:100vh;z-index:15;transform:translateX(-100%);transition:transform .25s ease,background-color .18s,border-color .18s;box-shadow:0 18px 40px rgba(0,0,0,.18);background:var(--paper);pointer-events:none}
|
|
195
|
-
.sidebar.open{transform:translateX(0);pointer-events:auto}
|
|
196
|
-
.nav-toggle{display:flex}
|
|
197
|
-
main{padding:64px 18px 56px}
|
|
198
|
-
.hero{padding-top:6px}
|
|
199
|
-
.hero h1{font-size:1.8rem}
|
|
200
|
-
.home-hero h1{font-size:2.45rem}
|
|
201
|
-
.doc h1{font-size:2.1rem}
|
|
202
|
-
.hero-meta{width:100%;justify-content:flex-start}
|
|
203
|
-
.home-hero{padding-top:8px}
|
|
204
|
-
.home-visual{margin-top:18px}
|
|
205
|
-
.doc{padding:0}
|
|
206
|
-
.doc-grid{margin-top:18px;gap:24px}
|
|
207
|
-
.doc :is(h2,h3,h4) .anchor{display:none}
|
|
208
|
-
}
|
|
209
|
-
@media(max-width:520px){
|
|
210
|
-
main{padding:60px 14px 48px}
|
|
211
|
-
.doc pre{margin-left:-14px;margin-right:-14px;border-radius:0;border-left:0;border-right:0}
|
|
212
|
-
.home-install{flex-wrap:wrap}
|
|
213
|
-
}
|
|
214
|
-
</style>
|
|
215
|
-
</head>
|
|
216
|
-
<body>
|
|
217
|
-
<button class="nav-toggle" type="button" aria-label="Toggle navigation" aria-expanded="false">
|
|
218
|
-
<span aria-hidden="true"></span><span aria-hidden="true"></span><span aria-hidden="true"></span>
|
|
219
|
-
</button>
|
|
220
|
-
<div class="shell">
|
|
221
|
-
<aside class="sidebar">
|
|
222
|
-
<div class="sidebar-head">
|
|
223
|
-
<a class="brand" href="./" aria-label="oracle docs home">
|
|
224
|
-
<span class="mark" aria-hidden="true"></span>
|
|
225
|
-
<span><strong>oracle</strong><small>askoracle.sh</small></span>
|
|
226
|
-
</a>
|
|
227
|
-
<button class="theme-toggle" type="button" aria-label="Toggle dark mode" aria-pressed="false" data-theme-toggle>
|
|
228
|
-
<svg class="theme-icon-moon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.6 12.1A6.5 6.5 0 0 1 7.4 2.7a6.5 6.5 0 1 0 7.2 9.4z" fill="currentColor"/></svg>
|
|
229
|
-
<svg class="theme-icon-sun" viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="3.4" fill="currentColor"/><g stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><line x1="10" y1="2" x2="10" y2="4"/><line x1="10" y1="16" x2="10" y2="18"/><line x1="2" y1="10" x2="4" y2="10"/><line x1="16" y1="10" x2="18" y2="10"/><line x1="4.2" y1="4.2" x2="5.6" y2="5.6"/><line x1="14.4" y1="14.4" x2="15.8" y2="15.8"/><line x1="4.2" y1="15.8" x2="5.6" y2="14.4"/><line x1="14.4" y1="5.6" x2="15.8" y2="4.2"/></g></svg>
|
|
230
|
-
</button>
|
|
231
|
-
</div>
|
|
232
|
-
<label class="search"><span>Search</span><input id="doc-search" type="search" placeholder="browser, mcp, sessions"></label>
|
|
233
|
-
<nav><section><h2>Start</h2><a class="nav-link" href="./">Overview</a><a class="nav-link" href="install.html">Install</a><a class="nav-link" href="quickstart.html">Quickstart</a><a class="nav-link active" href="configuration.html">Local configuration (JSON5)</a></section><section><h2>Mythical Pro Agents</h2><a class="nav-link" href="mythical-pro-agents.html">Mythical Pro Agents</a><a class="nav-link" href="openai-endpoints.html">OpenAI-Compatible Endpoints</a><a class="nav-link" href="anthropic.html">Anthropic (Claude) Integration Plan</a><a class="nav-link" href="gemini.html">Gemini Integration</a><a class="nav-link" href="openrouter.html">OpenRouter</a><a class="nav-link" href="grok.html">Grok 4.1 (xAI) Support</a></section><section><h2>Browser Mode</h2><a class="nav-link" href="browser-mode.html">Browser Mode</a><a class="nav-link" href="chromium-forks.html">Chromium-based browsers (Chromium, Edge, Brave variants)</a><a class="nav-link" href="linux.html">Linux Notes</a><a class="nav-link" href="windows.html">Windows compatibility notes</a><a class="nav-link" href="windows-work.html">Windows Work</a><a class="nav-link" href="bridge.html">Bridge (Windows-hosted ChatGPT session → Linux clients)</a></section><section><h2>Agents & MCP</h2><a class="nav-link" href="agents.html">Coding Agents</a><a class="nav-link" href="mcp.html">MCP Server</a></section><section><h2>Workflows</h2><a class="nav-link" href="sessions.html">Sessions</a><a class="nav-link" href="followup.html">Followups & Lineage</a><a class="nav-link" href="multimodel.html">Multi-Model Execution</a></section><section><h2>Reference</h2><a class="nav-link" href="cli-reference.html">CLI Reference</a><a class="nav-link" href="spec.html">Spec</a><a class="nav-link" href="notifier.html">Session completion notifications</a><a class="nav-link" href="tui-debug.html">TUI navigation crash notes (2025-11-19)</a><a class="nav-link" href="manual-tests.html">Manual Test Suite (Browser Mode + Live API)</a><a class="nav-link" href="testing.html">Testing quickstart</a><a class="nav-link" href="RELEASING.html">Release Checklist (npm + Homebrew)</a></section></nav>
|
|
234
|
-
</aside>
|
|
235
|
-
<main>
|
|
236
|
-
<header class="hero">
|
|
237
|
-
<div class="hero-text">
|
|
238
|
-
<p class="eyebrow">Start</p>
|
|
239
|
-
<h1>Local configuration (JSON5)</h1>
|
|
240
|
-
</div>
|
|
241
|
-
<div class="hero-meta">
|
|
242
|
-
<a class="repo" href="https://github.com/steipete/oracle" rel="noopener">GitHub</a>
|
|
243
|
-
<a class="edit" href="https://github.com/steipete/oracle/edit/main/docs/configuration.md" rel="noopener">Edit page</a>
|
|
244
|
-
</div>
|
|
245
|
-
</header>
|
|
246
|
-
<div class="doc-grid">
|
|
247
|
-
<article class="doc"><h1 id="local-configuration-json5">Local configuration (JSON5)</h1>
|
|
248
|
-
<p>Oracle reads an optional per-user config from <code>~/.oracle/config.json</code>, then layers project configs from <code>.oracle/config.json</code> files discovered from your working directory upward, stopping before your home directory. All config files use JSON5 parsing, so trailing commas and comments are allowed.</p>
|
|
249
|
-
<h2 id="example-oracle-config-json"><a class="anchor" href="#example-oracle-config-json" aria-label="Anchor link">#</a>Example (<code>~/.oracle/config.json</code>)</h2>
|
|
250
|
-
<pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-json5"><span class="line"><span style="color:#ADBAC7">{</span></span>
|
|
251
|
-
<span class="line"><span style="color:#768390"> // Default engine when neither CLI flag nor env decide</span></span>
|
|
252
|
-
<span class="line"><span style="color:#96D0FF"> engine</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"api"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// or "browser"</span></span>
|
|
253
|
-
<span class="line"><span style="color:#96D0FF"> model</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"gpt-5.5-pro"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// older gpt-5.x-pro aliases → gpt-5.5-pro</span></span>
|
|
254
|
-
<span class="line"><span style="color:#96D0FF"> search</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"on"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// "on" | "off"</span></span>
|
|
255
|
-
<span class="line"></span>
|
|
256
|
-
<span class="line"><span style="color:#96D0FF"> notify</span><span style="color:#ADBAC7">: {</span></span>
|
|
257
|
-
<span class="line"><span style="color:#96D0FF"> enabled</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">true</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// default notifications (still auto-mutes in CI/SSH unless forced on)</span></span>
|
|
258
|
-
<span class="line"><span style="color:#96D0FF"> sound</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// play a sound on completion</span></span>
|
|
259
|
-
<span class="line"><span style="color:#96D0FF"> muteIn</span><span style="color:#ADBAC7">: [</span><span style="color:#96D0FF">"CI"</span><span style="color:#ADBAC7">, </span><span style="color:#96D0FF">"SSH"</span><span style="color:#ADBAC7">], </span><span style="color:#768390">// auto-disable when these env vars are set</span></span>
|
|
260
|
-
<span class="line"><span style="color:#ADBAC7"> },</span></span>
|
|
261
|
-
<span class="line"></span>
|
|
262
|
-
<span class="line"><span style="color:#96D0FF"> browser</span><span style="color:#ADBAC7">: {</span></span>
|
|
263
|
-
<span class="line"><span style="color:#96D0FF"> chromeProfile</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"Default"</span><span style="color:#ADBAC7">,</span></span>
|
|
264
|
-
<span class="line"><span style="color:#96D0FF"> chromePath</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">null</span><span style="color:#ADBAC7">,</span></span>
|
|
265
|
-
<span class="line"><span style="color:#96D0FF"> chromeCookiePath</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">null</span><span style="color:#ADBAC7">,</span></span>
|
|
266
|
-
<span class="line"><span style="color:#96D0FF"> chatgptUrl</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"https://chatgpt.com/"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// root is fine; folder URLs also work</span></span>
|
|
267
|
-
<span class="line"><span style="color:#96D0FF"> url</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">null</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// alias for chatgptUrl (kept for back-compat)</span></span>
|
|
268
|
-
<span class="line"><span style="color:#768390"> // Remote browser bridge (preferred place to store remote host settings)</span></span>
|
|
269
|
-
<span class="line"><span style="color:#96D0FF"> remoteHost</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"127.0.0.1:9473"</span><span style="color:#ADBAC7">,</span></span>
|
|
270
|
-
<span class="line"><span style="color:#96D0FF"> remoteToken</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"…"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// written by `oracle bridge client` (kept private; not printed by default)</span></span>
|
|
271
|
-
<span class="line"><span style="color:#96D0FF"> remoteViaSshReverseTunnel</span><span style="color:#ADBAC7">: { </span><span style="color:#96D0FF">ssh</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"user@linux-host"</span><span style="color:#ADBAC7">, </span><span style="color:#96D0FF">remotePort</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">9473</span><span style="color:#ADBAC7"> }, </span><span style="color:#768390">// optional metadata</span></span>
|
|
272
|
-
<span class="line"><span style="color:#96D0FF"> debugPort</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">null</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// fixed DevTools port (env: ORACLE_BROWSER_PORT / ORACLE_BROWSER_DEBUG_PORT)</span></span>
|
|
273
|
-
<span class="line"><span style="color:#96D0FF"> timeoutMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">1200000</span><span style="color:#ADBAC7">,</span></span>
|
|
274
|
-
<span class="line"><span style="color:#96D0FF"> inputTimeoutMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">30000</span><span style="color:#ADBAC7">,</span></span>
|
|
275
|
-
<span class="line"><span style="color:#96D0FF"> attachmentTimeoutMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">90000</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// wait for file upload/readiness before clicking Send (default: 45s)</span></span>
|
|
276
|
-
<span class="line"><span style="color:#96D0FF"> captureProviderNative</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// opt in to full ChatGPT conversation evidence (user config only)</span></span>
|
|
277
|
-
<span class="line"><span style="color:#96D0FF"> cookieSync</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// opt in to copying cookies from a live Chrome profile (prefer manualLogin)</span></span>
|
|
278
|
-
<span class="line"><span style="color:#96D0FF"> cookieSyncWaitMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">0</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// wait (ms) before retrying cookie sync when Chrome cookies are empty/locked</span></span>
|
|
279
|
-
<span class="line"><span style="color:#96D0FF"> assistantRecheckDelayMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">0</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// wait this long after timeout, then retry capture (0 = disabled)</span></span>
|
|
280
|
-
<span class="line"><span style="color:#96D0FF"> assistantRecheckTimeoutMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">120000</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// time budget for the recheck attempt (default: 2m)</span></span>
|
|
281
|
-
<span class="line"><span style="color:#96D0FF"> reuseChromeWaitMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">10000</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// wait for a shared Chrome profile to appear before launching (parallel runs)</span></span>
|
|
282
|
-
<span class="line"><span style="color:#96D0FF"> profileLockTimeoutMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">300000</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// wait for the manual-login profile lock before sending (parallel runs)</span></span>
|
|
283
|
-
<span class="line"><span style="color:#96D0FF"> maxConcurrentTabs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">3</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// soft limit for concurrent ChatGPT tabs using one manual-login profile (or set ORACLE_BROWSER_MAX_CONCURRENT_TABS)</span></span>
|
|
284
|
-
<span class="line"><span style="color:#96D0FF"> autoReattachDelayMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">0</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// delay before starting periodic auto-reattach attempts (0 = disabled)</span></span>
|
|
285
|
-
<span class="line"><span style="color:#96D0FF"> autoReattachIntervalMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">0</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// interval between auto-reattach attempts (0 = disabled)</span></span>
|
|
286
|
-
<span class="line"><span style="color:#96D0FF"> autoReattachTimeoutMs</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">120000</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// time budget per auto-reattach attempt (default: 2m)</span></span>
|
|
287
|
-
<span class="line"><span style="color:#96D0FF"> modelStrategy</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"select"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// select | current | ignore (ChatGPT only; ignored for Gemini web)</span></span>
|
|
288
|
-
<span class="line"><span style="color:#96D0FF"> thinkingTime</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"extended"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// light | standard | extended | extra-high | pro | heavy (ChatGPT Thinking/Pro models)</span></span>
|
|
289
|
-
<span class="line"><span style="color:#96D0FF"> researchMode</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"off"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// off | deep (ChatGPT Deep Research; browser only)</span></span>
|
|
290
|
-
<span class="line"><span style="color:#96D0FF"> manualLogin</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// set true to reuse a persistent automation profile and sign in once (recommended; Windows defaults to true when unset)</span></span>
|
|
291
|
-
<span class="line"><span style="color:#96D0FF"> manualLoginProfileDir</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">null</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// override profile dir (or set ORACLE_BROWSER_PROFILE_DIR)</span></span>
|
|
292
|
-
<span class="line"><span style="color:#96D0FF"> headless</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">,</span></span>
|
|
293
|
-
<span class="line"><span style="color:#96D0FF"> hideWindow</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">,</span></span>
|
|
294
|
-
<span class="line"><span style="color:#96D0FF"> keepBrowser</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">,</span></span>
|
|
295
|
-
<span class="line"><span style="color:#96D0FF"> manualLoginCookieSync</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// explicitly seed the manual-login profile from live Chrome cookies</span></span>
|
|
296
|
-
<span class="line"><span style="color:#ADBAC7"> },</span></span>
|
|
297
|
-
<span class="line"></span>
|
|
298
|
-
<span class="line"><span style="color:#768390"> // Azure OpenAI defaults (only used when endpoint is set)</span></span>
|
|
299
|
-
<span class="line"><span style="color:#96D0FF"> azure</span><span style="color:#ADBAC7">: {</span></span>
|
|
300
|
-
<span class="line"><span style="color:#96D0FF"> endpoint</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"https://your-resource-name.openai.azure.com/"</span><span style="color:#ADBAC7">,</span></span>
|
|
301
|
-
<span class="line"><span style="color:#96D0FF"> deployment</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"gpt-5-1-pro"</span><span style="color:#ADBAC7">,</span></span>
|
|
302
|
-
<span class="line"><span style="color:#96D0FF"> apiVersion</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"2025-04-01-preview"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// optional legacy knob; Azure v1 Responses runs do not require it</span></span>
|
|
303
|
-
<span class="line"><span style="color:#ADBAC7"> },</span></span>
|
|
304
|
-
<span class="line"></span>
|
|
305
|
-
<span class="line"><span style="color:#96D0FF"> heartbeatSeconds</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">30</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// default heartbeat interval</span></span>
|
|
306
|
-
<span class="line"><span style="color:#96D0FF"> maxFileSizeBytes</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">2097152</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// raise/lower the per-file attachment guard (bytes)</span></span>
|
|
307
|
-
<span class="line"><span style="color:#96D0FF"> filesReport</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">false</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// default per-file token report</span></span>
|
|
308
|
-
<span class="line"><span style="color:#96D0FF"> background</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">true</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// default background mode for API runs</span></span>
|
|
309
|
-
<span class="line"><span style="color:#96D0FF"> sessionRetentionHours</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">72</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// prune cached sessions older than 72h before each run (0 disables)</span></span>
|
|
310
|
-
<span class="line"><span style="color:#96D0FF"> promptSuffix</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"// signed-off by me"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// appended to every prompt</span></span>
|
|
311
|
-
<span class="line"><span style="color:#96D0FF"> apiBaseUrl</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"https://api.openai.com/v1"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// override for LiteLLM / custom gateways</span></span>
|
|
312
|
-
<span class="line"><span style="color:#768390"> // API-only, user-config-only overrides for known model keys.</span></span>
|
|
313
|
-
<span class="line"><span style="color:#96D0FF"> modelOverrides</span><span style="color:#ADBAC7">: {</span></span>
|
|
314
|
-
<span class="line"><span style="color:#96D0FF"> "gpt-5.5"</span><span style="color:#ADBAC7">: {</span></span>
|
|
315
|
-
<span class="line"><span style="color:#96D0FF"> apiModel</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"gateway-model"</span><span style="color:#ADBAC7">, </span><span style="color:#768390">// on-wire id exposed by the gateway</span></span>
|
|
316
|
-
<span class="line"><span style="color:#96D0FF"> reasoning</span><span style="color:#ADBAC7">: { </span><span style="color:#96D0FF">effort</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"xhigh"</span><span style="color:#ADBAC7"> }, </span><span style="color:#768390">// or null to clear the bundled effort</span></span>
|
|
317
|
-
<span class="line"><span style="color:#96D0FF"> inputLimit</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">1050000</span><span style="color:#ADBAC7">,</span></span>
|
|
318
|
-
<span class="line"><span style="color:#96D0FF"> pricing</span><span style="color:#ADBAC7">: { </span><span style="color:#96D0FF">inputPerToken</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">0.000005</span><span style="color:#ADBAC7">, </span><span style="color:#96D0FF">outputPerToken</span><span style="color:#ADBAC7">: </span><span style="color:#6CB6FF">0.00003</span><span style="color:#ADBAC7"> },</span></span>
|
|
319
|
-
<span class="line"><span style="color:#ADBAC7"> },</span></span>
|
|
320
|
-
<span class="line"><span style="color:#ADBAC7"> },</span></span>
|
|
321
|
-
<span class="line"><span style="color:#ADBAC7">}</span></span></code></pre>
|
|
322
|
-
<h2 id="project-configs"><a class="anchor" href="#project-configs" aria-label="Anchor link">#</a>Project configs</h2>
|
|
323
|
-
<p>Put a project-level config at <code>.oracle/config.json</code> inside any project folder:</p>
|
|
324
|
-
<pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-json5"><span class="line"><span style="color:#ADBAC7">{</span></span>
|
|
325
|
-
<span class="line"><span style="color:#96D0FF"> engine</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"browser"</span><span style="color:#ADBAC7">,</span></span>
|
|
326
|
-
<span class="line"><span style="color:#96D0FF"> model</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"gpt-5.5-pro"</span><span style="color:#ADBAC7">,</span></span>
|
|
327
|
-
<span class="line"><span style="color:#96D0FF"> browser</span><span style="color:#ADBAC7">: {</span></span>
|
|
328
|
-
<span class="line"><span style="color:#96D0FF"> chatgptUrl</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"https://chatgpt.com/g/g-p-example/project"</span><span style="color:#ADBAC7">,</span></span>
|
|
329
|
-
<span class="line"><span style="color:#96D0FF"> modelStrategy</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"current"</span><span style="color:#ADBAC7">,</span></span>
|
|
330
|
-
<span class="line"><span style="color:#96D0FF"> archiveConversations</span><span style="color:#ADBAC7">: </span><span style="color:#96D0FF">"never"</span><span style="color:#ADBAC7">,</span></span>
|
|
331
|
-
<span class="line"><span style="color:#ADBAC7"> },</span></span>
|
|
332
|
-
<span class="line"><span style="color:#ADBAC7">}</span></span></code></pre>
|
|
333
|
-
<p>Oracle discovers every <code>.oracle/config.json</code> from the current directory upward until your home directory, then applies them from parent to child after the user config. Nested objects are merged, while scalars and arrays replace earlier values. This lets a parent folder set broad defaults and override a specific ChatGPT Project URL in a package subdirectory.</p>
|
|
334
|
-
<p>Project configs intentionally support only workflow defaults. They cannot set provider routing or secret/executable fields such as <code>apiBaseUrl</code>, <code>modelOverrides</code>, <code>azure</code>, <code>browser.remoteHost</code>, <code>browser.remoteToken</code>, <code>browser.chromePath</code>, or <code>browser.chromeCookiePath</code>. Keep tokens and machine-local executable/profile paths in <code>~/.oracle/config.json</code>, environment variables, or explicit CLI flags.</p>
|
|
335
|
-
<h2 id="precedence"><a class="anchor" href="#precedence" aria-label="Anchor link">#</a>Precedence</h2>
|
|
336
|
-
<p>CLI flags and explicit override environment variables → effective config (project <code>.oracle/config.json</code> files over <code>~/.oracle/config.json</code>) → auto-detected environment → built-in defaults.</p>
|
|
337
|
-
<ul>
|
|
338
|
-
<li>The effective config starts with <code>~/.oracle/config.json</code>, then layers project <code>.oracle/config.json</code> files from parent to child. <code>engine</code>, <code>model</code>, <code>search</code>, <code>filesReport</code>, <code>heartbeatSeconds</code>, <code>maxFileSizeBytes</code>, and <code>apiBaseUrl</code> in the effective config override auto-detected values unless explicitly set on the CLI or through a supported override environment variable.</li>
|
|
339
|
-
<li>Project <code>.oracle/config.json</code> files can override safe workflow defaults such as <code>engine</code>, <code>model</code>, <code>search</code>, <code>filesReport</code>, <code>heartbeatSeconds</code>, <code>maxFileSizeBytes</code>, <code>promptSuffix</code>, and allowed <code>browser.*</code> workflow settings.</li>
|
|
340
|
-
<li>Provider routing and machine-local fields (<code>apiBaseUrl</code>, <code>modelOverrides</code>, <code>azure</code>, remote browser host/token defaults, Chrome binary/profile paths, cookie DB paths, cookie-sync opt-ins, and session retention cleanup) are ignored in project configs and are read only from the user config, environment variables, or explicit CLI flags.</li>
|
|
341
|
-
<li><code>ORACLE_ENGINE=api|browser</code> is a global override for engine selection (useful for MCP/Codex setups); it wins over <code>config.json</code>.</li>
|
|
342
|
-
<li>If <code>azure.endpoint</code> (or <code>--azure-endpoint</code>) is set, Oracle reads <code>AZURE_OPENAI_API_KEY</code> first and falls back to <code>OPENAI_API_KEY</code> for GPT models.</li>
|
|
343
|
-
<li>Remote browser defaults follow the same order: <code>--remote-host/--remote-token</code> win, then <code>browser.remoteHost</code> / <code>browser.remoteToken</code> in the config, then <code>ORACLE_REMOTE_HOST</code> / <code>ORACLE_REMOTE_TOKEN</code> if still unset.</li>
|
|
344
|
-
<li><code>OPENAI_API_KEY</code> only influences engine selection when neither the CLI nor <code>config.json</code> specify an engine (API when present, otherwise browser).</li>
|
|
345
|
-
<li><code>modelOverrides</code> applies only to API runs and existing built-in model keys. It can replace the on-wire <code>apiModel</code>, reasoning effort, input limit, and per-token pricing; unspecified fields and the bundled tokenizer remain unchanged. Invalid override values are ignored. Project configs cannot set this field.</li>
|
|
346
|
-
<li><code>ORACLE_NOTIFY*</code> env vars still layer on top of the config’s <code>notify</code> block.</li>
|
|
347
|
-
<li><code>sessionRetentionHours</code> controls the default value for <code>--retain-hours</code>. When unset, <code>ORACLE_RETAIN_HOURS</code> (if present) becomes the fallback, and the CLI flag still wins over both.</li>
|
|
348
|
-
<li><code>ORACLE_MAX_FILE_SIZE_BYTES</code> overrides <code>maxFileSizeBytes</code> when set. Oracle validates it as a positive integer number of bytes before reading any <code>--file</code> inputs.</li>
|
|
349
|
-
<li><code>browser.chatgptUrl</code> accepts either the root ChatGPT URL (<code>https://chatgpt.com/</code>) or a folder/workspace URL (e.g., <code>https://chatgpt.com/g/.../project</code>); <code>browser.url</code> remains as a legacy alias.</li>
|
|
350
|
-
<li>Browser automation defaults can be set under <code>browser.*</code>, including <code>browser.manualLogin</code>, <code>browser.manualLoginProfileDir</code>, <code>browser.attachRunning</code>, <code>browser.thinkingTime</code> (CLI override: <code>--browser-thinking-time</code>), and <code>browser.researchMode</code> (CLI override: <code>--browser-research</code>). On Windows, <code>browser.manualLogin</code> defaults to <code>true</code> when omitted.</li>
|
|
351
|
-
</ul>
|
|
352
|
-
<p>If the config is missing or invalid, Oracle falls back to defaults and prints a warning for parse errors.</p>
|
|
353
|
-
<p>Chromium-based browsers usually need both <code>chromePath</code> (binary) and <code>chromeCookiePath</code> (cookie DB) set so automation can launch the right executable and reuse your login. See <a href="chromium-forks.html">docs/chromium-forks.md</a> for detailed paths per browser/OS.</p>
|
|
354
|
-
<h2 id="session-retention"><a class="anchor" href="#session-retention" aria-label="Anchor link">#</a>Session retention</h2>
|
|
355
|
-
<p>Each invocation can optionally prune cached sessions before starting new work:</p>
|
|
356
|
-
<ul>
|
|
357
|
-
<li><code>--retain-hours <n></code> deletes sessions older than <code><n></code> hours right before the run begins. Use <code>0</code> (or omit the flag) to skip pruning.</li>
|
|
358
|
-
<li>In <code>config.json</code>, set <code>sessionRetentionHours</code> to apply pruning automatically for every CLI/TUI/MCP invocation.</li>
|
|
359
|
-
<li>Set <code>ORACLE_RETAIN_HOURS</code> in the environment to override the config on shared machines without editing the JSON file.</li>
|
|
360
|
-
</ul>
|
|
361
|
-
<p>Under the hood, pruning removes entire session directories (metadata + logs). The command-line cleanup command (<code>oracle session --clear</code>) still exists when you need to wipe everything manually.</p>
|
|
362
|
-
<h2 id="follow-up-chaining"><a class="anchor" href="#follow-up-chaining" aria-label="Anchor link">#</a>Follow-up chaining</h2>
|
|
363
|
-
<p><code>--followup</code> and <code>--followup-model</code> are CLI run flags (not persisted defaults in <code>config.json</code>).</p>
|
|
364
|
-
<ul>
|
|
365
|
-
<li><code>--followup <sessionId|responseId></code> continues a saved ChatGPT browser conversation or an OpenAI/Azure Responses API run. Browser followup reopens the exact conversation and inherits the parent's browser profile, configuration, and model; API followup accepts a stored Oracle session id or a <code>resp_...</code> Responses API id.</li>
|
|
366
|
-
<li>For multi-model OpenAI/Azure parent sessions, add <code>--followup-model <model></code> to choose which parent model response to chain from.</li>
|
|
367
|
-
<li>Gemini/Claude API runs and custom <code>--base-url</code> providers are intentionally excluded because Oracle cannot preserve <code>previous_response_id</code> through those adapters.</li>
|
|
368
|
-
<li>If the session id is wrong, Oracle now prints actionable guidance and suggests close matches from local session history.</li>
|
|
369
|
-
</ul>
|
|
370
|
-
<p>Example:</p>
|
|
371
|
-
<pre class="shiki github-dark-dimmed" style="background-color:var(--code-bg);color:var(--code-fg)" tabindex="0"><code class="language-bash"><span class="line"><span style="color:#F69D50">oracle</span><span style="color:#F47067"> \</span></span>
|
|
372
|
-
<span class="line"><span style="color:#6CB6FF"> --engine</span><span style="color:#96D0FF"> api</span><span style="color:#F47067"> \</span></span>
|
|
373
|
-
<span class="line"><span style="color:#6CB6FF"> --model</span><span style="color:#96D0FF"> gpt-5.2-pro</span><span style="color:#F47067"> \</span></span>
|
|
374
|
-
<span class="line"><span style="color:#6CB6FF"> --followup</span><span style="color:#96D0FF"> release-readiness-audit</span><span style="color:#F47067"> \</span></span>
|
|
375
|
-
<span class="line"><span style="color:#6CB6FF"> --followup-model</span><span style="color:#96D0FF"> gpt-5.2-pro</span><span style="color:#F47067"> \</span></span>
|
|
376
|
-
<span class="line"><span style="color:#6CB6FF"> -p</span><span style="color:#96D0FF"> "Follow-up: revise the plan with these files."</span><span style="color:#F47067"> \</span></span>
|
|
377
|
-
<span class="line"><span style="color:#6CB6FF"> --file</span><span style="color:#96D0FF"> "src/**/*.ts"</span></span></code></pre>
|
|
378
|
-
<h2 id="api-timeouts"><a class="anchor" href="#api-timeouts" aria-label="Anchor link">#</a>API timeouts</h2>
|
|
379
|
-
<ul>
|
|
380
|
-
<li><code>--timeout <seconds|duration|auto></code> controls the overall API deadline for a run. Bare numbers are seconds; duration values such as <code>10m</code> and <code>2h</code> are supported.</li>
|
|
381
|
-
<li><code>--http-timeout <ms|s|m|h></code> overrides the HTTP client timeout for API requests. If omitted, explicit <code>--timeout</code> values are reused for transport.</li>
|
|
382
|
-
<li>Explicit <code>--timeout</code> values also set the stale-session cutoff unless <code>--zombie-timeout</code> is provided.</li>
|
|
383
|
-
<li>Defaults: <code>auto</code> = 60 m for Pro models; non-pro API models use <code>120s</code> if you don’t set a value.</li>
|
|
384
|
-
<li>Heartbeat messages print the live remaining time so you can see when the client-side deadline will fire.</li>
|
|
385
|
-
</ul>
|
|
386
|
-
<h2 id="zombie-session-staleness"><a class="anchor" href="#zombie-session-staleness" aria-label="Anchor link">#</a>Zombie/session staleness</h2>
|
|
387
|
-
<ul>
|
|
388
|
-
<li><code>--zombie-timeout <ms|s|m|h></code> overrides the stale-session cutoff used by <code>oracle status</code>.</li>
|
|
389
|
-
<li><code>--zombie-last-activity</code> uses last log activity instead of start time to detect stale sessions.</li>
|
|
390
|
-
</ul>
|
|
391
|
-
<h2 id="performance-traces"><a class="anchor" href="#performance-traces" aria-label="Anchor link">#</a>Performance traces</h2>
|
|
392
|
-
<ul>
|
|
393
|
-
<li><code>--perf-trace</code> writes a JSON timing trace with startup, first output, root command, and exit marks.</li>
|
|
394
|
-
<li><code>--perf-trace-path /tmp/oracle.json</code> or <code>--perf-trace=/tmp/oracle.json</code> writes to an explicit path.</li>
|
|
395
|
-
<li><code>ORACLE_PERF_TRACE=1</code> writes <code>.oracle-perf-<timestamp>-<pid>.json</code> in the current directory.</li>
|
|
396
|
-
<li><code>ORACLE_PERF_TRACE=/tmp/oracle.json</code> writes to an explicit path.</li>
|
|
397
|
-
<li>Trace args are secret-safe: prompt text, tokens, cookie payloads, inline cookies, and API key-like values are redacted.</li>
|
|
398
|
-
<li>Detached API runs write a session-suffixed child trace beside the requested trace path so startup and background execution can be inspected separately.</li>
|
|
399
|
-
<li>Useful events: <code>cli-module-ready</code>, <code>pre-action</code>, <code>root-command-start</code>, <code>first-output</code>, <code>command-action-complete</code>, and <code>exit</code>.</li>
|
|
400
|
-
</ul><nav class="page-nav" aria-label="Pager"><a class="page-nav-prev" href="quickstart.html"><small>Previous</small><span>Quickstart</span></a><a class="page-nav-next" href="mythical-pro-agents.html"><small>Next</small><span>Mythical Pro Agents</span></a></nav></article>
|
|
401
|
-
<nav class="toc" aria-label="On this page"><h2>On this page</h2><a class="toc-l2" href="#example-oracle-config-json">Example (~/.oracle/config.json)</a><a class="toc-l2" href="#project-configs">Project configs</a><a class="toc-l2" href="#precedence">Precedence</a><a class="toc-l2" href="#session-retention">Session retention</a><a class="toc-l2" href="#follow-up-chaining">Follow-up chaining</a><a class="toc-l2" href="#api-timeouts">API timeouts</a><a class="toc-l2" href="#zombie-session-staleness">Zombie/session staleness</a><a class="toc-l2" href="#performance-traces">Performance traces</a></nav>
|
|
402
|
-
</div>
|
|
403
|
-
</main>
|
|
404
|
-
</div>
|
|
405
|
-
<script>
|
|
406
|
-
const themeRoot=document.documentElement;
|
|
407
|
-
function applyTheme(mode){themeRoot.dataset.theme=mode;document.querySelectorAll('[data-theme-toggle]').forEach(b=>b.setAttribute('aria-pressed',mode==='dark'?'true':'false'))}
|
|
408
|
-
function storedTheme(){try{return localStorage.getItem('theme')}catch(e){return null}}
|
|
409
|
-
function persistTheme(mode){try{localStorage.setItem('theme',mode)}catch(e){}}
|
|
410
|
-
applyTheme(themeRoot.dataset.theme==='dark'?'dark':'light');
|
|
411
|
-
document.querySelectorAll('[data-theme-toggle]').forEach(btn=>{btn.addEventListener('click',()=>{const next=themeRoot.dataset.theme==='dark'?'light':'dark';applyTheme(next);persistTheme(next)})});
|
|
412
|
-
const systemDark=window.matchMedia&&matchMedia('(prefers-color-scheme: dark)');
|
|
413
|
-
function onSystemChange(e){if(storedTheme())return;applyTheme(e.matches?'dark':'light')}
|
|
414
|
-
if(systemDark){if(systemDark.addEventListener)systemDark.addEventListener('change',onSystemChange);else if(systemDark.addListener)systemDark.addListener(onSystemChange)}
|
|
415
|
-
const sidebar=document.querySelector('.sidebar');
|
|
416
|
-
const toggle=document.querySelector('.nav-toggle');
|
|
417
|
-
const mobileNav=window.matchMedia('(max-width: 900px)');
|
|
418
|
-
const sidebarFocusable='a[href],button,input,select,textarea,[tabindex]';
|
|
419
|
-
function setSidebarFocusable(enabled){
|
|
420
|
-
sidebar?.querySelectorAll(sidebarFocusable).forEach((el)=>{
|
|
421
|
-
if(enabled){
|
|
422
|
-
if(el.dataset.sidebarTabindex!==undefined){
|
|
423
|
-
if(el.dataset.sidebarTabindex)el.setAttribute('tabindex',el.dataset.sidebarTabindex);
|
|
424
|
-
else el.removeAttribute('tabindex');
|
|
425
|
-
delete el.dataset.sidebarTabindex;
|
|
426
|
-
}
|
|
427
|
-
}else if(el.dataset.sidebarTabindex===undefined){
|
|
428
|
-
el.dataset.sidebarTabindex=el.getAttribute('tabindex')??'';
|
|
429
|
-
el.setAttribute('tabindex','-1');
|
|
430
|
-
}
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
function setSidebarOpen(open){
|
|
434
|
-
if(!sidebar||!toggle)return;
|
|
435
|
-
sidebar.classList.toggle('open',open);
|
|
436
|
-
toggle.setAttribute('aria-expanded',open?'true':'false');
|
|
437
|
-
if(mobileNav.matches){
|
|
438
|
-
sidebar.inert=!open;
|
|
439
|
-
if(open)sidebar.removeAttribute('aria-hidden');
|
|
440
|
-
else sidebar.setAttribute('aria-hidden','true');
|
|
441
|
-
setSidebarFocusable(open);
|
|
442
|
-
}else{
|
|
443
|
-
sidebar.inert=false;
|
|
444
|
-
sidebar.removeAttribute('aria-hidden');
|
|
445
|
-
setSidebarFocusable(true);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
setSidebarOpen(false);
|
|
449
|
-
toggle?.addEventListener('click',()=>setSidebarOpen(!sidebar?.classList.contains('open')));
|
|
450
|
-
document.addEventListener('click',(e)=>{if(!sidebar?.classList.contains('open'))return;if(sidebar.contains(e.target)||toggle?.contains(e.target))return;setSidebarOpen(false)});
|
|
451
|
-
document.addEventListener('keydown',(e)=>{if(e.key==='Escape')setSidebarOpen(false)});
|
|
452
|
-
const syncSidebarForViewport=()=>setSidebarOpen(sidebar?.classList.contains('open')??false);
|
|
453
|
-
if(mobileNav.addEventListener)mobileNav.addEventListener('change',syncSidebarForViewport);
|
|
454
|
-
else mobileNav.addListener?.(syncSidebarForViewport);
|
|
455
|
-
const input=document.getElementById('doc-search');
|
|
456
|
-
input?.addEventListener('input',()=>{const q=input.value.trim().toLowerCase();document.querySelectorAll('nav section').forEach(sec=>{let any=false;sec.querySelectorAll('.nav-link').forEach(a=>{const m=!q||a.textContent.toLowerCase().includes(q);a.style.display=m?'block':'none';if(m)any=true});sec.style.display=any?'block':'none'})});
|
|
457
|
-
function attachCopy(target,getText){const btn=document.createElement('button');btn.type='button';btn.className='copy';btn.textContent='Copy';btn.addEventListener('click',async()=>{try{await navigator.clipboard.writeText(getText());btn.textContent='Copied';btn.classList.add('copied');setTimeout(()=>{btn.textContent='Copy';btn.classList.remove('copied')},1400)}catch{btn.textContent='Failed';setTimeout(()=>{btn.textContent='Copy'},1400)}});target.appendChild(btn)}
|
|
458
|
-
document.querySelectorAll('.doc pre').forEach(pre=>attachCopy(pre,()=>pre.querySelector('code')?.textContent??''));
|
|
459
|
-
document.querySelectorAll('.home-install').forEach(el=>attachCopy(el,()=>el.querySelector('code')?.textContent??''));
|
|
460
|
-
const tocLinks=document.querySelectorAll('.toc a');
|
|
461
|
-
if(tocLinks.length){const map=new Map();tocLinks.forEach(a=>{const id=a.getAttribute('href').slice(1);const el=document.getElementById(id);if(el)map.set(el,a)});const setActive=l=>{tocLinks.forEach(x=>x.classList.remove('active'));l.classList.add('active')};const obs=new IntersectionObserver(entries=>{const visible=entries.filter(e=>e.isIntersecting).sort((a,b)=>a.boundingClientRect.top-b.boundingClientRect.top);if(visible.length){const link=map.get(visible[0].target);if(link)setActive(link)}},{rootMargin:'-15% 0px -65% 0px',threshold:0});map.forEach((_,el)=>obs.observe(el))}
|
|
462
|
-
</script>
|
|
463
|
-
</body>
|
|
464
|
-
</html>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="oracle">
|
|
2
|
-
<defs>
|
|
3
|
-
<radialGradient id="orb" cx="35%" cy="32%" r="65%">
|
|
4
|
-
<stop offset="0" stop-color="#ffffff"/>
|
|
5
|
-
<stop offset="0.18" stop-color="#e0d4ff"/>
|
|
6
|
-
<stop offset="0.55" stop-color="#7c3aed"/>
|
|
7
|
-
<stop offset="1" stop-color="#1e1240"/>
|
|
8
|
-
</radialGradient>
|
|
9
|
-
</defs>
|
|
10
|
-
<rect width="64" height="64" rx="14" fill="#0c0a1a"/>
|
|
11
|
-
<circle cx="32" cy="32" r="20" fill="url(#orb)"/>
|
|
12
|
-
<circle cx="32" cy="32" r="5.6" fill="#0c0820"/>
|
|
13
|
-
<circle cx="38.5" cy="26.5" r="2.4" fill="#ffffff" opacity="0.85"/>
|
|
14
|
-
</svg>
|