SPB Git

spb/zyquo-atlas Public License

The AI-native macOS web browser — every surface, intelligent.

Swift 75.2% JavaScript 22% Shell 2% Makefile 0.9%

docs: ultra README (icon, badges, features, screenshots, install/build), LICENSE, macOS/Xcode .gitignore, product screenshots

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
simon-pierre boucher committed 11 days ago (Jul 31, 2026) parent 896420d

Showing 8 changed files with +391 and −41

modified .gitignore +40 −8
@@ -1,21 +1,53 @@
1 # Secrets — never commit API keys
1 +# ─── Secrets — never commit API keys or vault data ───
2 2 .env.keys
3 3 *.env
4 +*.key
5 +vault.zq
4 6
5 # Swift Package Manager
7 +# ─── Swift Package Manager ───
6 8 .build/
7 9 .swiftpm/
8 10
9 # Build products & distribution
11 +# ─── Xcode ───
12 +DerivedData/
13 +build/
14 +xcuserdata/
15 +*.xcuserstate
16 +*.xcscmblueprint
17 +*.xccheckout
18 +*.moved-aside
19 +*.hmap
20 +*.ipa
21 +*.dSYM.zip
22 +*.dSYM
23 +*.pbxuser
24 +*.mode1v3
25 +*.mode2v3
26 +*.perspectivev3
27 +
28 +# ─── CocoaPods / Carthage (defensive) ───
29 +Pods/
30 +Carthage/Build/
31 +Carthage/Checkouts/
32 +
33 +# ─── Build products & distribution artifacts ───
10 34 dist/
11 35 *.zip
12 36 *.dmg
37 +*.app
38 +*.icns.tmp
13 39
14 # macOS
40 +# ─── macOS ───
15 41 .DS_Store
42 +.AppleDouble
43 +.LSOverride
44 +Icon?
45 +._*
46 +.Spotlight-V100
47 +.Trashes
48 +.fseventsd
16 49
17 # Temporary
50 +# ─── Temporary ───
18 51 *.log
19
20 # SwiftPM
21 .swiftpm/
52 +*.swp
53 +*~
added LICENSE +26 −0
@@ -0,0 +1,26 @@
1 +Zyquo Atlas — License
2 +
3 +Copyright © 2026 Simon-Pierre Boucher. All rights reserved.
4 +
5 +This source code is made publicly available for reference, evaluation, and
6 +transparency. It is NOT released under an open-source license. No permission is
7 +granted to copy, modify, redistribute, sublicense, or create derivative works
8 +from this software or its source code, in whole or in part, without the prior
9 +written permission of the copyright holder.
10 +
11 +The compiled application (including the notarized .dmg attached to GitHub
12 +Releases) is provided free of charge for personal use.
13 +
14 +Third-party components retain their own licenses:
15 + • Mozilla Readability (Sources/ZyquoAtlas/Content/Readability.js,
16 + Readability-readerable.js) — Apache License 2.0, Copyright (c) 2010 Arc90
17 + Inc. See Sources/ZyquoAtlas/Content/LICENSE-Readability.txt.
18 + • swift-markdown (Swift Package dependency) — Apache License 2.0.
19 +
20 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
22 +FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE
23 +LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM THE USE OF THE
24 +SOFTWARE.
25 +
26 +Contact: contact@spboucher.ai
modified README.md +325 −33
@@ -5,48 +5,340 @@
5 5 Mail: contact@spboucher.ai
6 6 -->
7 7
8 +<div align="center">
9 +
10 +<img src="assets/app-icon.png" width="168" height="168" alt="Zyquo Atlas app icon" />
11 +
8 12 # Zyquo Atlas
9 13
10 A legendary, native macOS **web browser** written in Swift + SwiftUI on WebKit
11 (`WKWebView`), built **without the Xcode IDE** (Swift Package Manager + the
12 command-line toolchain). Part of the **Zyquo** family. AI is woven into every
13 surface, powered by the same providers/models and encrypted key vault as
14 **Zyquo Cloud**.
14 +### The AI-native macOS web browser — every surface, intelligent.
15 +
16 +*A fast, radically customizable, privacy-first browser where AI is woven into the omnibox,
17 +the page, your selection, and your tabs — powered by **your** keys across **12 providers** and **169 models**.*
18 +
19 +<br/>
20 +
21 +[![Release](https://img.shields.io/github/v/release/spboucher-ai/zyquo-atlas?sort=semver&label=release&color=1FA9A0)](https://github.com/spboucher-ai/zyquo-atlas/releases/latest)
22 +[![Platform](https://img.shields.io/badge/platform-macOS%2013%2B-4E63E0)](https://www.apple.com/macos/)
23 +[![Swift](https://img.shields.io/badge/Swift-5.9-orange?logo=swift&logoColor=white)](https://swift.org)
24 +[![WebKit](https://img.shields.io/badge/engine-WebKit%20(WKWebView)-1FA9A0)](https://webkit.org)
25 +[![Universal](https://img.shields.io/badge/binary-Universal%20(arm64%20%2B%20x86__64)-4E63E0)](#-building-from-source)
26 +[![Notarized](https://img.shields.io/badge/Gatekeeper-Notarized%20Developer%20ID-2FA36B?logo=apple&logoColor=white)](#-installation)
27 +[![Downloads](https://img.shields.io/github/downloads/spboucher-ai/zyquo-atlas/total?color=1FA9A0)](https://github.com/spboucher-ai/zyquo-atlas/releases)
28 +[![License](https://img.shields.io/badge/license-Proprietary-lightgrey)](LICENSE)
29 +
30 +<br/>
31 +
32 +[**⬇︎ Download the latest .dmg**](https://github.com/spboucher-ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg) &nbsp;·&nbsp; [Features](#-features) &nbsp;·&nbsp; [Screenshots](#-screenshots) &nbsp;·&nbsp; [Install](#-installation) &nbsp;·&nbsp; [Build](#-building-from-source)
33 +
34 +</div>
35 +
36 +---
37 +
38 +## 📑 Table of Contents
39 +
40 +- [Overview](#-overview)
41 +- [Screenshots](#-screenshots)
42 +- [Features](#-features)
43 + - [Browser core](#browser-core)
44 + - [AI everywhere](#ai-everywhere)
45 + - [Massive customization](#massive-customization)
46 + - [Privacy &amp; security](#privacy--security)
47 + - [Keyboard shortcuts](#keyboard-shortcuts)
48 +- [Supported AI providers &amp; models](#-supported-ai-providers--models)
49 +- [Requirements](#-requirements)
50 +- [Installation](#-installation)
51 +- [Usage](#-usage)
52 +- [Building from source](#-building-from-source)
53 +- [Architecture](#-architecture)
54 +- [Verification](#-verification)
55 +- [Roadmap](#-roadmap)
56 +- [Contributing](#-contributing)
57 +- [License](#-license)
58 +- [Author](#-author)
59 +
60 +---
61 +
62 +## 🧭 Overview
63 +
64 +**Zyquo Atlas** is a native macOS web browser built in **Swift + SwiftUI** on Apple's
65 +**WebKit (`WKWebView`)** engine — compiled entirely with the Swift Package Manager and the
66 +command-line toolchain, **without the Xcode IDE**. It is the web-browser member of the
67 +**Zyquo** family.
68 +
69 +Unlike browsers that bolt a chatbot onto a sidebar, Atlas weaves AI into every surface —
70 +the omnibox, the current page, your text selection, and across your open tabs — and it does
71 +so on **your** terms: you bring your own API keys, stored in a machine-bound, AES-256-GCM
72 +encrypted vault (no Keychain), and page content is sent to a provider **only** when you
73 +invoke an AI action.
74 +
75 +- **~8,300 lines** of Swift across **58 files**, zero build warnings.
76 +- **12 AI providers · 169 models** — the same catalog and provider layer as Zyquo Cloud.
77 +- **Universal** (Apple Silicon + Intel), **Developer ID–signed, notarized, and stapled**.
78 +
79 +---
80 +
81 +## 📸 Screenshots
82 +
83 +<div align="center">
84 +
85 +**Customizable start page — flagship light theme**
86 +
87 +<img src="assets/screenshot-startpage.png" width="820" alt="Zyquo Atlas start page (light theme)" />
88 +
89 +<br/><br/>
90 +
91 +**Live browsing with the bookmarks bar**
92 +
93 +<img src="assets/screenshot-browsing.png" width="820" alt="Zyquo Atlas rendering a web page with the bookmarks bar" />
94 +
95 +<br/><br/>
96 +
97 +**Midnight dark theme with left vertical tabs**
98 +
99 +<img src="assets/screenshot-dark.png" width="820" alt="Zyquo Atlas dark theme with left vertical tab sidebar" />
100 +
101 +</div>
102 +
103 +---
104 +
105 +## ✨ Features
106 +
107 +Every feature below is implemented in this repository — nothing aspirational.
108 +
109 +### Browser core
110 +
111 +- 🗂️ **Real multi-tab WKWebView browsing** — each tab owns its web view and navigation
112 + state, with a determinate progress bar, back/forward/reload/stop, and links that open in
113 + new tabs (`target=_blank`, ⌘-click, `window.open`).
114 +- 📌 **Tab pinning**, **background-tab suspension** (dims + frees memory), and **session
115 + restore** per profile on relaunch.
116 +- ↕️ **Top horizontal tabs OR a left vertical tab sidebar** (Arc-style) — switch live.
117 +- 🧭 **Smart omnibox** — resolves your input into **navigate** (URL), **web search**, or
118 + **Ask AI**, with a security indicator and reader toggle.
119 +- 🕵️ **Private windows** (⌘⇧N) using a non-persistent data store — no history, no session,
120 + no saved data.
121 +- 📖 **Reader mode** — a clean, themeable article view with an optional AI summary at the top.
122 +- ⬇️ **Downloads** — routed to `~/Downloads` with live progress, reveal-in-Finder, and open.
123 +- 🔎 **Find-in-page** (⌘F) — native WebKit find with next/previous and wrap.
124 +-**Favorites** — a toggleable bookmarks bar, a full manager (edit title/URL/tags/notes,
125 + show-on-bar), search, and **Netscape HTML import/export** (interchange with other browsers).
126 +- 🕘 **Full-text history** — searchable, grouped by day, with delete-range/clear controls.
127 +- 👤 **Profiles** — a persistent personal profile and a private profile, each with isolated
128 + WebKit data stores.
129 +
130 +### AI everywhere
131 +
132 +- 💬 **Chat-with-page sidebar** — a per-tab, multi-turn conversation grounded in the page's
133 + extracted content, with an in-panel **model picker across all 169 models**.
134 +-**Quick actions** — one-click **Summarize**, **Key points**, and **Translate**, plus
135 + long-page **map-reduce** summarization for articles that exceed the model's context.
136 +- 🖱️ **Selection floating toolbar** — select any text on a page and get **Explain /
137 + Summarize / Translate / Rewrite / Ask** right at the cursor.
138 +- 🔮 **Ask AI from the omnibox** — get a streamed, grounded answer without leaving the page.
139 +- 🪟 **Multi-tab reasoning** — "compare these open tabs" gathers several pages and answers
140 + across them.
141 +- 🎚️ **Per-action model tiers** — pick a fast/cheap model for quick actions and a strong one
142 + for deep chat; choices persist.
143 +- 🧱 **Grounded &amp; injection-safe** — page content is extracted with Mozilla Readability in
144 + an isolated JavaScript world (visible text only), wrapped as untrusted data in every
145 + prompt, and streamed responses **cancel automatically on navigation**.
146 +
147 +### Massive customization
148 +
149 +- 🎨 **Theming engine****10 built-in themes** (light &amp; dark, including the flagship
150 + teal-indigo *Atlas Light* and *Midnight*), plus a **custom theme editor** (native color
151 + wells for accent / background / chrome) that applies **live**.
152 +- 🖼️ **Backgrounds** — solid, gradient, or image behind the chrome and start page.
153 +- 🧩 **Layout** — top or left tabs, **compact/comfortable density**, bookmarks-bar toggle,
154 + and a **UI-size slider**.
155 +- 🏠 **Customizable start page** — greeting, a prominent search / Ask-AI box, and a favorites
156 + grid.
157 +- 💾 **Per-profile persistence** and **theme import/export** as small JSON files.
158 +
159 +### Privacy &amp; security
160 +
161 +- 🔐 **Encrypted key vault** — API keys are stored with **AES-256-GCM** (CryptoKit),
162 + bound to the machine via `IOPlatformUUID` + HKDF, in `~/Library/Application
163 + Support/ZyquoAtlas/vault.zq` — **not** the Keychain, decrypted on demand and never logged.
164 +- 🛡️ **Content leaves the device only on a user-invoked AI action**, always to the provider
165 + you chose, via your own key — **never to Zyquo**.
166 +- 🧯 **Prompt-injection hardening** — extraction drops hidden/`aria-hidden`/off-screen text;
167 + page content is delimited and labelled untrusted; the AI layer has no navigation or tool
168 + access, so even a hostile page can only produce a bad summary, never an action.
169 +- 🍎 **Hardened Runtime, Developer ID–signed, notarized &amp; stapled**`spctl` reports
170 + *Notarized Developer ID*.
171 +
172 +### Keyboard shortcuts
173 +
174 +| Shortcut | Action | Shortcut | Action |
175 +|---|---|---|---|
176 +| `⌘T` | New tab | `⌘Y` | History |
177 +| `⌘W` | Close tab | `⌥⌘B` | Bookmarks manager |
178 +| `⌘L` | Focus omnibox | `⌘⇧J` | Downloads |
179 +| `⌘⇧A` | Toggle AI sidebar | `⌘⇧N` | Private window |
180 +| `⌘F` | Find in page | `⌘1``⌘8`, `⌘9` | Switch tab / last tab |
181 +| `⌘D` | Bookmark page | `⌥Space` | Quick AI ask |
182 +| `⌘R` | Reload | `⌘[` / `⌘]` | Back / forward |
183 +| `⌘,` | Customize | | |
184 +
185 +---
15 186
16 ## Build
187 +## 🤖 Supported AI providers &amp; models
188 +
189 +Atlas speaks to **12 providers** and ships a catalog of **169 chat models**, calling each
190 +provider exactly as Zyquo Cloud does (OpenAI-compatible or native Anthropic Messages API,
191 +streaming SSE, reasoning-token aware). Bring your own key per provider.
192 +
193 +| Provider | Provider | Provider |
194 +|---|---|---|
195 +| OpenAI | Anthropic (Claude) | xAI (Grok) |
196 +| Mistral | Google Gemini | Alibaba Qwen (DashScope) |
197 +| DeepSeek | Kimi (Moonshot) | Perplexity |
198 +| Together AI | DeepInfra | Cerebras |
199 +
200 +Every provider/model was live-verified end-to-end — see [Verification](#-verification).
201 +
202 +---
203 +
204 +## 💻 Requirements
205 +
206 +- **macOS 13.0 (Ventura) or later** — Apple Silicon or Intel.
207 +- An **API key** for at least one supported provider to use the AI features (browsing works
208 + without any key).
209 +- To build from source: the **Swift 5.9+ toolchain** (Command Line Tools or Xcode).
210 +
211 +---
212 +
213 +## 📦 Installation
214 +
215 +1. **[Download `ZyquoAtlas.dmg`](https://github.com/spboucher-ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg)** from the latest release.
216 +2. Open the DMG and **drag *Zyquo Atlas* into Applications**.
217 +3. Launch it. The app is **notarized by Apple**, so Gatekeeper opens it without warnings.
218 +4. Add your API keys in **Customize / Settings** (or import them) to enable AI features.
219 +
220 +> Verify authenticity yourself: `spctl -a -vv "/Applications/Zyquo Atlas.app"`
221 +> `source=Notarized Developer ID`.
222 +
223 +---
224 +
225 +## 🚀 Usage
226 +
227 +- **Browse** — type a URL or search terms in the omnibox; press Enter.
228 +- **Ask AI** — click **Ask AI** in the omnibox, or open the sidebar with `⌘⇧A`, to ask about
229 + the current page with cited, grounded answers.
230 +- **Summarize** — open the AI sidebar and hit **Summarize** (works on long articles via
231 + map-reduce), or use **Reader mode** for a clean read + summary.
232 +- **Selection actions** — select text on any page and choose **Explain / Translate / Rewrite
233 + / Ask** from the floating toolbar.
234 +- **Compare tabs** — open several pages and click **Compare tabs** in the sidebar.
235 +- **Customize** — press `⌘,` to switch themes, move tabs to a left sidebar, tune density, and
236 + edit a custom theme with live preview.
237 +
238 +---
239 +
240 +## 🛠️ Building from source
241 +
242 +Zyquo Atlas builds with the Swift Package Manager — **no Xcode project required**.
17 243
18 244 ```sh
19 make dev # release build → dist/Zyquo Atlas.app, ad-hoc signed (local iteration)
20 make run # make dev, then launch the app
21 make test # run the test suite
22 make release # universal (arm64+x86_64), Developer ID signed, notarized, stapled
23 make dmg # signed + notarized + stapled dist/ZyquoAtlas.dmg (run after make release)
24 make icon # regenerate AppIcon.icns from assets/icon/zyquo-atlas.svg
25 make verify # API verification with real keys (source .env.keys)
26 make clean
245 +git clone https://github.com/spboucher-ai/zyquo-atlas.git
246 +cd zyquo-atlas
247 +
248 +make dev # release build → dist/Zyquo Atlas.app (ad-hoc signed), for local iteration
249 +make run # build + launch
250 +make test # run the test suite
251 +make icon # regenerate AppIcon.icns from assets/icon/zyquo-atlas.svg
252 +
253 +# Distribution (requires a Developer ID certificate + notarytool profile):
254 +make release # universal (arm64 + x86_64), Developer ID signed, notarized, stapled
255 +make dmg # signed + notarized + stapled dist/ZyquoAtlas.dmg
256 +```
257 +
258 +Dependencies: Apple frameworks only — **SwiftUI, WebKit, CryptoKit, AppKit, Foundation,
259 +Combine, Security, IOKit** — plus Apple's **swift-markdown**. Mozilla **Readability**
260 +(Apache-2.0) is vendored for content extraction. No third-party HTTP libraries.
261 +
262 +---
263 +
264 +## 🏗️ Architecture
265 +
266 +```
267 +Sources/ZyquoAtlas/
268 +├── App/ @main entry, scene + commands, per-window state, app environment
269 +├── DesignSystem/ ZyquoTheme tokens · AtlasTheme + 10 built-in themes · ThemeEngine
270 +├── Models/ Tab · Profile · Bookmark · HistoryEntry · AIModel · Message · …
271 +├── Browser/ WebView (WKWebView wrapper) · TabManager · ProfileStore ·
272 +│ OmniIntent · DownloadManager
273 +├── Content/ ContentExtractor + Readability.js + AtlasExtractor.js · PageContext ·
274 +│ Chunker (isolated WKContentWorld, visible-text-only)
275 +├── AI/ AIService (streaming, cancel-on-nav) · AIActions · Summarizer
276 +├── Providers/ ProviderProtocol · OpenAICompatibleClient · AnthropicClient · Registry
277 +├── Services/ ModelCatalog (169) · SecureKeyStore (AES-256-GCM) · StreamingService (SSE)
278 +├── Features/ BookmarksService · HistoryService
279 +├── ViewModels/ KeyVaultStore
280 +└── Views/ Browser chrome, AI sidebar + selection toolbar, feature panels
27 281 ```
28 282
29 `make release` produces a **Notarized Developer ID** `Zyquo Atlas.app` (verified:
30 `spctl -a -vv``source=Notarized Developer ID`), universal, built without the
31 Xcode IDE. Signing identity, Team ID, and the `notarytool` keychain profile are
32 reused from the Zyquo family pipeline; no secrets live in this repo.
283 +---
284 +
285 +## ✅ Verification
286 +
287 +A built-in harness (`--verify`) exercises the real stack — content extraction, then a
288 +grounded summarize across **every one of the 169 models**, the full AI-action matrix, and
289 +cancel-on-navigation / privacy invariants — against live APIs.
290 +
291 +**Latest result: 183 / 183 checks green.** Full table in
292 +[`docs/VERIFICATION.md`](docs/VERIFICATION.md).
293 +
294 +---
295 +
296 +## 🗺️ Roadmap
297 +
298 +Planned enhancements (tracked in [`docs/PLAN.md`](docs/PLAN.md)):
299 +
300 +- Tab groups / "spaces" and drag-to-reorder
301 +- Hover thumbnail previews for tabs and links
302 +- AI writing assist that types back into web text fields
303 +- Opt-in auto-summaries and link hover-summaries
304 +- Inline source-link and section-citation chips in answers
305 +- A menu-bar quick-ask extra
306 +
307 +---
308 +
309 +## 🤝 Contributing
310 +
311 +Issues and feature suggestions are welcome via
312 +[GitHub Issues](https://github.com/spboucher-ai/zyquo-atlas/issues). This is a source-available
313 +project (see [License](#-license)); please open an issue to discuss substantial changes before
314 +submitting a pull request.
315 +
316 +Engineering standards: Swift 5.9+, zero warnings, every source file carries the project
317 +header, design tokens over magic numbers, and the provider layer stays byte-compatible with
318 +the Zyquo family.
319 +
320 +---
321 +
322 +## 📄 License
323 +
324 +Copyright © 2026 Simon-Pierre Boucher. **All rights reserved.** The source is public for
325 +reference and transparency; the compiled app (the notarized `.dmg`) is free for personal use.
326 +See [`LICENSE`](LICENSE). Vendored Mozilla Readability and swift-markdown are Apache-2.0.
327 +
328 +---
329 +
330 +## 👤 Author
331 +
332 +<div align="center">
333 +
334 +**Simon-Pierre Boucher**
33 335
34 ### Toolchain note
336 +📧 [contact@spboucher.ai](mailto:contact@spboucher.ai)
35 337
36 The Command Line Tools' default SDK (macOS 27 beta) declares SwiftUI's `@State`
37 & co. as macros whose `SwiftUIMacros` plugin ships only with Xcode, so every
38 SwiftUI build fails against it. All builds therefore pin
39 `SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX26.sdk` (set in the
40 `Makefile`). Build directly with `swift build -c release` only if you export the
41 same `SDKROOT`.
338 +<br/>
42 339
43 ## Layout
340 +*Part of the **Zyquo** family — Cloud · Local · Agent · Atlas.*
44 341
45 - `Sources/ZyquoAtlas/` — the app (App, DesignSystem, Models, Browser, Content,
46 AI, Providers, Features, Services, ViewModels, Views).
47 - `Sources/ZyquoVerify/` — thin launcher that execs the app's `--verify` harness.
48 - `docs/``PLAN.md` (phase progress), `AI-BROWSER-RESEARCH.md` (Phase 0.A),
49 `PROVIDER-REUSE.md` (Phase 0.B).
50 - `Resources/`, `scripts/`, `assets/` — bundle resources, build scripts, icon source.
342 +<sub>Built with Swift, SwiftUI &amp; WebKit — no Xcode IDE. 🗺️</sub>
51 343
52 Requires macOS 13.0+.
344 +</div>
added assets/app-icon.png +0 −0

Binary file not shown.

added assets/app-icon@512.png +0 −0

Binary file not shown.

added assets/screenshot-browsing.png +0 −0

Binary file not shown.

added assets/screenshot-dark.png +0 −0

Binary file not shown.

added assets/screenshot-startpage.png +0 −0

Binary file not shown.