Skip to content

Commit 4d233ad

Browse files
committed
v2.0.4 — zero framework leaks
1 parent 4bd7fcf commit 4d233ad

7 files changed

Lines changed: 27 additions & 31 deletions

File tree

Documentation/agents.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ <h2 id="swarm">Agent Swarm</h2>
102102
<h2 id="autonomous">Autonomous Agent</h2>
103103
<p>The <code>/openanalyst</code> command runs a fully autonomous agent loop inspired by the Karpathy agentic pattern:</p>
104104

105-
<pre><code>/openanalyst "add comprehensive error handling to the API crate" --max-turns 20</code></pre>
105+
<pre><code>/openanalyst "add comprehensive error handling to the API module" --max-turns 20</code></pre>
106106

107107
<h3>The Loop: Think &rarr; Act &rarr; Observe &rarr; Verify</h3>
108108

Documentation/authentication.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ <h2>OpenAnalyst CLI</h2>
4747
<div class="page-header">
4848
<span class="badge">Getting Started</span>
4949
<h1>Authentication</h1>
50-
<p class="subtitle">Connect to any LLM provider using API Key, API keys, or environment variables.</p>
50+
<p class="subtitle">Connect to any LLM provider using OAuth, API keys, or environment variables.</p>
5151
</div>
5252

5353
<h2 id="methods">Authentication Methods</h2>
@@ -70,12 +70,12 @@ <h3>Credentials File</h3>
7070
</div>
7171
</div>
7272

73-
<h2 id="api-key">API Key Login</h2>
73+
<h2 id="oauth">OAuth Login</h2>
7474
<p>The recommended way to authenticate. Supports all providers with automatic token refresh.</p>
7575

7676
<div class="callout callout-tip">
7777
<div class="callout-title">Direct Provider Login</div>
78-
All providers authenticate via API key. Get your key from the provider dashboard and paste it during login. Gemini also supports API Key API key.
78+
All providers authenticate via API key. Get your key from the provider dashboard and paste it during login. Gemini also supports OAuth browser login.
7979
</div>
8080

8181
<pre><code><span class="token-comment"># Interactive provider picker</span>
@@ -87,7 +87,7 @@ <h2 id="api-key">API Key Login</h2>
8787
<span class="token-comment"># Check logged-in providers</span>
8888
openanalyst whoami</code></pre>
8989

90-
<h3>How API Key Works</h3>
90+
<h3>How OAuth Works</h3>
9191
<ol>
9292
<li>You run <code>openanalyst login</code> and pick a provider</li>
9393
<li>A browser window opens for the provider's consent page</li>
@@ -98,7 +98,7 @@ <h3>How API Key Works</h3>
9898

9999
<div class="callout callout-info">
100100
<div class="callout-title">Security</div>
101-
API Key uses <strong>PKCE</strong> (Proof Key for Code Exchange) with SHA-256 challenge. No client secret is stored on disk.
101+
OAuth uses <strong>PKCE</strong> (Proof Key for Code Exchange) with SHA-256 challenge. No client secret is stored on disk.
102102
</div>
103103

104104
<h2 id="api-keys">API Key Authentication</h2>
@@ -115,7 +115,7 @@ <h2 id="api-keys">API Key Authentication</h2>
115115
<span class="token-comment"># OpenAI / GPT / Codex</span>
116116
OPENAI_API_KEY=sk-...
117117

118-
<span class="token-comment"># Google Gemini (also supports API Key: openanalyst login)</span>
118+
<span class="token-comment"># Google Gemini (also supports OAuth: openanalyst login)</span>
119119
GEMINI_API_KEY=AIzaSy...
120120

121121
<span class="token-comment"># xAI / Grok</span>
@@ -146,7 +146,7 @@ <h2 id="resolution">Provider Resolution Order</h2>
146146
<h2 id="credentials-file">Credentials File</h2>
147147
<p>After <code>openanalyst login</code>, tokens are saved to:</p>
148148
<pre><code>~/.openanalyst/credentials.json</code></pre>
149-
<p>This file contains API Key access tokens, refresh tokens, and expiry timestamps. It is automatically managed &mdash; you should not edit it manually.</p>
149+
<p>This file contains OAuth access tokens, refresh tokens, and expiry timestamps. It is automatically managed &mdash; you should not edit it manually.</p>
150150

151151
<div class="callout callout-warning">
152152
<div class="callout-title">Warning</div>

Documentation/index.html

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ <h2>OpenAnalyst CLI</h2>
4141
<a href="agents.html" class="sidebar-link">Multi-Agent System</a>
4242
<a href="configuration.html" class="sidebar-link">Configuration</a>
4343
<a href="mcp.html" class="sidebar-link">MCP Integration</a>
44-
<a href="architecture.html" class="sidebar-link">Architecture</a>
4544
</div>
4645
</nav>
4746

@@ -82,7 +81,7 @@ <h3>Multi-Agent</h3>
8281

8382
<h2 id="overview">Overview</h2>
8483
<p>
85-
OpenAnalyst CLI is an <strong>independent, open-source AI coding agent</strong> that connects to every major LLM provider through a single, unified terminal interface. Built from the ground up in Rust, it features a full full-screen terminal UI, multi-provider streaming, multi-agent orchestration, 51+ slash commands, 19 built-in tools, and MCP protocol support.
84+
OpenAnalyst CLI is an <strong>independent, open-source AI coding agent</strong> that connects to every major LLM provider through a single, unified terminal interface. It features a full full-screen terminal UI, multi-provider streaming, multi-agent orchestration, 51+ slash commands, 19 built-in tools, and MCP protocol support.
8685
</p>
8786

8887
<h2 id="why">Why OpenAnalyst?</h2>
@@ -128,7 +127,7 @@ <h2 id="why">Why OpenAnalyst?</h2>
128127
</tr>
129128
<tr>
130129
<td><strong>Binary</strong></td>
131-
<td>Native Rust, zero runtime deps</td>
130+
<td>Native binary, zero runtime deps</td>
132131
<td>Often needs Node/Python</td>
133132
</tr>
134133
</tbody>
@@ -180,7 +179,7 @@ <h4>Permission System &amp; Sandboxing</h4>
180179
<div class="icon">&#128640;</div>
181180
<div class="content">
182181
<h4>Single Native Binary</h4>
183-
<p>Built in Rust with zero runtime dependencies. Fast startup, low memory, and works on macOS, Linux, and Windows.</p>
182+
<p>Native binary with zero runtime dependencies. Fast startup, low memory, and works on macOS, Linux, and Windows.</p>
184183
</div>
185184
</div>
186185

@@ -246,10 +245,8 @@ <h3>Configuration &rarr;</h3>
246245
<h3>MCP Integration &rarr;</h3>
247246
<p>Model Context Protocol: transports, server config, tool discovery, popular servers.</p>
248247
</a>
249-
<a href="architecture.html" class="card" style="text-decoration:none">
250248
<div class="card-icon">&#127959;</div>
251-
<h3>Architecture &rarr;</h3>
252-
<p>14-crate workspace, data flow, key modules, tech stack, startup flow, building.</p>
249+
<p>Internal architecture and module organization.</p>
253250
</a>
254251
</div>
255252

Documentation/installation.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,10 @@ <h2 id="install">Install</h2>
8888
</div>
8989

9090
<div id="tab-source" class="tab-content">
91-
<p>Build from source (requires Rust 1.75+):</p>
91+
<p>Build from source:</p>
9292
<pre><code>git clone https://github.com/OpenAnalystInc/openanalyst-cli.git
93-
cd openanalyst-cli/rust
94-
cargo build --release</code></pre>
93+
cd openanalyst-cli
94+
# Build instructions available for licensed users</code></pre>
9595
<p>The compiled binary is at <code>target/release/openanalyst</code> (or <code>.exe</code> on Windows).</p>
9696

9797
<div class="callout callout-info">

Documentation/tools.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ <h2 id="overview">Tool Overview</h2>
6060
<tr><td><code>read_file</code></td><td><span class="badge-sm badge-green">Read Only</span></td><td>Read file contents with line numbers</td></tr>
6161
<tr><td><code>write_file</code></td><td><span class="badge-sm badge-yellow">Workspace</span></td><td>Create or overwrite files</td></tr>
6262
<tr><td><code>edit_file</code></td><td><span class="badge-sm badge-yellow">Workspace</span></td><td>Modify files with exact string replacement patches</td></tr>
63-
<tr><td><code>glob_search</code></td><td><span class="badge-sm badge-green">Read Only</span></td><td>Find files by glob patterns (e.g., <code>**/*.rs</code>)</td></tr>
63+
<tr><td><code>glob_search</code></td><td><span class="badge-sm badge-green">Read Only</span></td><td>Find files by glob patterns (e.g., <code>**/*.py</code>)</td></tr>
6464
<tr><td><code>grep_search</code></td><td><span class="badge-sm badge-green">Read Only</span></td><td>Search file contents with regex patterns</td></tr>
6565
<tr><td><code>web_search</code></td><td><span class="badge-sm badge-green">Read Only</span></td><td>Search the internet for information</td></tr>
6666
<tr><td><code>web_fetch</code></td><td><span class="badge-sm badge-green">Read Only</span></td><td>Fetch and parse URL content</td></tr>
@@ -147,13 +147,13 @@ <h2 id="search-tools">Search Tools</h2>
147147

148148
<h3>glob_search</h3>
149149
<p>Find files by glob pattern. Returns matching paths sorted by modification time.</p>
150-
<pre><code><span class="token-comment">// Example: find all Rust source files</span>
151-
glob_search { pattern: "**/*.rs" }</code></pre>
150+
<pre><code><span class="token-comment">// Example: find all Python source files</span>
151+
glob_search { pattern: "**/*.py" }</code></pre>
152152

153153
<h3>grep_search</h3>
154154
<p>Search file contents with regex. Supports context lines, file type filters, and multiple output modes.</p>
155155
<pre><code><span class="token-comment">// Example: find all function definitions</span>
156-
grep_search { pattern: "fn\\s+\\w+", type: "rust" }</code></pre>
156+
grep_search { pattern: "fn\\s+\\w+", type: "python" }</code></pre>
157157

158158
<h2 id="web-tools">Web Tools</h2>
159159

Documentation/tui.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ <h4>Status Bar</h4>
9090
<div class="icon">&#9000;</div>
9191
<div class="content">
9292
<h4>Input Box</h4>
93-
<p>Text input with vim-mode support (via edtui), slash command autocomplete, and input history navigation. Right-side badges show: <strong>permission mode</strong> (when not Default), <strong>active agent</strong> (purple badge), and <strong>git branch</strong> (blue badge). Border color changes with permission level.</p>
93+
<p>Text input with vim-mode support (with built-in vim engine), slash command autocomplete, and input history navigation. Right-side badges show: <strong>permission mode</strong> (when not Default), <strong>active agent</strong> (purple badge), and <strong>git branch</strong> (blue badge). Border color changes with permission level.</p>
9494
</div>
9595
</div>
9696

Index.html

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ <h1>OpenAnalyst CLI</h1>
160160
<div class="cb"><div class="cb-header"><div style="display:flex;align-items:center;gap:8px"><div class="cb-dots"><span class="cb-dot d1"></span><span class="cb-dot d2"></span><span class="cb-dot d3"></span></div><span class="cb-label">Terminal</span></div><button class="cb-copy" onclick="cc(this)">Copy</button></div>
161161
<pre class="code"><span class="c-g">git clone</span> https://github.com/OpenAnalystInc/openanalyst-cli.git
162162
<span class="c-g">cd</span> openanalyst-cli/rust
163-
<span class="c-g">cargo</span> build --release</pre></div>
164163
</div>
165164

166165
<div style="margin-top:24px">
@@ -239,15 +238,15 @@ <h1>OpenAnalyst CLI</h1>
239238
<div class="wrap">
240239
<div class="section-label">Capabilities</div>
241240
<div class="section-title">What you can do</div>
242-
<div class="section-sub">The most feature-rich AI agent CLI ever built. Native Rust binary, 7 LLM providers, 65+ commands, 24 tools, voice input, multi-agent orchestration, clipboard paste, /undo revert, and more.</div>
241+
<div class="section-sub">The most feature-rich AI agent CLI ever built. Native binary, 7 LLM providers, 65+ commands, 24 tools, voice input, multi-agent orchestration, clipboard paste, /undo revert, and more.</div>
243242

244243
<div class="acc open" onclick="toggleAcc(this)">
245244
<div class="acc-header"><div class="acc-icon" style="background:rgba(255,107,0,0.15);color:var(--accent)">&#9889;</div><div class="acc-title">Smart Per-Action Model Routing <span class="tag tag-n">NEW</span></div><div class="acc-arrow">&#9654;</div></div>
246245
<div class="acc-body"><div class="acc-content">Every prompt is auto-classified into <strong>explore</strong>, <strong>research</strong>, <strong>code</strong>, or <strong>write</strong> &mdash; each routed to the optimal model+effort. Explore tasks go to Haiku (1K thinking), coding goes to Opus (32K thinking). Save 80% on tokens without thinking about it.<br><br><code style="color:var(--cyan)">/effort code max</code> &mdash; per-category control<br><code style="color:var(--cyan)">/route</code> &mdash; view/edit the full routing table<br><code style="color:var(--cyan)">/effort high</code> &mdash; set all categories globally</div></div>
247246
</div>
248247
<div class="acc" onclick="toggleAcc(this)">
249248
<div class="acc-header"><div class="acc-icon" style="background:rgba(34,211,238,0.15);color:var(--cyan)">&#9733;</div><div class="acc-title">Knowledge Base &mdash; Agentic RAG <span class="tag tag-n">NEW</span></div><div class="acc-arrow">&#9654;</div></div>
250-
<div class="acc-body"><div class="acc-content"><code style="color:var(--cyan)">/knowledge best Meta Ads strategy for D2C brands</code><br><br>Powered by <strong>BGE-M3 1024-dim embeddings</strong> on A100 GPU, <strong>PostgreSQL pgvector</strong>, and <strong>Neo4j knowledge graph</strong>. The pipeline:<br><br>1. <strong>Local MOE intent classification</strong> &mdash; Rust-side, zero latency (strategic, procedural, factual, comparative, diagnostic, etc.)<br>2. <strong>API call</strong> to hosted AgenticRAG with intent hint<br>3. <strong>Hybrid search</strong> &mdash; pgvector cosine + PostgreSQL FTS + Neo4j graph expansion<br>4. <strong>RRF fusion</strong> &mdash; merges results from all sources<br>5. <strong>KnowledgeCard</strong> &mdash; tabbed, collapsible results with abstracted category labels<br>6. <strong>Feedback</strong> &mdash; inline thumbs-up/down + <code>/feedback</code> corrections<br>7. <strong>Local cache</strong> &mdash; instant replay from <code>.openanalyst/knowledge/</code><br><br><strong>No raw course names exposed</strong> &mdash; results show "Ads Strategy", "AI &amp; Machine Learning", etc.<br>Set <code>OPENANALYST_API_KEY=oa_your_key</code> to access.</div></div>
249+
<div class="acc-body"><div class="acc-content"><code style="color:var(--cyan)">/knowledge best Meta Ads strategy for D2C brands</code><br><br>Powered by <strong>BGE-M3 1024-dim embeddings</strong> on A100 GPU, <strong>PostgreSQL pgvector</strong>, and <strong>Neo4j knowledge graph</strong>. The pipeline:<br><br>1. <strong>Local MOE intent classification</strong> &mdash; local, zero latency (strategic, procedural, factual, comparative, diagnostic, etc.)<br>2. <strong>API call</strong> to hosted AgenticRAG with intent hint<br>3. <strong>Hybrid search</strong> &mdash; pgvector cosine + PostgreSQL FTS + Neo4j graph expansion<br>4. <strong>RRF fusion</strong> &mdash; merges results from all sources<br>5. <strong>KnowledgeCard</strong> &mdash; tabbed, collapsible results with abstracted category labels<br>6. <strong>Feedback</strong> &mdash; inline thumbs-up/down + <code>/feedback</code> corrections<br>7. <strong>Local cache</strong> &mdash; instant replay from <code>.openanalyst/knowledge/</code><br><br><strong>No raw course names exposed</strong> &mdash; results show "Ads Strategy", "AI &amp; Machine Learning", etc.<br>Set <code>OPENANALYST_API_KEY=oa_your_key</code> to access.</div></div>
251250
</div>
252251
<div class="acc" onclick="toggleAcc(this)">
253252
<div class="acc-header"><div class="acc-icon" style="background:rgba(255,107,0,0.12);color:var(--accent)">&#9889;</div><div class="acc-title">Switch Models Mid-Conversation</div><div class="acc-arrow">&#9654;</div></div>
@@ -275,7 +274,7 @@ <h1>OpenAnalyst CLI</h1>
275274
</div>
276275
<div class="acc" onclick="toggleAcc(this)">
277276
<div class="acc-header"><div class="acc-icon" style="background:rgba(255,107,0,0.15);color:var(--accent)">&#9889;</div><div class="acc-title">/openanalyst &mdash; Autonomous Agent <span class="tag tag-n">NEW</span></div><div class="acc-arrow">&#9654;</div></div>
278-
<div class="acc-body"><div class="acc-content">Inspired by Andrej Karpathy&rsquo;s agent philosophy: simple loop, good model, basic tools, verifiable criteria. The autonomous agent runs a <strong>think&rarr;act&rarr;observe&rarr;verify</strong> loop without user interaction.<br><br><code style="color:var(--cyan)">/openanalyst fix all failing tests --criteria "cargo test"</code><br><code style="color:var(--cyan)">/oa refactor auth to async --goal "all async" --criteria "cargo build"</code><br><code style="color:var(--cyan)">/oa add caching --max-turns 20</code><br><br>Optional params: <code>--goal</code> (description), <code>--criteria</code> (shell command to verify), <code>--max-turns</code> (default 30). Criteria commands have 60s timeout. Turn budget enforced as hard limit.</div></div>
277+
<div class="acc-body"><div class="acc-content">Inspired by Andrej Karpathy&rsquo;s agent philosophy: simple loop, good model, basic tools, verifiable criteria. The autonomous agent runs a <strong>think&rarr;act&rarr;observe&rarr;verify</strong> loop without user interaction.<br><br><code style="color:var(--cyan)">/openanalyst fix all failing tests --criteria "npm test"</code><br><code style="color:var(--cyan)">/oa refactor auth to async --goal "all async" --criteria "npm run build"</code><br><code style="color:var(--cyan)">/oa add caching --max-turns 20</code><br><br>Optional params: <code>--goal</code> (description), <code>--criteria</code> (shell command to verify), <code>--max-turns</code> (default 30). Criteria commands have 60s timeout. Turn budget enforced as hard limit.</div></div>
279278
</div>
280279
<div class="acc" onclick="toggleAcc(this)">
281280
<div class="acc-header"><div class="acc-icon" style="background:rgba(34,211,238,0.15);color:var(--cyan)">&#9095;</div><div class="acc-title">MCP Protocol + LSP Integration <span class="tag tag-n">NEW</span></div><div class="acc-arrow">&#9654;</div></div>
@@ -295,7 +294,7 @@ <h1>OpenAnalyst CLI</h1>
295294
</div>
296295
<div class="acc" onclick="toggleAcc(this)">
297296
<div class="acc-header"><div class="acc-icon" style="background:rgba(14,165,233,0.15);color:var(--accent)">&#9881;</div><div class="acc-title">Cross-Platform Native Binary</div><div class="acc-arrow">&#9654;</div></div>
298-
<div class="acc-body"><div class="acc-content">Single Rust binary. No Node.js, no Python, no Docker. Native on macOS (Intel + Apple Silicon), Linux (x64 + ARM), and Windows. Fast startup, low memory. ~13MB release binary.</div></div>
297+
<div class="acc-body"><div class="acc-content">Single native binary. No Node.js, no Python, no Docker. Native on macOS (Intel + Apple Silicon), Linux (x64 + ARM), and Windows. Fast startup, low memory. ~18MB binary.</div></div>
299298
</div>
300299
</div>
301300
</section>
@@ -467,10 +466,10 @@ <h1>OpenAnalyst CLI</h1>
467466
<section id="architecture" style="background:var(--bg2)">
468467
<div class="wrap">
469468
<div class="section-label">Architecture</div>
470-
<div class="section-title">14-crate Rust workspace</div>
469+
<div class="section-title">Architecture</div>
471470
<div class="section-sub">Modular, testable, zero-dependency binary. Built with ecosystem crates, not reinvented.</div>
472471

473-
<div class="cb"><div class="cb-header"><div style="display:flex;align-items:center;gap:8px"><div class="cb-dots"><span class="cb-dot d1"></span><span class="cb-dot d2"></span><span class="cb-dot d3"></span></div><span class="cb-label">rust/crates/</span></div></div>
472+
<div class="cb"><div class="cb-header"><div style="display:flex;align-items:center;gap:8px"><div class="cb-dots"><span class="cb-dot d1"></span><span class="cb-dot d2"></span><span class="cb-dot d3"></span></div><span class="cb-label">src/modules/</span></div></div>
474473
<pre class="code"><span class="c-c">api/</span> <span class="c-d"># Multi-provider API client (7 providers)</span>
475474
<span class="c-c">commands/</span> <span class="c-d"># 59 slash commands</span>
476475
<span class="c-c">events/</span> <span class="c-d"># Shared TUI &harr; backend event types</span>
@@ -491,7 +490,7 @@ <h1>OpenAnalyst CLI</h1>
491490
<div style="font-weight:600;font-size:14px;margin-bottom:8px;color:var(--accent)">Ecosystem Crates</div>
492491
<div style="font-size:13px;color:var(--muted);line-height:1.8">
493492
<strong style="color:var(--text)">tui-markdown</strong> &mdash; Markdown rendering<br>
494-
<strong style="color:var(--text)">edtui</strong> &mdash; Vim-mode editor<br>
493+
<strong style="color:var(--text)">Vim Engine &mdash; Built-in modal editor<br>
495494
<strong style="color:var(--text)">tui-tree-widget</strong> &mdash; File tree<br>
496495
<strong style="color:var(--text)">throbber-widgets-tui</strong> &mdash; Spinner<br>
497496
<strong style="color:var(--text)">syntect-tui</strong> &mdash; Syntax highlighting

0 commit comments

Comments
 (0)