Show HN:我开发了一款完全开源、支持本地部署的全功能 AI 平台 ENZO
英文标题:🔶 Show HN: I created an open source locally usable full fledged AI platform
ENZO 是一款支持本地 Docker 部署及 Google Colab 零安装运行的开源全功能 AI 平台,集成了终端聊天、模型市场、自编写手册的 Agent 构建器、深度研究及代码生成等六大功能界面。平台采用纯粹的 BYOK(自带 API Key)模式,统一接入 9 家提供商的 300 多种模型,直连各模型厂商且无中间商抽成或订阅费用。密钥在浏览器本地通过 WebCrypto 与 AES-256-GCM 隔离加密,并在 CI 流水线中配备了 44 项黑盒渗透测试保障安全。该项目为追求数据隐私、零平台溢价的开发者与研究人员提供了一套开箱即用的本地 AI 基础设施方案。
1.3 MB
97.0 KB
中文
快速上手 · 在线演示 · 内置特性 · 安全机制 · 最新动态 · 使用指南 · 更新日志
与 300+ 模型畅聊。构建能够自动编写操作手册的 Agent。做研究、生成代码、运行一切——全部基于你自己的 API Key,运行在你自己的基础设施上。 发送消息时,请求将直接从浏览器经由 ENZO 发送到你选定的提供商,你仅按常规价格直接支付给该提供商。没有任何中间商抽取分成。 这里没有 ENZO 账户、没有用量计费,也没有订阅费用。
| ENZO 内置特性 | 数量 | 能为你提供什么 |
|---|---|---|
| 单一目录集成模型 | 300+ | 跨 9 家提供商,实时健康检查 |
| 可注入 Agent 技能 | 内置 74 种 | 领域行动手册,Agent 循环在每次运行时动态调取 |
| 自编手册 Agent | 2-pass 构建器 | 输入自然语言任务,输出完整操作手册 |
| CI 流水线阶段 | 7 | 包含每次代码推送时的黑盒安全渗透测试 |
| 渗透测试断言 | 44 项 | 认证绕过、IDOR、恶意载荷、流完整性测试 |
| 单元测试 + 安全测试 | 298 项 | 覆盖 Agent、保险库(Vault)、加密与模型测试套件 |
| TypeScript (严格模式) | 约 44,000 行 | 单一语言,全量严格模式开发 |
| 已发布版本 | 5 个 | v1.0.0 → v1.4.0,全部记录在更新日志中 |
bash git clone https://github.com/theguysudo/ENZO.git cd enzo docker compose up -d
→ http://localhost:5001
这就是全部安装步骤。无需创建账户,无需强制配置环境变量,也无需数据库服务器。打开应用,点击 Login,然后挑选任意提供商:
| 提供商 | 所需凭据 | 免费额度 |
|---|---|---|
| OpenRouter | API key | 提供大量免费模型 |
| Google AI Studio | API key | 慷慨的免费层级 |
| NVIDIA NIM | API key | 免费额度赠送 |
| Groq, HuggingFace, Cloudflare, Gemini | API key / OAuth | 各不相同 |
密钥在浏览器中加密存储(密码短语保护的保险库,并提供可下载的恢复文件)。你可以随时在 Vault 中将它们彻底清除。
在全新的自托管实例上,你粘贴并通过实时验证的第一个密钥将认领该实例——它会被写入容器的 .env 并封存在 enzo-memory 数据卷中,因此所有服务端功能(Agent、技能、记忆库)将立刻解锁,且在容器重启后依然有效。无需配置 Master Key,也无需繁琐的设置向导——粘贴一个有效的 API Key 即可开始使用。(如果你根本不希望存在“认领窗口期”,也可以选择预先在 compose 环境变量中配置好提供商 Key;安全威胁模型中对这一权衡有清晰阐述。)
提示
建议先尝试在线体验:https://enzo-hub.duckdns.org——这是运行在我们基础设施上的同款应用。本仓库正是那套代码,仅去掉了 Google 登录(自托管登录仅使用你的提供商 API Key),并精简了默认主题以缩小下载体积。
在 Google Colab 上运行 — 零安装配置
不想在本地折腾,或者想从任何设备访问 ENZO?Colab Notebook 会为你搞定全部搭建流程:它会自动克隆本仓库、安装依赖项、构建 UI、启动服务器,最后为你生成一个访问 URL。
- 点击上方按钮——在 Colab 中打开 Notebook(免费 Google 账户即可)。
- 运行所有单元格(
代码执行程序 → 全部运行,或Ctrl/⌘ + F9)——初次安装 + 构建约需 4-5 分钟;每个单元格都是幂等的,重复运行会复用已有结果而无需重头开始。 - 获取访问 URL——最后一个单元格会输出两个链接:一个是在当前浏览器中即可使用的 Colab 链接,另一个是可通过手机或任何其他设备访问的 Cloudflare Tunnel 链接(免费且无需账号)。Tunnel URL 每次会话都会变更;Colab 链接则绑定至你的当前会话。
全会话持续在线。 在生成 URL 之前,Notebook 会启动两个防止连接断开的保护机制:一个是保活机制(Keep-alive),在浏览器标签页打开期间每 60 秒重置一次 Colab 的约 90 分钟空闲计时器;另一个是看门狗线程(Watchdog),每 5 分钟 ping 一次服务器,崩溃时会自动重启。免费版 Colab 会话最长约 12 小时,因此稳定运行 6 小时毫无压力;当会话结束时,只需重新点击一次 全部运行 即可恢复一切。
注意
Notebook 运行在 Google 的硬件上,因此使用期间受 Colab 服务条款约束——但你的模型密钥始终属于你:启动后粘贴任何提供商密钥,与自托管完全一样,我们的服务器端绝不会存储任何内容。当 Colab 会话终止后,虚拟机上的所有数据也会随之销毁。
六大交互界面,集成于统一工作区
| 界面 | 功能说明 |
|---|---|
| Terminal(终端) | 支持与 300+ 模型的流式对话——涵盖常规、思考、研究和编程模式——工具栏内置心电图式的实时健康追踪,一旦目录无法连接即变红警示 |
| Model marketplace(模型市场) | 跨 9 家提供商的统一目录——卡片现配有平台专属封面图以及包含真实下载量、许可证和基准测试数据的研究面板 |
| Music player(音乐播放器) | 无需 API Key 即可在市场中搜索并播放任何歌曲(无需 YouTube API Key)——内置真正改变声场效果的 5 段均衡器 |
| Agent builder(Agent 构建器) | 用自然语言描述任务,ENZO 会自动编写 Agent 完整的操作手册,且 Agent 后续会根据你的活动持续自我训练 |
| Research mode(研究模式) | 深度研究循环,能自动编写查询词、阅读抓取的内容并自主判定何时结束——设有严格预算上限,绝不会刷爆你的 API Key |
| Code-gen(代码生成) | 编写代码项目、自动启动、实时预览,并在出现故障时给出提示 |
| Vault(保险库) | 所有密钥均在浏览器本地封存,按单次请求附带,支持一键彻底清除 |
Agent 构建器的工作原理
- 第一阶段:分析(Pass 1 — analysis)。 双阶段编写器会深入理解你的任务领域(例如“一个负责调研模拟联合国国家立场的 Agent”),并推导出操作手册必须覆盖的内容:隐性知识、决策启发式、边缘情况处理。
- 并发竞速(The race)。 当拟定初稿需要调用模型时,系统会从你自己的提供商中同时并发发起约 10 个免费候选模型请求——最先返回结果的获胜,其余落后请求直接终止,同时通过大脑健康计分板根据模型的实际可用表现为后续竞速重新排序。故障或受频控限制的免费模型将不再导致初稿构建崩溃。
- 透明可溯(Honest provenance)。 每个 Agent 都会明确记录实际上是由哪个模型编写而成的——若无可连通的模型也会如实标明。
- 永不停歇的进化(It doesn't stop)。 每个 Agent 专属的神经层会以 90 秒为周期整合平台内匹配该领域的交互活动,将经验沉淀至记忆库中,并在每次运行时注入动态的 NEURAL FOCUS 模块。你可以在 Agent 的 Neural 选项卡中实时查看。
大部分“AI 工作区”要么托管你的密钥,要么限制你的使用量,要么依赖订阅费才能维持运转。ENZO 的设计理念则完全相反:
| ENZO | 托管型 AI 应用(ChatGPT、Poe 等) | 常见的自托管 AI 工具
---|---|---|---
谁为模型买单 | 你本人,直接付给模型提供商 | 供应商(包含溢价分成) | 你本人
API Key 存储位置 | 你的浏览器中,采用不可导出密钥的 AES-256-GCM 封存 | 供应商服务器 | 服务器端环境变量/配置文件
服务器是否读取密钥 | 托管模式:绝不读取——仅充当透明中继,CI 强约束。自托管:仅使用你明确认领的密钥来运行计划任务 Agent——在安全威胁模型中有明确说明 | 是 | 通常是
中间商费用 | 无 | 订阅费 / 按席位收费 | 无
安装复杂度 | docker compose up -d,零配置 | 无(云端托管) | 通常为多服务复杂配置
Agent 自我提升 | 神经层从你的日常活动中自我学习 | 否 | 否
CI 安全测试 | 每次代码推送均执行黑盒渗透测试,44 项断言 | 不透明 | 极少
(竞品对比列代表该品类的通用现状,非针对具体单一产品——细节可能有所不同。)
完整的安全威胁模型已详细记录在 docs/SECURITY.md 中,并配有支撑各项安全声明的对应源码可供查验。要点概述:
-
密钥在浏览器本地封存,采用非导出式 WebCrypto 密钥进行 AES-256-GCM 加密。 该密钥仅可用于解密你的 API Key,但绝无法被导出复制——无论是我们的前端 JavaScript 还是潜在攻击者注入的脚本都无法获取其底层原始字节。可选的密码短语模式支持使用 PBKDF2-SHA256(600,000 次迭代)重新加密,并彻底清除设备本地的加密密钥。
-
单一模块接管密钥存储,并由 CI 强制约束。 CI 流水线阶段会扫描前端代码中任何原始
localStorage密钥读取操作,一旦匹配即阻断构建——遗漏的密钥访问点会直接导致构建飘红,绝不会流入生产环境成为安全 Bug。 -
每次代码推送都会针对启动后的服务器运行包含 44 项断言的黑盒渗透测试——覆盖鉴权绕过、恶意载荷、IDOR(不安全的直接对象引用)、流传输完整性测试——外加无密钥启动证明:服务器必须在零提供商密钥的前提下成功运行。这是实打实经过测试验证的 BYOK(自带密钥)承诺,而非空口无凭。
-
局限性预先说明。 自托管模式会将你首次认领的密钥写入容器的
.env(封存于 memory 数据卷中),以便在浏览器关闭后定时计划任务 Agent 仍可保持运行——该设计权衡已被明确写入文档,毫无隐瞒。docs/SECURITY.md 详尽说明了哪些受到保护、哪些不受保护以及背后的原因。 -
对话内文件转换器——在终端聊天中直接附加 PDF、电子表格、CSV、JSON、TXT 或 Markdown 文件,系统会在浏览器本地直接解析为真实文本/数据行(文件绝不离开设备;与常规聊天相同,仅推理步骤会使用你自己的 API Key)。Agent 可完成数据提取、合并或跨格式转换——且回复结果中会直接出现 CSV / Excel 下载按钮。专为论文研究设计:“提取所有表格并合并为单个 CSV”现已能端到端顺畅运行,扫描件 PDF 缺少文本图层时也会明确提示而非直接报错。
-
支持在 Google Colab 上运行——只需点击一次 Open In Colab 按钮(参见“在 Google Colab 上运行”一节):Notebook 将在 Google 的云端硬件上克隆、安装、构建并启动 ENZO,为你提供用于浏览器的访问 URL 以及用于手机的 Tunnel URL,并内置了保活机制与看门狗线程以确保 6 小时以上的持续在线。
-
具备自愈能力的 Docker 镜像拉取——容器现在每次启动时都会自动校验其依赖项,并在服务器启动前自动补充安装缺失内容(可通过
ENZO_AUTO_INSTALL=0跳过)。拉取到的镜像绝不会在破损状态下启动。
v1.3.0 更新内容(上一版本)
- 音乐播放器——无需 API Key 即可在市场中搜索并直接播放任何歌曲(无需 YouTube API Key,无配额限制):c
English / 原文
Quickstart · Live demo · What's inside · Security · What's new · Usage guide · Changelog
Chat with 300+ models. Build agents that write their own operating manuals. Research, generate code, run it all — on your keys, on your infrastructure. When you send a message, the request goes from your browser through ENZO to the provider you picked, and you pay that provider their normal price. Nothing sits in between taking a cut. There is no ENZO account, no usage meter, no subscription.
| Inside ENZO | Count | What it gives you |
|---|---|---|
| Models in one catalog | 300+ | across 9 providers, health-checked live |
| Injectable agent skills | 74 bundled | domain playbooks the agent loop pulls in per run |
| Self-drafting agents | 2-pass builder | plain-English task in, operating manual out |
| CI pipeline stages | 7 | including a black-box security pentest on every push |
| Pentest assertions | 44 | auth bypass, IDOR, hostile payloads, stream integrity |
| Unit + security tests | 298 | agent, vault, crypto and model suites |
| TypeScript (strict) | ~44,000 lines | one language, strict mode throughout |
| Releases | 5 | v1.0.0 → v1.4.0, everything in the changelog |
git clone https://github.com/theguysudo/ENZO.git
cd enzo
docker compose up -d
# → http://localhost:5001
That's the whole install. No accounts, no mandatory env, no database server. Open the app, press Login , and pick any provider:
| Provider | What you need | Free tier |
|---|---|---|
| OpenRouter | API key | many free models |
| Google AI Studio | API key | generous free tier |
| NVIDIA NIM | API key | free credits |
| Groq, HuggingFace, Cloudflare, Gemini | API key / OAuth | varies |
Keys are saved encrypted in your browser (passphrase-protected vault, with a recovery file you can download). You can wipe them anytime from the Vault.
On a fresh self-hosted instance the first live-validated key you paste claims the instance — it's written to the container .env and sealed into the enzo-memory volume, so every server-side feature (agents, skills, memory) unlocks immediately and survives restarts. No master key to configure, no setup wizard — paste a working key and go. (Pre-seed a provider key in compose env instead if you'd rather not have the claim window at all; the threat model states this trade plainly.)
Tip
Try it hosted first: https://enzo-hub.duckdns.org — the same app, running on our infrastructure. This repo is exactly that code, minus Google sign-in (self-hosted login is just your provider keys) with a trimmed default theme set for a small download.
Run on Google Colab — zero install
Don't want the local hassle — or want ENZO reachable from any device? The Colab notebook does the whole setup for you: it clones this repo, installs the dependencies, builds the UI and boots the server, then hands you a URL.
- Click the button — the notebook opens in Colab (a free Google account is enough).
- Run all cells (
Runtime → Run all, orCtrl/⌘ + F9) — install + build takes ~4–5 min the first time; every cell is idempotent, so a re-run reuses what's already there instead of starting over. - Take your URL — the last cell prints two links: a Colab link that works in the browser you're already in, and a Cloudflare tunnel link that works from your phone or any other device (free, no account). The tunnel URL changes each session; the Colab link is bound to your session.
Stays up for the whole session. The notebook arms two disconnect-prevention mechanisms before handing you the URL: a keep-alive that resets Colab's ~90-minute idle timer every 60 seconds while the tab is open, and a watchdog thread that pings the server every 5 minutes and restarts it automatically if it ever dies. Free Colab caps a session at ~12 hours, so a 6-hour run fits comfortably; when a session does end, one click on Run all brings everything back.
Note
The notebook runs on Google's hardware, so Colab's terms apply while you're there — but your model keys stay yours : paste any provider key after boot, exactly like self-hosting, and nothing is ever stored on our side. When the Colab session ends, everything on the VM is gone.
Six surfaces, one workspace
| Surface | What it does |
|---|---|
| Terminal | Streaming chat with 300+ models — normal, thinking, research and coding modes — with a live ECG-style health trace in the toolbar that flatlines red the moment the catalog is unreachable |
| Model marketplace | One unified catalog across all 9 providers — cards now carry the platform's own cover art and a research panel with real download counts, licences and benchmarks |
| Music player | Search any song and play it in the marketplace — keyless, no YouTube API key — with a 5-band equalizer that actually re-shapes the audio |
| Agent builder | Describe a task in plain English; ENZO drafts the agent's full operating manual, and the agent keeps training itself on your activity from then on |
| Research mode | A deep-research loop that writes its own queries, reads what it finds, and decides when it's done — under hard budgets so it can't burn your key |
| Code-gen | Writes a coding project, boots it, previews it live, and tells you when it's broken |
| Vault | Every key sealed in the browser, attached per-request, wipeable in one click |
How the agent builder works
- Pass 1 — analysis. A two-pass drafter reads the domain of your task ("an agent that researches MUN country positions") and derives what the manual needs to cover: tacit knowledge, decision heuristics, edge cases.
- The race. When a draft needs a model, ~10 free candidates from your own providers fire simultaneously — the first to answer wins, stragglers are aborted, and a brain-health scoreboard reorders future races by which models actually deliver. Dead or rate-limited free-tier models can no longer collapse a draft.
- Honest provenance. Every agent records which model actually drafted it — and says so plainly when nothing was reachable.
- It doesn't stop. A per-agent neural layer folds in domain-matched platform activity on a 90-second cadence, distills lessons into memory, and injects a live NEURAL FOCUS block into every run. Watch it in the agent's Neural tab.
Most "AI workspaces" hold your keys, meter your usage, or need a subscription to exist. ENZO is built the other way around:
| ENZO | Hosted AI apps (ChatGPT, Poe, …) | Typical self-hosted AI tools
---|---|---|---
Who pays the model | you, directly to the provider | the vendor (plus markup) | you
Where API keys live | your browser, AES-256-GCM sealed under a non-extractable key | vendor's servers | server-side env/config
Server reads your keys | hosted mode: never — relay-only, CI-enforced. Self-hosted: only the key you explicitly claim, for scheduled agents — stated in the threat model | yes | usually yes
Middleman fee | none | subscription / per-seat | none
Install | docker compose up -d, zero config | none (it's hosted) | often multi-service setup
Agents improve themselves | neural layer learns from your activity | no | no
Security testing in CI | black-box pentest, 44 asserts, every push | opaque | rarely
(Competitor column is about the category, not specific products — details vary.)
The full threat model is written down — checkable, with the code that makes each claim true — in docs/SECURITY.md. The short version:
-
Keys are sealed in your browser with AES-256-GCM under a non-extractable WebCrypto key. It can be used to decrypt your keys while never being copied — no JavaScript can export its bytes, ours or an attacker's. Optional passphrase mode re-seals everything under PBKDF2-SHA256 (600,000 iterations) and deletes the device key entirely.
-
One module touches key storage, and CI enforces it. A pipeline stage greps the frontend for any raw
localStoragekey read and fails the build on a hit — a missed key-access site is a red build, never a production bug. -
Every push runs a 44-assertion black-box pentest against a booted server — auth bypass, hostile payloads, IDOR, stream integrity — plus a keyless-boot proof: the server must start with zero provider keys. That's the BYOK guarantee, tested, not promised.
-
The limits are stated up front. Self-hosted mode stores the first key you claim in the container
.env(sealed in the memory volume) so scheduled agents can run while your browser is closed — that trade is documented, not hidden. docs/SECURITY.md covers what's protected, what isn't, and why. -
In-chat file converter — attach a PDF, spreadsheet, CSV, JSON, TXT or Markdown file in the terminal chat and it's parsed to real text/rows in your browser (files never leave the device; only the reasoning step uses your own key, like normal chat). The agent extracts, merges, or cross-converts — and CSV / Excel download buttons appear right on the reply. Built for research papers: "extract every table and merge into one CSV" now works end to end, and scanned PDFs report their missing text layer instead of failing.
-
Run it on Google Colab — one click on the Open In Colab button (see Run on Google Colab): the notebook clones, installs, builds and boots ENZO on Google's hardware, hands you a URL for your browser plus a tunnel URL for your phone, and arms a keep-alive + watchdog so it stays up for 6+ hours.
-
Self-healing Docker pulls — the container now verifies its dependencies on every start and installs anything missing before the server boots (
ENZO_AUTO_INSTALL=0to skip). A pulled image can't boot broken.
What's new in v1.3.0 (previous)
- Music player — search any song and play it straight from the marketplace, keyless (no YouTube API key, no quota): a collapsed corner pill expands into a full player card — vinyl disc hero, queue walking, shuffle/loop/like, keyboard controls. For You turns your own listening history (kept device-local) into song seeds through your own provider key.
- Real equalizer — a 5-band Web Audio EQ (bass / low-mid / mid / presence / air, ±12 dB, preamp, five presets) that genuinely re-shapes the frequency response when you opt in. Enhance starts off — normal playback is untouched. Tracks the enhancer can't stream fall back to the YouTube engine automatically; playback never breaks.
- Marketplace, redesigned — every model card now carries the platform's own cover art, brand colour on hover, live health dot + latency, and a research panel with real facts: HuggingFace download counts, licences, knowledge cutoffs, Artificial Analysis scores and a Wikipedia-backed family summary — pulled keyless from public endpoints, never guessed.
- NYC Subway theme — the workspace's new flagship backdrop: an AI-animated subway ride through a tunnel, with a handheld-camera tremble, monochrome film grade and animated recording grain added in code (the video ships clean).
- A quieter interface — the whole workspace went monochrome + a single coral accent: the terminal toggle switch rebuilt (was a 385-line component with dead animations), the weather chip moved up beside the catalog header, the nav collapses on scroll and springs back, and the top bar got a cursor-reactive dot grid.
- Previously in v1.2.0: the terminal health ECG, the onboarding stepper, ambient weather, the smoke top bar.
- Full history:
docs/CHANGELOG.md.
Requirements: Docker Desktop for Mac (Apple Silicon or Intel). Allocate at least 4 GB RAM in Docker Desktop → Settings → Resources (the model catalog + agents like headroom).
git clone https://github.com/theguysudo/ENZO.git
cd ENZO
docker compose up -d
Open http://localhost:5001 , press Login , and paste a key from any provider (OpenRouter, Google AI Studio, NVIDIA NIM — all have free tiers; links are in the app). You're in.
Everyday commands
docker compose logs -f # follow what the server is doing
docker compose restart # bounce the app, data survives
docker compose pull && docker compose up -d # upgrade to a new release
docker compose down # stop (add -v ONLY to wipe all data)
Where your stuff lives: projects, learned skills and agent memory are in named Docker volumes (docker volume ls | grep enzo) — they survive upgrades and down. Your provider keys never touch the server: they're sealed in your browser's vault, and on a fresh install the first key you paste claims the instance for server-side features (scheduled agents).
If the app feels slow on a MacBook : the video themes are GPU-composited; on battery or an older machine, flip the Lite/Full chip (bottom-right) — it swaps video backgrounds for pure shader ones with one click.
Updating: docker compose pull && docker compose up -d. Releases are tagged at github.com/theguysudo/ENZO/releases.
Requirements: Docker Desktop for Windows with WSL 2 (Docker Desktop's installer sets this up; reboot when it asks). Give it ≥ 4 GB RAM in Settings → Resources.
In PowerShell (no clone folder needed — git comes with Docker Desktop's WSL distro, or use Git for Windows):
git clone https://github.com/theguysudo/ENZO.git
cd ENZO
docker compose up -d
Open http://localhost:5001 in your browser, press Login , paste a provider key — done.
Everyday commands
docker compose logs -f # follow the server log
docker compose restart # bounce the app
docker compose pull; docker compose up -d # upgrade to a new release
docker compose down # stop (add -v ONLY to wipe all data)
Windows notes
-
If
http://localhost:5001doesn't load, check Docker Desktop is running (whale icon in the system tray), thendocker compose ps— the port is listed there. -
Anti-virus software occasionally slows the first boot (image extraction). The second start is fast.
-
Everything else — volumes, keys, the Lite/Full chip — works exactly as on macOS.
git clone https://github.com/theguysudo/ENZO.git cd ENZO && docker compose up -d # → http://localhost:5001
What's new in v1.2.0 (previous)
- Live terminal health ECG — the static ONLINE label is now a heart-monitor trace sweeping the terminal toolbar; reachable catalog keeps it beating, anything else freezes a red flatline.
- Onboarding, rebuilt — an animated stepper walks the three connect-provider steps (numbers morph into checkmarks, completed steps are click-back-navigable), with a liquid save switch that ticks when your key lands.
- Ambient weather card in the marketplace sidebar — one keyless IP geolocation + Open-Meteo, cached 30 minutes, degrading quietly.
- Smoke behind the glass — the top bar carries a slow violet/cyan drift (WebGL fbm, low-power context) and a ~20% slimmer silhouette.
- Previously in v1.1.0: the custom agent builder, race drafting, the neural layer, and ~20 hardening fixes.
- Full history:
docs/CHANGELOG.md.
Every push to main runs the full pipeline in .github/workflows/ci.yml — 7 stages:
- Security checks — no key literals in tracked files,
.envnever committed, keys never read from rawlocalStorage, no onboarding bypasses - Backend — strict TypeScript, every imported file tracked, unit tests (298 assertions across agent, vault, crypto and model suites)
- Dependency audits — backend + frontend, fail on any high/critical vulnerability
- Black-box security pentest — 44 live assertions against a booted server: auth bypass, hostile payloads, IDOR, stream integrity
- Keyless boot proof — the server must boot with zero provider keys
- Frontend — strict TS + production build with an enforced gzipped bundle budget
- Repo hygiene — no large binaries, changelog and agent docs present
| latest / lite | full
---|---|---
Homepage background | Nebula drift — animated WebGL | + 8 anime video themes
Workspace/terminal background | Default Particles (three.js) + the NYC Subway ride | + 9 cinematic video themes
Image download | ~150 MB | ~470 MB
Both animate by default — the lite themes are GPU shaders, not static images. To get every theme:
ENZO_IMAGE=ghcr.io/theguysudo/enzo:full docker compose up -d
Everything you make lives in Docker named volumes , safe across upgrades:
enzo-projects— generated coding projectsenzo-skills— skills the agent learned from GitHub reposenzo-memory— the agent's durable notes about your work
Your provider keys are not in the volumes — they're browser-side (encrypted at rest with your passphrase).
Everything works with zero environment variables. A few features want server-side values — put them in a .env next to docker-compose.yml:
# Extra origins allowed to call the API (comma-separated)
ENZO_CORS_ORIGINS=https://enzo.example.com
# "Connect with Cloudflare" OAuth button (optional — pasting a token works too)
CLOUDFLARE_OAUTH_CLIENT_ID=...
CLOUDFLARE_OAUTH_CLIENT_SECRET=...
# HuggingFace OAuth app for the HF onboarding step (optional — token paste works)
VITE_HF_CLIENT_ID=...
HF_CLIENT_SECRET=...
VITE_HF_CLIENT_IDonly takes effect when building the image from source (it's baked into the frontend at build time).
docker build -t enzo:mine --build-arg THEME_VARIANT=full .
What's different from the hosted deployment
This image is generated from the same codebase that runs https://enzo-hub.duckdns.org, with exactly two feature differences:
- No Google sign-in. The hosted site offers Google OAuth as a convenience; here, login is setting your provider keys. Everything else — providers, research, coding agent, vault, memory, skills — is identical.
- Default themes (lite image). The first homepage and workspace themes run as pure WebGL/three.js so the image stays small. The
fullimage has the complete set.
Apache-2.0 — see LICENSE.
One command. Your keys. No middleman.
docker compose up -d → http://localhost:5001 · or try it live at enzo-hub.duckdns.org
If ENZO saves you a middleman, a ⭐ helps other people find it.
