Skip to content

Commit db0d2d3

Browse files
DavidsonGomesclaude
andcommitted
release: v0.14.1 — overview speedup, doc fixes, feature folder path
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent cda10e9 commit db0d2d3

4 files changed

Lines changed: 153 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.14.1] - 2026-04-11
9+
10+
### Fixed
11+
12+
- **`/api/overview` endpoint** — dropped from ~16s to ~29ms (≈500× faster). `_recent_reports` was rglob'ing the entire `workspace/` tree, which on an active install holds vendored third-party repos under `workspace/projects/` (mcp-dev-brasil, oh-my-claudecode, evoai-services, etc.) — 16.853 of 17.116 MD/HTML files (98.5%) lived there and had nothing to do with "recent reports". The scan now skips top-level `projects/` (vendored repos) and `meetings/` (raw Fathom transcripts), iterates remaining areas, and formats the `date` field from the actual `mtime` instead of `path.split("/")[-1][:10]` (which was returning garbage like `"README.md"`).
13+
- **Site typecheck errors**`site/src/pages/Home.tsx` had 3 lucide icons (`MessageSquare`, `GitBranch`, `Database`) passing an invalid `title` prop. Wrapped them in `<span title="...">` to keep the hover tooltip and pass `tsc --noEmit`.
14+
- **Dashboard frontend build**`dashboard/frontend/src/pages/Providers.tsx` was importing `type LucideIcon` without using it, which caused `make dashboard-app` to fail with `TS6133`. Unused import removed.
15+
- **Terminal startup garbage (WIP, 2 attempts included)** — on starting any agent terminal from the dashboard, bytes like `0?1;2c` / `000000` / `^[[0^[[0...` showed up in the prompt and status bar. Root cause is xterm.js auto-replying to terminal queries (DA1 `\x1b[c`, DA2 `\x1b[>c`, DSR `\x1b[5n`/`\x1b[6n`, window ops `\x1b[...t`) via `term.onData`, which the frontend was forwarding to the pty as if it were keyboard input. This release ships two defensive layers — passing `cols`/`rows` upfront on `start_claude` so the pty is born at the right size, and registering CSI handlers via `term.parser.registerCsiHandler({ final: 'c' | 'n' | 't' }, () => true)` to intercept queries at the parser level — plus a regex filter on `onData` as a second line of defense. **The bug is not fully resolved in this release.** Some payloads still slip through (likely via a non-CSI `triggerDataEvent` path that hasn't been pinned down yet). A debug log was added to `AgentTerminal.tsx` to capture the exact bytes in the next iteration.
16+
17+
### Changed
18+
19+
- **Feature folder convention**`workspace/features/{slug}/` is now `workspace/development/features/{slug}/` across all engineering layer prompts (`.claude/rules/dev-phases.md`, `.claude/agents/compass-planner.md`, `.claude/agents/helm-conductor.md`, `.claude/commands/helm-conductor.md`, `.claude/agents/mirror-retro.md`, `docs/agents/engineering-layer.md`). Keeps all engineering artifacts (features, plans, architecture, reviews, verifications, retros) grouped under one development/ root.
20+
21+
### Docs
22+
23+
- **Multi-provider documentation** — README, `docs/introduction.md`, `docs/getting-started.md`, `docs/reference/env-variables.md`, `docs/dashboard/overview.md` updated with the OpenClaude-based multi-provider story introduced in v0.14.0. New `docs/dashboard/providers.md` documents the Providers page (supported providers, activation flow, security model with CLI + env var allowlists, logout warning). Site landing page replaces the "Full Control" feature card with "Multi-Provider, No Lock-In" highlighting the new capability.
24+
825
## [0.14.0] - 2026-04-10
926

1027
### Added

cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@evoapi/evo-nexus",
3-
"version": "0.14.0",
3+
"version": "0.14.1",
44
"description": "Unofficial open source toolkit for Claude Code — AI-powered business operating system",
55
"keywords": [
66
"claude-code",

docs/llms-full.txt

Lines changed: 134 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ Discovery → Planning → Solutioning → Build → Verify → Retro
500500

501501
**Cycle orchestration** — `@helm-conductor` sits above the phases and answers "what next?", "who does it?", and "what's blocked?". Call Helm when you have multiple active features or need sprint sequencing.
502502

503-
**Feature folders** — non-trivial work lives in `workspace/features/{feature-slug}/` where all artifacts of one feature are grouped together. Standalone artifacts continue to live in `workspace/development/{type}/`.
503+
**Feature folders** — non-trivial work lives in `workspace/development/features/{feature-slug}/` where all artifacts of one feature are grouped together. Standalone artifacts continue to live in `workspace/development/{type}/`.
504504

505505
## The 25 `dev-*` Skills
506506

@@ -1971,6 +1971,10 @@ Status board for all 18 integrations. Shows which are connected (green), which n
19711971

19721972
![Integrations](../imgs/doc-integrations.png)
19731973

1974+
### Providers
1975+
1976+
Pick and configure which LLM backend powers EvoNexus — Anthropic (default), or any of 6 alternates via [OpenClaude](https://www.npmjs.com/package/@gitlawb/openclaude): OpenRouter, OpenAI, Gemini, Codex Auth, AWS Bedrock, Vertex AI. Each provider card shows install status (claude vs openclaude), configured/unconfigured flags, and a Test button that runs `<binary> --version` with the merged env. Switching provider takes effect immediately — both the terminal-server and the ADW runner re-read `config/providers.json` on every session spawn, no restart needed. Secrets are masked in the UI and in every API response. See [providers.md](providers.md) for the full reference.
1977+
19741978
### Chat
19751979

19761980
Embedded Claude Code terminal powered by xterm.js + WebSocket. Run Claude Code commands, invoke agents with slash commands, and see output in real time -- all from the browser.
@@ -2028,6 +2032,83 @@ View and edit workspace configuration:
20282032
- **Commands** -- slash command definitions from `.claude/commands/`
20292033

20302034

2035+
---
2036+
2037+
# AI Providers
2038+
2039+
The **Providers** page lets you choose which LLM backend powers EvoNexus, configure its credentials, and test the connection — all from the dashboard. It lives under **System → Providers** in the sidebar and requires the `config:manage` permission.
2040+
2041+
EvoNexus uses Anthropic's `claude` CLI by default. To run on any other backend (OpenRouter, OpenAI, Gemini, AWS Bedrock, Google Vertex AI, Codex Auth), it switches to [OpenClaude](https://www.npmjs.com/package/@gitlawb/openclaude) — a drop-in binary that speaks the same CLI protocol but dispatches to the provider of your choice via environment variables.
2042+
2043+
## Supported Providers
2044+
2045+
| Provider | Binary | Notes |
2046+
|---|---|---|
2047+
| **Anthropic** (default) | `claude` | Native Anthropic auth, no extra config |
2048+
| **OpenRouter** | `openclaude` | 200+ models via one API — Claude, GPT, Gemini, Llama, etc. |
2049+
| **OpenAI** | `openclaude` | GPT-4o, GPT-4.1, o3 via OpenAI API |
2050+
| **Google Gemini** | `openclaude` | Gemini 2.5 Pro/Flash via Google AI |
2051+
| **Codex Auth** | `openclaude` | Reuses Codex CLI's OAuth session to access OpenAI models |
2052+
| **AWS Bedrock** | `openclaude` | Claude via AWS Bedrock |
2053+
| **Google Vertex AI** | `openclaude` | Claude via GCP Vertex AI |
2054+
2055+
## Install OpenClaude (one-time)
2056+
2057+
If you plan to use any non-Anthropic provider, install OpenClaude globally:
2058+
2059+
```bash
2060+
npm install -g @gitlawb/openclaude
2061+
```
2062+
2063+
The Providers page shows a banner at the top indicating whether `claude` and `openclaude` are installed and in `$PATH`. If `openclaude` is missing, the banner shows the install command.
2064+
2065+
## Activating a Provider
2066+
2067+
1. Open **System → Providers** in the sidebar
2068+
2. Click **Configure** on the provider you want to use
2069+
3. Fill in the required fields (API key, base URL, model, region — depending on provider). Secrets are masked in the form and in every API response; placeholders like `sk-...` guide the format
2070+
4. Click **Save & Activate**
2071+
2072+
The active provider is stored in `config/providers.json`. Both the terminal-server and the ADW runner re-read this file on every session spawn, so switching takes effect **immediately** — no restart needed.
2073+
2074+
A green "Active" badge marks the currently selected provider. Every other provider can still be configured and tested without affecting the active one.
2075+
2076+
## Testing a Provider
2077+
2078+
Each provider card has a **Test** button that runs `<binary> --version` with the configured env vars merged into the environment, then reports success or failure inline. This is a sanity check — it verifies that the binary is installed, in `$PATH`, and that the env var injection works. It does **not** validate that your API key actually authenticates against the remote service (use the terminal after activating for that).
2079+
2080+
## Security: Allowlists and Secret Masking
2081+
2082+
Both the Python runner (`ADWs/runner.py`) and the JS terminal bridge (`dashboard/terminal-server/src/claude-bridge.js`) enforce two allowlists when reading `config/providers.json`:
2083+
2084+
- **CLI allowlist** — only `claude` and `openclaude` are accepted as spawn targets. Any other value falls back to `claude`.
2085+
- **Env var allowlist** — only the 13 variables listed in [env-variables.md](../reference/env-variables.md#ai-provider-configuration) are injected. Anything else is silently dropped.
2086+
2087+
The REST API that backs the Providers page masks secrets (`*_KEY`, `*_SECRET`, `*_TOKEN`) as `first6****last4` on every response. When you open the config modal, the form starts empty for those fields — type a new value to replace, or leave empty to keep the current one. Values containing `****` are treated as masked placeholders and skipped on save (so a round-trip through the UI doesn't accidentally overwrite a real secret with the mask string).
2088+
2089+
The backend also rejects any env var value containing shell metacharacters (`;`, `&`, `|`, backtick, `$`, newlines) — defense in depth against injection if someone points EvoNexus at a compromised `providers.json`.
2090+
2091+
## Logout Warning
2092+
2093+
When you switch away from Anthropic to any other provider, OpenClaude inherits your Anthropic Claude Code login state. To avoid confusion, run `/logout` inside Claude Code **once** after activating a non-Anthropic provider if you were previously logged in. The dashboard surfaces this warning on any provider marked `requires_logout`.
2094+
2095+
## Where It's Stored
2096+
2097+
- `config/providers.json` — active provider + per-provider CLI + env vars (**gitignored**, contains secrets)
2098+
- `config/providers.example.json` — template copied on first boot if no real file exists (checked into git)
2099+
- `.env` — unchanged by this feature. AI provider env vars live in `providers.json`, not `.env`
2100+
2101+
## Configuring at Install Time
2102+
2103+
The interactive setup wizard (`make setup`) asks which provider to use as step 3. If you pick anything other than Anthropic, it checks whether OpenClaude is installed, offers to install it, then prompts for the provider-specific keys and saves them to `config/providers.json`. You can re-run the wizard or use the dashboard to change providers later.
2104+
2105+
## Related
2106+
2107+
- [Environment Variables Reference](../reference/env-variables.md#ai-provider-configuration)
2108+
- [Getting Started](../getting-started.md) — step 3 covers provider choice
2109+
- [OpenClaude on npm](https://www.npmjs.com/package/@gitlawb/openclaude)
2110+
2111+
20312112
---
20322113

20332114
# Users and Roles
@@ -2193,16 +2274,32 @@ make setup
21932274
The wizard asks for:
21942275
- Your name and company
21952276
- Timezone and language
2277+
- **Which AI provider to use** (Anthropic by default; alternatives via OpenClaude)
21962278
- Which agents to enable
21972279
- Which integrations to configure
21982280

21992281
It generates:
22002282
- `config/workspace.yaml` — central config
22012283
- `config/routines.yaml` — routine schedules
2284+
- `config/providers.json` — active AI provider + backend CLI config
22022285
- `.env` — API keys (fill in after setup)
22032286
- `CLAUDE.md` — context file for Claude
22042287

2205-
### 2. Configure API Keys
2288+
### 2. Choose Your AI Provider
2289+
2290+
The wizard asks which backend should power EvoNexus. **Anthropic is the default** — if you already have Claude Code authenticated, you don't need to do anything else.
2291+
2292+
For any other provider (OpenRouter, OpenAI, Gemini, AWS Bedrock, Vertex AI, Codex Auth), EvoNexus uses [OpenClaude](https://www.npmjs.com/package/@gitlawb/openclaude), a drop-in binary compatible with the Claude CLI protocol. Install it once:
2293+
2294+
```bash
2295+
npm install -g @gitlawb/openclaude
2296+
```
2297+
2298+
Then select the provider in the wizard (or later from the **Providers** page in the dashboard) and fill in the keys. The active provider is stored in `config/providers.json` and both the terminal-server and the ADW runner re-read it on every session spawn — no restart required when switching.
2299+
2300+
See [docs/dashboard/providers.md](dashboard/providers.md) for the full provider reference and [docs/reference/env-variables.md](reference/env-variables.md#ai-provider-configuration) for all provider-related env vars.
2301+
2302+
### 3. Configure API Keys
22062303

22072304
Edit `.env` with your keys:
22082305

@@ -2216,7 +2313,7 @@ At minimum, you need:
22162313
- `STRIPE_SECRET_KEY` — for financial routines
22172314
- Social OAuth keys — via the dashboard Integrations page
22182315

2219-
### 3. Start the Dashboard
2316+
### 4. Start the Dashboard
22202317

22212318
```bash
22222319
make dashboard-app
@@ -2226,15 +2323,15 @@ Open http://localhost:8080 — the first run shows a setup wizard where you crea
22262323

22272324
![Dashboard](imgs/doc-overview.png)
22282325

2229-
### 4. Start Automated Routines
2326+
### 5. Start Automated Routines
22302327

22312328
```bash
22322329
make scheduler
22332330
```
22342331

22352332
This starts the scheduler that runs routines at their configured times (see `config/routines.yaml`).
22362333

2237-
### 5. Use Claude Code — start with `/oracle`
2334+
### 6. Use Claude Code — start with `/oracle`
22382335

22392336
Open Claude Code in this directory. It reads `CLAUDE.md` automatically and has access to all agents and skills.
22402337

@@ -5603,6 +5700,10 @@ Optional semantic search powered by [MemPalace](https://github.com/milla-jovovic
56035700

56045701
Two-tier persistence. `CLAUDE.md` holds working memory (who you are, active projects, key people). The `memory/` directory stores deeper context (people profiles, glossary, project history). Both survive across sessions.
56055702

5703+
### AI Providers
5704+
5705+
EvoNexus runs on Anthropic's `claude` CLI by default, but can switch to any of 6 alternate LLM backends (OpenRouter, OpenAI, Gemini, AWS Bedrock, Google Vertex AI, Codex Auth) via [OpenClaude](https://www.npmjs.com/package/@gitlawb/openclaude). The active provider is stored in `config/providers.json` and can be changed from the Providers page in the dashboard — both the terminal-server and the ADW runner re-read the config on every session spawn, so switching takes effect immediately. No vendor lock-in, your choice of model, your keys. See [docs/dashboard/providers.md](dashboard/providers.md) for the full reference.
5706+
56065707
## Open Source
56075708

56085709
EvoNexus is MIT-licensed, built by [Evolution Foundation](https://evolutionfoundation.com.br). The source is at [github.com/EvolutionAPI/evo-nexus](https://github.com/EvolutionAPI/evo-nexus). This is an unofficial community project — not affiliated with or endorsed by Anthropic.
@@ -5915,6 +6016,34 @@ The wizard runs `setup.py`, which generates CLAUDE.md inline from `config/worksp
59156016

59166017
All environment variables are defined in `.env` (generated by `make setup`). See `.env.example` for the template.
59176018

6019+
## AI Provider Configuration
6020+
6021+
EvoNexus uses the `claude` CLI by default (Anthropic native auth). To switch to any other backend, the active provider is read from `config/providers.json` — **not from `.env`** directly. The dashboard's Providers page and `make setup` both write to that file.
6022+
6023+
The env vars below are the ones EvoNexus injects into the spawned CLI process based on the active provider. You don't set them in `.env` yourself — they live inside `config/providers.json` under each provider's `env_vars` key, and the terminal-server / ADW runner merge them into the subprocess environment at spawn time. Only the variable names in this allowlist are accepted (both the Python runner and the JS bridge enforce the same list):
6024+
6025+
| Variable | Used by | Description |
6026+
|----------|---------|-------------|
6027+
| `CLAUDE_CODE_USE_OPENAI` | OpenRouter, OpenAI, Codex Auth | Flag telling OpenClaude to dispatch to the OpenAI-compatible protocol |
6028+
| `CLAUDE_CODE_USE_GEMINI` | Gemini | Flag telling OpenClaude to dispatch to Gemini |
6029+
| `CLAUDE_CODE_USE_BEDROCK` | AWS Bedrock | Flag telling OpenClaude to dispatch to Bedrock |
6030+
| `CLAUDE_CODE_USE_VERTEX` | Google Vertex AI | Flag telling OpenClaude to dispatch to Vertex |
6031+
| `OPENAI_BASE_URL` | OpenRouter | Override the API base URL (e.g. `https://openrouter.ai/api/v1`) |
6032+
| `OPENAI_API_KEY` | OpenRouter, OpenAI, Codex Auth | API key for the OpenAI-compatible provider |
6033+
| `OPENAI_MODEL` | OpenRouter, OpenAI | Model identifier (e.g. `anthropic/claude-sonnet-4`, `gpt-4.1`) |
6034+
| `GEMINI_API_KEY` | Gemini | Google AI API key |
6035+
| `GEMINI_MODEL` | Gemini | Model identifier (e.g. `gemini-2.5-pro`) |
6036+
| `AWS_REGION` | Bedrock | AWS region (e.g. `us-east-1`) |
6037+
| `AWS_BEARER_TOKEN_BEDROCK` | Bedrock | Bedrock bearer token (not the standard IAM access key) |
6038+
| `ANTHROPIC_VERTEX_PROJECT_ID` | Vertex AI | GCP project ID |
6039+
| `CLOUD_ML_REGION` | Vertex AI | GCP region (e.g. `us-east5`) |
6040+
6041+
**How to configure**: use the **Providers** page in the dashboard — it reads/writes `config/providers.json` for you, masks secrets in API responses, and has a "Test connection" button that runs `<provider-cli> --version` with the merged env. Alternatively, edit `config/providers.json` directly (it starts as a copy of `config/providers.example.json` on first run).
6042+
6043+
**Anthropic is the default** — when the active provider is `anthropic`, no env vars are injected and the spawned CLI is the native `claude` binary with its own auth. You don't need any of the variables above for the default path.
6044+
6045+
See [docs/dashboard/providers.md](../dashboard/providers.md) for the full provider setup flow.
6046+
59186047
## Omie ERP
59196048

59206049
| Variable | Required | Description |

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "evo-nexus"
3-
version = "0.14.0"
3+
version = "0.14.1"
44
description = "Unofficial open source toolkit for Claude Code — AI-powered business operating system"
55
requires-python = ">=3.10"
66
dependencies = [

0 commit comments

Comments
 (0)