From 16dea3491ff6276af293bfca735bc8063c44ba3b Mon Sep 17 00:00:00 2001
From: Arul Sharma <31745423+arul28@users.noreply.github.com>
Date: Wed, 5 Aug 2026 01:17:26 -0400
Subject: [PATCH 1/7] docs(readme): surface-first grid and install section
Split the intro into shorter beats and fix its typos, replace the
six-row feature table with a 2x2 grid of the four surfaces (desktop,
web, terminal, mobile), and restructure Install around them: the
one-liner leads and states what it gets you, GitHub Releases is framed
as the same outcome by another route, and ade connect is described as
what it is -- linking a machine to your account, run for you by the
installer and by desktop sign-in.
Co-Authored-By: Claude Fable 5
-
- |
-+ |
+
-### Manage worktrees. In parallel.
-Every task gets its own git worktree. Describe it and ADE spins up the branch — edit, test, and commit side by side, with no stashing, no rebasing, no context switch.
+**Desktop app**
- |
-
| +The full workspace. Every agent and every worktree, tiled side by side. macOS and Windows. -### Every coding agent. One workspace. -Claude Code, Codex, Cursor, Factory Droid, OpenCode — pick whichever model fits the task. All run against the same worktree, with live diffs and approval gates. Grid view tiles every run side by side. - - | -
-
|
-
+
+
- |
-
- |
-+**Web client** -### The whole IDE. In your terminal. -`ade code` is ADE, terminal-native — the same worktrees, chats, and PRs in a fast TUI. Start in the shell, finish on the desktop or your phone. +The same workspace in a browser at [app.ade-app.dev](https://app.ade-app.dev). Nothing to install — sign in and your machines are there. | |
| + |
+
-### Open, review, and merge PRs.
-Every PR your agents open lands in ADE — diff, CI, comments, merge button. No GitHub tab. Auto-merge when green.
+**Terminal**
- |
-
-
- |
-
-
- |
-- -### The conductor for your agents. -An always-on CTO with context across every worktree. Pulls work from Linear, dispatches to the right worker, reports back when it's done. +`ade code` is ADE, terminal-native — the same worktrees, chats, and PRs in a fast TUI. Works over SSH. | -
+
+
+
- |
| +**Mobile app** -### Everything above. On your phone. -Every worktree, every agent, every PR — synced to iOS. Start a task on the desktop, approve the diff from the train. +Every worktree, agent, and PR synced to iOS. Start a task on the desktop, approve the diff from the train. - | -
-
-
-
|
ade in your Terminal
+ that ADE uses everywhere else. On a machine without the desktop app,{" "}
+ {TERMINAL_INSTALL_COMMAND} installs it and sets up
+ PATH for you.
+ >
+ )}
- {target.subtitle} -
+ {target.subtitle ? ( ++ {target.subtitle} +
+ ) : null} -- {target.terminal.blurb} -
+ {target.terminal.blurb ? ( ++ {target.terminal.blurb} +
+ ) : null} {target.downloads ? ( @@ -254,17 +258,21 @@ export function InstallDialog({ ))} -- {target.downloads.blurb} -
+ {target.downloads.blurb ? ( ++ {target.downloads.blurb} +
+ ) : null} ) : null}- {target.footnote.text} -
+ {target.footnote.text ? ( ++ {target.footnote.text} +
+ ) : null} {target.footnote.command ? ( <>
diff --git a/apps/web/src/lib/installTargets.ts b/apps/web/src/lib/installTargets.ts
index a9d362c4a..d3ecca211 100644
--- a/apps/web/src/lib/installTargets.ts
+++ b/apps/web/src/lib/installTargets.ts
@@ -25,22 +25,22 @@ export type InstallTarget = {
platform: InstallPlatform;
/** Dialog heading. */
title: string;
- /** One line under the heading. */
- subtitle: string;
+ /** One line under the heading, when there is one. */
+ subtitle?: string;
terminal: {
heading: string;
command: string;
- blurb: string;
+ blurb?: string;
analyticsFeature: MarketingFeature;
};
/** Absent for Linux — there is no ADE desktop app for Linux. */
downloads?: {
heading: string;
- blurb: string;
+ blurb?: string;
options: InstallDownload[];
};
footnote: {
- text: string;
+ text?: string;
/** Copyable command rendered inside the footnote, when there is one. */
command?: string;
commandAnalyticsFeature?: MarketingFeature;
@@ -48,9 +48,6 @@ export type InstallTarget = {
openAnalyticsFeature: MarketingFeature;
};
-const TERMINAL_BLURB =
- "Installs the ADE brain — the headless engine — signs you in, and can optionally install the desktop app. All from the terminal.";
-
export const MAC_INSTALL_COMMAND = "curl -fsSL https://ade-app.dev/install.sh | sh";
export const WINDOWS_INSTALL_COMMAND = "irm https://ade-app.dev/install.ps1 | iex";
export const LINUX_INSTALL_COMMAND = MAC_INSTALL_COMMAND;
@@ -60,16 +57,13 @@ export const INSTALL_TARGETS: Readonly> =
mac: {
platform: "mac",
title: "Get ADE for Mac",
- subtitle: "Two ways in. Both end up in the same place.",
terminal: {
heading: "Install from your terminal",
command: MAC_INSTALL_COMMAND,
- blurb: TERMINAL_BLURB,
analyticsFeature: MARKETING_FEATURES.COPY_INSTALL_COMMAND_MAC,
},
downloads: {
- heading: "Download the app",
- blurb: "Signed and notarized. Updates itself from then on.",
+ heading: "or Download from file",
options: [
{
href: LINKS.downloadMacArm64,
@@ -95,16 +89,13 @@ export const INSTALL_TARGETS: Readonly> =
windows: {
platform: "windows",
title: "Get ADE for Windows",
- subtitle: "Two ways in. Both end up in the same place.",
terminal: {
heading: "Install from your terminal",
command: WINDOWS_INSTALL_COMMAND,
- blurb: TERMINAL_BLURB,
analyticsFeature: MARKETING_FEATURES.COPY_INSTALL_COMMAND_WINDOWS,
},
downloads: {
- heading: "Download the app",
- blurb: "Signed installer. Updates itself from then on.",
+ heading: "or Download from file",
options: [
{
href: LINKS.downloadWindows,
@@ -122,7 +113,6 @@ export const INSTALL_TARGETS: Readonly> =
linux: {
platform: "linux",
title: "Run the ADE brain on Linux",
- subtitle: "One command. No desktop app needed.",
terminal: {
heading: "Install from your terminal",
command: LINUX_INSTALL_COMMAND,
@@ -130,9 +120,7 @@ export const INSTALL_TARGETS: Readonly> =
"Run the brain on any Linux box and control it from ADE on your Mac, Windows, phone, or the web.",
analyticsFeature: MARKETING_FEATURES.COPY_INSTALL_COMMAND_LINUX,
},
- footnote: {
- text: "x64 and arm64. The brain is the whole engine — the desktop app is just one of its faces.",
- },
+ footnote: {},
openAnalyticsFeature: MARKETING_FEATURES.INSTALL_DIALOG_LINUX,
},
});
diff --git a/docs/README.md b/docs/README.md
index b26e0ea70..e76b22033 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -12,6 +12,10 @@ The mental model up front: ADE has a **brain** — the always-on, machine-owned
4. [**features/**](./features/) — per-feature subfolders, each with a `README.md` + detail docs. Start with `remote-runtime/`, `ade-code/`, and `sync-and-multi-device/` for the brain+clients picture.
5. [**playbooks/**](./playbooks/) — operational workflows agents can follow directly.
+Running ADE from a checkout starts with
+[`development/local-development.md`](./development/local-development.md) for the
+glossary, the dev command matrix, lane worktrees, and local Alpha/Beta packaging.
+
Windows release engineering starts with
[`development/windows-release-proof.md`](./development/windows-release-proof.md)
for the exact-SHA evidence contract and
@@ -31,6 +35,7 @@ docs/
│ ├── ship-lane.md # autonomous PR-to-merge driver
│ └── windows-signed-release.md # signed Windows publication
├── development/
+│ ├── local-development.md # run, test, and package ADE locally
│ ├── windows-release-proof.md # exact-SHA evidence schema + validator
│ ├── windows-full-system-scenarios.json # external Windows acceptance inventory
│ ├── windows-source-provenance.json # #999 source/rebase/stack mapping
diff --git a/docs/development/local-development.md b/docs/development/local-development.md
new file mode 100644
index 000000000..5610c8101
--- /dev/null
+++ b/docs/development/local-development.md
@@ -0,0 +1,259 @@
+# Local development
+
+Everything you need to run, test, and package ADE from a checkout. The README
+keeps the short version; this is the full reference.
+
+## Glossary
+
+| Term | Meaning |
+| --- | --- |
+| Brain | The always-on, machine-owned ADE process for one channel. It carries the sync websocket, project catalog, local RPC endpoint, and executor authority. |
+| Runtime | ADE execution machinery: processes/services that open DBs and run agents, PTYs, git, and orchestration. A runtime process can host the brain role, but "brain" is the authority/lifecycle term. |
+| Manual runtime | A foreground runtime process started explicitly with `ade runtime run --socket `. Sync is always off; use it for dev/test work instead of the automated stable/beta/alpha brain service. |
+| Machine | A physical computer with a per-channel ADE home and stable sync device identity. |
+| Channel | A release lane such as stable, beta, alpha, or dev. Each channel has its own ADE home. |
+| Client | A surface that attaches to the brain: desktop, `ade code`, ADE Mobile, or an SSH-bound desktop window. |
+| Project | A registered repo with one ADE database at `/.ade/ade.db`. |
+| Lane | A task worktree under `.ade/worktrees/` that shares the project database. |
+| Catalog | The machine-level project list served by the brain to clients and ADE Mobile. |
+
+## Brain vs. manual runtime
+
+This table describes the current code behavior.
+
+| Capability | Brain | Manual runtime |
+| --- | --- | --- |
+| Lifecycle | Always-on login service for an ADE channel; Desktop can install/repair it in packaged builds. | Foreground process started explicitly with `ade runtime run --socket `. |
+| Owner | Machine / ADE install. | User or developer who launched it. |
+| Sync | Yes. | No; `ade runtime run` forces sync off. |
+| Mobile websocket | Yes. | No. |
+| Phone pairing / PIN | Yes. | No. |
+| Mobile/machine catalog authority | Yes. | No; it may expose registry data to explicitly attached clients, but ADE Mobile ignores manual runtimes. |
+| Runs agents, PTYs, git, lanes, PR work | Yes. | Yes. |
+| Clients | Desktop, `ade code`, and ADE Mobile attach to it; SSH-bound desktop windows attach to the remote machine's ADE transport. | Only clients explicitly pointed at its endpoint attach to it. |
+| Survives client close | Yes, when service-owned. Desktop/TUI fallback spawns still exist for recovery and dev paths. | Only while that foreground process is still running. |
+
+## What to rebuild after a change
+
+| Change you made | What to run/test | Why |
+| --- | --- | --- |
+| iOS UI/client-only change | Build the iOS app from the lane and connect it to an existing ADE brain. | The phone is a client; UI-only work does not require a new brain. |
+| iOS sync protocol, project catalog, pairing, or remote-command change | Rebuild/restart the target brain from the lane, then build the iOS app from the same lane. | The phone and brain both need the new contract. |
+| Desktop renderer UI change | Run/build Desktop from the lane and let it attach to the channel brain. | Renderer code is client-side unless it depends on new brain APIs. |
+| Desktop main/preload/runtime-bridge change | Run/build Desktop from the lane; rebuild/restart the brain only if the runtime RPC contract or brain behavior changed. | Electron main is a client/bridge, but some handlers route through the brain. |
+| `ade code` / TUI UI change | Build/run `ade code` from the lane and attach to the existing brain. | The TUI is a client of the brain. |
+| TUI command that depends on new RPC or shared types | Rebuild/restart the brain from the lane, then run the lane's `ade code`. | Both sides of the RPC contract must match. |
+| Brain, sync, project catalog, pairing, agents, PTYs, lanes, PR workflows, or CLI runtime service change | Rebuild the ADE CLI/brain from the lane and restart the target brain before testing clients. | These live in the always-on process; existing installed brains keep running old code. |
+| Manual runtime behavior | Start `ade runtime run --socket ` from the lane and point a client at that endpoint. | Manual runtimes are standalone and sync is always off. |
+| Remote runtime / SSH transport change | Test with a remote target using the lane-built desktop/runtime artifacts. | SSH-bound windows talk to the remote ADE transport, not the local mobile brain. |
+| Docs or web-only change | Run the docs/web preview or static checks for that surface. | No ADE brain/client lifecycle is involved. |
+
+## Running ADE locally
+
+First-time setup:
+
+```bash
+npm run setup
+```
+
+Daily desktop dev:
+
+```bash
+npm run dev
+```
+
+That aliases to `npm run dev:desktop`: it rebuilds `apps/ade-cli`, refreshes the shared dev runtime at `/tmp/ade-runtime-dev.sock` when needed, launches the Electron desktop app, and points desktop at that runtime. This is the normal desktop-dev flow.
+
+When these commands are run from an ADE lane worktree under `.ade/worktrees/`,
+they still run code from that lane checkout, but they open the primary checkout's
+project data by default. For example, running from
+`/path/to/ADE/.ade/worktrees/my-lane` opens `/path/to/ADE` as the ADE project
+and uses the lane path as the workspace root for `dev:code`.
+
+Dev command matrix:
+
+```bash
+npm run dev:desktop # refresh shared dev runtime, then launch desktop
+npm run dev:desktop:attach # desktop only; fail if dev runtime is not already running
+npm run dev:desktop:clean # desktop only; clear Vite cache before launch
+npm run dev:code:web # `ade code` in the browser (PTY + inspector WebSocket)
+npm run dev:code:attach # terminal TUI only; fail if dev runtime is not already running
+npm run dev:runtime # runtime only in the foreground
+npm run dev:all # start shared dev runtime, then run desktop/code attach commands in separate terminals
+npm run dev:stop # stop the dev runtime
+npm stop dev # same as dev:stop
+```
+
+Browser preview of the desktop renderer (UI work without Electron):
+
+```bash
+cd apps/desktop
+npm run dev:vite # mock-only: synthetic window.ade, fast shell
+ADE_PROJECT_ROOT=/path/to/project npm run dev:vite:live # mock + live runtime bridge (Linear, sync, lanes)
+```
+
+`dev:vite:live` starts the ADE dev runtime, a localhost HTTP bridge to the runtime endpoint, and Vite with a proxy so the browser can call real backend methods on top of the mock. Set `ADE_PROJECT_ROOT` to your primary project checkout (where `.ade/` and secrets live), especially when working from a lane worktree. Full details: [apps/desktop/README.md](../../apps/desktop/README.md).
+
+The dev commands intentionally use a temp endpoint and a separate Electron profile so they do not collide with the installed ADE app:
+
+```text
+/tmp/ade-runtime-dev.sock
+~/Library/Application Support/ade-desktop-dev
+```
+
+Override it when needed:
+
+```bash
+npm run dev:desktop -- --socket /tmp/my-ade-dev.sock
+npm run dev:code -- --socket /tmp/my-ade-dev.sock
+ADE_DEV_RUNTIME_SOCKET_PATH=/tmp/my-ade-dev.sock npm run dev:runtime
+ADE_DESKTOP_BRIDGE_SOCKET_PATH=/tmp/my-bridge.sock npm run dev:desktop
+```
+
+> [!WARNING]
+> Never point `--socket` at an ADE runtime you do not want restarted. In the default
+> `--auto` mode the wrapper **shuts down and recreates** whatever runtime is
+> already listening on that endpoint whenever its build hash does not match the
+> checkout you are launching — so aiming at the production `~/.ade/sock/ade.sock`
+> or another lane's live runtime will kill it (and any clients attached to it).
+> Point at a fresh per-lane endpoint (below), or use
+> `npm run dev:desktop:attach -- --socket ` to connect to an already-running
+> runtime — attach mode refuses on a build-hash mismatch instead of restarting.
+
+## Run a specific lane worktree
+
+To preview a lane's build without disturbing your installed ADE app or its
+runtime, run `dev:desktop` **from the lane checkout** on its own endpoints. Running
+from the worktree makes Vite serve that lane's code, while the wrapper
+auto-resolves project *data* to the primary checkout (as described above), so you
+see the lane's UI backed by your real lanes, PRs, and chats:
+
+```bash
+cd /path/to/ADE/.ade/worktrees/
+ADE_DESKTOP_BRIDGE_SOCKET_PATH=/tmp/ade-desktop-bridge-.sock \
+ npm run dev:desktop -- --socket /tmp/ade-runtime-.sock
+```
+
+The per-lane `--socket` gives the lane build an isolated runtime (and sidesteps
+the warning above — nothing else is listening there); the per-lane bridge endpoint
+avoids colliding with the installed app's `~/.ade/sock/desktop-bridge.sock`. Set
+`ADE_PROJECT_ROOT=/path/to/other-project` only if you want a different project's
+data. A fresh worktree has no `node_modules` — symlink the root and `apps/desktop`
+`node_modules` from the primary checkout, or run `npm run setup` inside the
+worktree first.
+
+When launching that same flow through ADE App Control from a running Alpha/Beta
+ADE window, also clear the packaged-channel environment variables inherited from
+the host app (and use an absolute lane cwd). Otherwise the dev Electron app can
+reuse the Alpha/Beta profile and lose the single-instance lock instead of opening
+the lane build:
+
+```bash
+ade --socket app-control launch --force \
+ --cwd "/path/to/ADE/.ade/worktrees/" \
+ --command "sh -lc 'ADE_PACKAGE_CHANNEL= ADE_DESKTOP_APP_NAME= ADE_DESKTOP_BRIDGE_SOCKET_PATH=/tmp/ade-desktop-bridge-.sock npm run dev:desktop -- --socket /tmp/ade-runtime-.sock'" \
+ --text
+```
+
+To test auto-runtime creation, use the default dev commands after stopping the dev runtime:
+
+```bash
+npm run dev:stop
+npm run dev:desktop # tests the desktop wrapper creating the dev runtime
+npm run dev:stop
+npm run dev:code # tests TUI wrapper creating the dev runtime
+```
+
+## Rebuild ADE Alpha or Beta locally
+
+Use these commands when you need a local packaged macOS channel build without
+waiting for the GitHub release workflow.
+
+```bash
+npm run package:alpha # current checkout -> ADE Alpha.app, ade-alpha, ~/.ade-alpha
+npm run package:beta # origin/main -> ADE Beta.app, ade-beta, ~/.ade-beta
+```
+
+`package:alpha` builds exactly the checkout you are in. `package:beta` is
+release-like: it fetches `origin/main`, fast-forwards the local `main` checkout
+when possible, and builds that checkout as `ADE Beta`. It does not create a
+packaging worktree.
+
+To smoke-test the Beta channel from a PR branch before it lands on `main`, pass
+the branch checkout explicitly:
+
+```bash
+node scripts/package-channel.mjs beta --repo "$PWD" --skip-install
+```
+
+Local channel outputs:
+
+```text
+apps/desktop/release-alpha/mac-arm64/ADE Alpha.app
+apps/desktop/release-alpha/ADE-Alpha-local.zip
+apps/desktop/release-beta/mac-arm64/ADE Beta.app
+apps/desktop/release-beta/ADE-Beta-local.zip
+```
+
+Install the build you want to test by replacing the matching app in
+`/Applications`:
+
+```bash
+rm -rf "/Applications/ADE Beta.app"
+ditto "apps/desktop/release-beta/mac-arm64/ADE Beta.app" "/Applications/ADE Beta.app"
+xattr -dr com.apple.quarantine "/Applications/ADE Beta.app" 2>/dev/null || true
+```
+
+Use `ADE Alpha.app` and `release-alpha` for Alpha. If the Dock already has an
+ADE Alpha/Beta icon, remove and re-pin it after installing from `/Applications`;
+Dock icons keep the exact bundle path they were pinned from, so an old icon can
+launch a stale `apps/desktop/release-*` build even after `/Applications` was
+updated.
+
+Replacing the app bundle does not replace a brain process that is already
+running for that channel. Before restarting the channel brain, close or finish
+any active ADE Desktop, ADE Code, agent, or mobile sessions that depend on it.
+Then restart and verify the channel brain through the CLI:
+
+```bash
+ADE_PACKAGE_CHANNEL=beta ADE_HOME="$HOME/.ade-beta" ade brain status --text
+ADE_PACKAGE_CHANNEL=beta ADE_HOME="$HOME/.ade-beta" ade brain restart --text
+ADE_PACKAGE_CHANNEL=beta ADE_HOME="$HOME/.ade-beta" ade doctor --text
+ADE_PACKAGE_CHANNEL=beta ADE_HOME="$HOME/.ade-beta" ade sync status --text
+```
+
+For Alpha, use `ADE_PACKAGE_CHANNEL=alpha` and `ADE_HOME="$HOME/.ade-alpha"`.
+Do not kill ADE brain processes directly during normal testing; the channel
+brain owns the mobile sync websocket and may have desktop, terminal, or phone
+clients attached. If you intentionally leave an old incompatible brain running,
+the packaged desktop may preserve it and launch a private no-sync fallback
+runtime for the desktop window, which means the Mobile drawer will not be using
+that fallback's sync service.
+
+Launching a packaged channel build should install or repair that channel's
+always-on brain service. Official auto-updates also refresh this service on the
+first launch after an update, and the installed service is expected to report the
+same runtime build hash as the packaged desktop CLI:
+
+```bash
+launchctl print gui/$(id -u)/com.ade.runtime.beta
+ls -l ~/Library/LaunchAgents/com.ade.runtime.beta.plist ~/.ade-beta/sock/ade.sock
+```
+
+Set or rotate the channel's mobile pairing PIN from **Connections > Mobile**,
+or from the CLI against that channel home:
+
+```bash
+ADE_PACKAGE_CHANNEL=beta ADE_HOME="$HOME/.ade-beta" ade brain pin generate
+ADE_PACKAGE_CHANNEL=beta ADE_HOME="$HOME/.ade-beta" ade brain pin set 123456
+```
+
+For Alpha, use `com.ade.runtime.alpha` and `~/.ade-alpha`. These builds do not
+replace the production `ADE.app`, production `ade`, or `~/.ade` runtime/state.
+Alpha and Beta also use separate Electron profile directories
+(`ade-desktop-alpha` / `ade-desktop-beta`) so browser storage and window state
+do not collide with dev or stable. Local channel packages include this Mac's
+runtime binary. Release builds still require the full cross-platform runtime
+artifact set used by remote runtime bootstrap.
+
+Validate with `npm --prefix apps/desktop run typecheck` and `npm run test:desktop:sharded` for the full desktop suite. The desktop test suite is large, so run the smallest relevant subset first.
diff --git a/docs/features/onboarding-and-settings/README.md b/docs/features/onboarding-and-settings/README.md
index 21f8a54d4..5c44d9524 100644
--- a/docs/features/onboarding-and-settings/README.md
+++ b/docs/features/onboarding-and-settings/README.md
@@ -375,7 +375,8 @@ Renderer — settings:
— toggles `prTranscriptGists.enabled` in project local config.
- `apps/desktop/src/renderer/components/settings/AboutSection.tsx`
— About (version, runtime); rendered in General.
- `AdeCliSection.tsx` is rendered in Integrations. The
+ `AdeCliSection.tsx` is rendered in General too, directly under Project —
+ CLI availability is app basics, not an integration. The
`EnvironmentSection.tsx` wrapper that used to pair them is gone.
- `apps/desktop/src/renderer/components/settings/settingsSectionUi.tsx`
— shared section headers (`SettingsSectionShell`) and toggle styling.
@@ -868,10 +869,19 @@ irm https://ade-app.dev/install.ps1 | iex # Windows PowerShell
The script downloads the static `ade-` binary plus its
native dependency archive, drops the binary in `$ADE_INSTALL_DIR` (or
-`~/.local/bin`), extracts native modules under `~/.ade/runtime//`,
+`~/.ade/bin`), extracts native modules under `~/.ade/runtime//`,
and best-effort registers the login service. No Node or npm is required —
the binary is a Node SEA.
+Both installers then put `ade` on `PATH` before anything else prompts:
+Windows updates the per-user `PATH` unless `-NoPath`; POSIX writes
+`~/.ade/env` and, with consent on a tty, appends one marker-commented
+`. "$HOME/.ade/env"` block to the shell profile (`~/.zshrc`,
+`~/.bash_profile` on macOS bash, `~/.bashrc` on Linux bash). The block is
+grep-guarded so re-running the installer never duplicates it; fish and
+unrecognized shells get printed instructions instead, as do
+non-interactive runs and `ADE_INSTALL_NO_PATH=1`.
+
On an interactive terminal the script then offers to run `ade connect`,
which signs the machine in, ensures the login service, and publishes the
machine to the account directory so desktop, web, and iOS can reach it.
@@ -902,11 +912,11 @@ changing rather than which service backs it:
| Tab | Section file | What lives here |
|---|---|---|
-| General | `ProjectSection.tsx`, `LaunchPromptSection.tsx`, `AutoUpdatesSection.tsx`, `ProductAnalyticsSection.tsx`, `AboutSection.tsx` | Project identity, launch behavior, updates, privacy, and version info. Legacy `?tab=workspace`, `?tab=project`, `?tab=context`, `?tab=onboarding`, `?tab=help`, and `?tab=tours` land here. |
+| General | `ProjectSection.tsx`, `AdeCliSection.tsx`, `LaunchPromptSection.tsx`, `AutoUpdatesSection.tsx`, `ProductAnalyticsSection.tsx`, `AboutSection.tsx` | Project identity, the `ade` command line (`#ade-cli`), launch behavior, updates, privacy, and version info. Legacy `?tab=workspace`, `?tab=project`, `?tab=context`, `?tab=onboarding`, `?tab=help`, and `?tab=tours` land here. |
| Appearance | `AppearanceSection.tsx` (renders `ChatAppearancePreview`) | Theme, chat typography and density, chat surface (tint, corners), chat details (copy-button position, message minimap, prompt-stash bookmark, live preview), and terminal text. Rebuilt on the primitives — the old version used `font-mono` for every prose line and four different control idioms. Persisted to `localStorage` under `ade.userPreferences.v1`. |
| Agents & Models | `ProvidersSection.tsx`, `OAuthConnectModal.tsx`, `AiFeaturesSection.tsx`, `BudgetCapEditor.tsx`, `DictationSection.tsx` | Provider connections, model routing, background helpers, spend cap, and voice input — merged because provider auth and per-task model routing are one mental model. **Coding Agents** cards (Claude Code, Codex CLI, Cursor, Droid) and **OpenCode — Universal Model Access**. Background helpers cover summaries, PR descriptions, commit messages, auto-naming, and scheduled-work recovery. Legacy `?tab=ai`, `?tab=providers`, `?tab=background-jobs`, and `?tab=automations` land here. |
| Lanes & Git | `LaneBehaviorSection.tsx`, `LaneTemplatesSection.tsx`, `PrChatTranscriptsSection.tsx` | How lanes start (`new lane base`), stay current (`auto-rebase`), and tell you they fell behind (`rebase suggestions` off/badge/banner + min-behind threshold), plus lane init recipes and PR transcript gists. Legacy `?tab=lane-templates` lands here. |
-| Integrations | `GitHubIntegrationSection.tsx`, `LinearIntegrationSection.tsx`, `AdeCliSection.tsx` | GitHub, Linear, and the `ade` command line — reinstated as its own tab. Legacy `?tab=integrations`, `?tab=github`, and `?tab=linear` land here, as does `?integration=github|linear|cli`. |
+| Integrations | `GitHubIntegrationSection.tsx`, `LinearIntegrationSection.tsx` | GitHub and Linear — reinstated as its own tab. Legacy `?tab=integrations`, `?tab=github`, and `?tab=linear` land here; `?integration=github|linear` too, while `?integration=cli` follows the `ade-cli` anchor to General. |
| Notifications & Sound | `NotificationsSection.tsx`, `AgentCompletionSoundSection.tsx` | Delivery for `AttentionPreferences`: per-event policy (off / ambient / notify) for agent and PR events, quiet hours, focus suppression, phone delivery and escalation, the agent completion sound, and the Lanes banner budget. The per-event matrix and quiet hours were fully modelled with balanced defaults but had **no UI at all** before this tab. |
| Activity | `ActivitySection.tsx`, `ActivitySettingsControls.tsx` | The surfaces Activity itself paints: the ADE notch (enabled, reveal mode, expanded panel), celebrations, Activity sounds, hide-previews, and the per-machine notification mute. `ActivitySettingsControls` is mounted here **and** by the gear inside the Activity popover and pane, so the two entry points cannot drift. Legacy `?tab=attention` plus the `#attention-notch`, `#celebrations`, `#attention-sounds`, and `#hide-previews` hashes land here. |
| Secrets | `SecretsSection.tsx` | Encrypted key/value pairs for agents, desktop, and the CLI, with `.env` import. Legacy `?tab=secret` lands here. |
From 14f840615799d2d8a2cbdb00b36b94a25b3d58f8 Mon Sep 17 00:00:00 2001
From: Arul Sharma <31745423+arul28@users.noreply.github.com>
Date: Wed, 5 Aug 2026 02:16:53 -0400
Subject: [PATCH 4/7] docs: drop the graph image from the README, condense
CONTRIBUTING
The worktree-graph image and its catch-all caption leave the README. The
signed-release section leaves CONTRIBUTING, which now says the thing that
actually matters: contributions are wanted, and good PRs get merged.
115 lines to 33. Also repoints two stale README anchors at the new
local-development doc.
Co-Authored-By: Claude Fable 5
---
CONTRIBUTING.md | 124 +++++++----------------------------------
README.md | 6 --
apps/desktop/README.md | 2 +-
3 files changed, 22 insertions(+), 110 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0e4b6e35b..e90444f2b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,115 +1,33 @@
# Contributing to ADE
-Pull requests are welcome from anyone. Only the maintainer (Arul) can merge or close PRs.
+Contributions are wanted and encouraged. If a pull request is high quality and
+useful, it gets merged. Only the maintainer (Arul) can merge or close PRs.
-## Development Setup
+Bug reports and feature requests count too, especially on Windows, which is
+still in beta and where the rough edges are easiest to find.
-Install dependencies for each app from the repo root:
+## Getting set up
```bash
-npm run setup
+npm run setup # first time only
+npm run dev # rebuild the CLI, refresh the dev runtime, launch desktop
```
-Start the normal desktop development flow from the repo root:
+Everything else lives in
+[docs/development/local-development.md](docs/development/local-development.md):
+the full dev command matrix, running a lane worktree in isolation, previewing
+the renderer without Electron, and packaging local Alpha and Beta builds.
-```bash
-npm run dev
-```
-
-This builds the ADE CLI, refreshes the shared dev runtime when needed, launches
-the Electron desktop app, and points desktop at that runtime. For renderer-only
-UI work, see [apps/desktop/README.md](apps/desktop/README.md).
-
-`npm run dev` also works from a lane checkout under `.ade/worktrees/`. To
-run a lane build **in isolation** — its own runtime + bridge sockets, without
-restarting your installed app's runtime — follow
-[Run a specific lane worktree](README.md#run-a-specific-lane-worktree) in the root
-README. Key rule: never aim `dev:desktop --socket` at a runtime you do not want
-`--auto` to shut down; use a fresh per-lane `/tmp/ade-runtime-.sock`.
-
-On Windows, `npm run dev` uses a per-user named pipe instead of a Unix socket
-path, and ADE runs on Windows 10/11 x64 only. Platform behaviour, the background
-brain contract, and the current gaps are documented in
-[docs/development/windows-support.md](docs/development/windows-support.md).
-
-## Before Submitting
-
-- Run the smallest relevant checks for your change first
-- Desktop: `npm --prefix apps/desktop run typecheck`, targeted Vitest files, and `npm --prefix apps/desktop run lint` when touching renderer or main-process code
-- ADE CLI: `npm --prefix apps/ade-cli run typecheck` and `npm --prefix apps/ade-cli run test` when touching CLI/runtime code
-- Docs: `node scripts/validate-docs.mjs` (fetch tags first if your clone is shallow)
-- TypeScript strict mode is enabled
-- Tests use Vitest
-
-## Signed releases
-
-### macOS
-
-For ADE's current release path, the correct Apple objects are:
-
-- `Developer ID Application` certificate for signing the `.app`
-- App Store Connect `Team Key` for notarization
-
-You do not need these for the current ADE flow:
-
-- `Developer ID Installer` certificate, because ADE ships `dmg` + `zip`, not `pkg`
-- A provisioning profile, unless the app later adds Apple advanced capabilities that require a Developer ID provisioning profile
-
-The tagged macOS release workflow expects these GitHub Actions secrets:
-
-- `CSC_LINK` — Developer ID Application certificate (`.p12`), typically base64-encoded
-- `CSC_KEY_PASSWORD` — password for the Developer ID Application certificate
-- `APPLE_API_KEY_P8` — raw contents of the App Store Connect Team API key (`AuthKey_*.p8`)
-- `APPLE_API_KEY_ID` — App Store Connect key ID
-- `APPLE_API_ISSUER` — App Store Connect issuer ID
-
-The release workflow builds ADE in three stages:
-
-1. `arm64` app bundle on `macos-latest`
-2. `x64` app bundle on `macos-15-intel`
-3. universal app merge, then signing, notarization, `dmg`/`zip` packaging, and GitHub release publish from the merged app
-
-Current Apple setup flow:
-
-1. On a Mac, create a CSR in Keychain Access using `Certificate Assistant > Request a Certificate from a Certificate Authority`, and save it to disk.
-2. In Apple Developer > Certificates, Identifiers & Profiles > Certificates, click `+`.
-3. Under `Software`, choose `Developer ID`, then choose `Developer ID Application`.
-4. Upload the CSR, download the `.cer`, and double-click it so it appears in Keychain Access under `login > My Certificates`.
-5. Export that certificate from Keychain Access as a `.p12` file with a password. This is the certificate material used by `CSC_LINK`.
-6. In App Store Connect > Users and Access > Integrations > Team Keys, generate a Team API key and download the `.p8` file. Note the key ID and issuer ID.
-
-To test a signed macOS build locally, export the matching environment variables expected by `electron-builder` and run:
-
-```bash
-cd apps/desktop
-export CSC_LINK=/absolute/path/to/DeveloperIDApplication.p12
-export CSC_KEY_PASSWORD=...
-export APPLE_API_KEY=/absolute/path/to/AuthKey_XXXXXXXXXX.p8
-export APPLE_API_KEY_ID=XXXXXXXXXX
-export APPLE_API_ISSUER=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
-npm run dist:mac:signed
-```
-
-To test the unsigned intermediate app bundle that the CI workflow produces per architecture, run:
-
-```bash
-cd apps/desktop
-npm run dist:mac:dir -- --arm64
-```
-
-### Windows
-
-Windows release publication is gated on the repository variable
-`ADE_WINDOWS_PUBLIC_RELEASE_ENABLED`. With it unset, the Windows jobs skip
-cleanly and the tagged release ships macOS assets only. The signed Windows path
-requires a pinned Authenticode identity, the same signer for the installer and
-`ADE.exe`, and a trusted RFC3161 timestamp. Pull-request preview builds are
-unsigned and are for internal testing only.
+## Before you submit
-The tagged release workflow should be run from a tag that points at `main`. Push the release tag only after the intended `main` commit is in place.
+Run the smallest checks that cover what you changed:
-## Code Style
+- Desktop: `npm --prefix apps/desktop run typecheck`, the relevant Vitest files,
+ and `npm --prefix apps/desktop run lint` for renderer or main process code
+- ADE CLI: `npm --prefix apps/ade-cli run typecheck` and
+ `npm --prefix apps/ade-cli run test`
+- Docs: `node scripts/validate-docs.mjs`
-- TypeScript with strict mode
-- Follow existing patterns in the codebase
-- Keep changes focused and minimal
+TypeScript runs in strict mode and tests are Vitest. The best style guide is the
+code already sitting around whatever you are changing, so keep changes focused
+and match what is there.
diff --git a/README.md b/README.md
index da864f084..307fff0e1 100644
--- a/README.md
+++ b/README.md
@@ -89,12 +89,6 @@ Every worktree, agent, and PR synced to iOS. Start a task on the desktop, approv
-
-
-
-
-Plus files, terminals, git history, the workspace graph, multi-tasking, Linear sync, cron automations, computer-use proofs, and the `ade` CLI.
-
## Install
Think of ADE as having 4 UI clients (web, desktop app, terminal, and mobile app) you can interact and work with. Each one of those clients needs to connect to a machine, and it does that via "ADE Brain". You can install the Brain to any machine, and magically it will then be accessible and controllable by any of those UI clients. The machine just needs to stay on, and suddenly you get a full agentic development experience from anywhere.
diff --git a/apps/desktop/README.md b/apps/desktop/README.md
index e924f1de3..0d7854273 100644
--- a/apps/desktop/README.md
+++ b/apps/desktop/README.md
@@ -36,7 +36,7 @@ The mock stays the fallback for everything the bridge does not override. UI work
> This section covers the **browser preview** of the renderer. For the full
> Electron app, use `npm run dev` from the repo root — or, to run a specific lane
> build in isolation (its own runtime + bridge endpoints), see
-> [Run a specific lane worktree](../../README.md#run-a-specific-lane-worktree) in
+> [Run a specific lane worktree](../../docs/development/local-development.md#run-a-specific-lane-worktree) in
> the root README. Do not aim `dev:desktop --socket` at a runtime you do not want
> `--auto` to shut down (e.g. the production `~/.ade/sock/ade.sock`).
From 21f18464d187b777343ebbbed8a5598497c0fe22 Mon Sep 17 00:00:00 2001
From: Arul Sharma <31745423+arul28@users.noreply.github.com>
Date: Wed, 5 Aug 2026 02:30:45 -0400
Subject: [PATCH 5/7] docs(readme): add the web client capture
The blanket *.png ignore already carried negations for docs, web public,
and iOS assets; assets/ was missing, so hero.png had to be force-added.
Add the negation so README captures track normally.
Co-Authored-By: Claude Fable 5
---
.gitignore | 1 +
README.md | 1 -
assets/readme/web-client.png | Bin 0 -> 914988 bytes
3 files changed, 1 insertion(+), 1 deletion(-)
create mode 100644 assets/readme/web-client.png
diff --git a/.gitignore b/.gitignore
index 12189ba90..44d509a1d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ node_modules
*_diff.txt
*.png
!docs/**/*.png
+!assets/**/*.png
!apps/web/public/**/*.png
!apps/ios/**/*.png
diff --git a/README.md b/README.md
index 307fff0e1..9fe535e07 100644
--- a/README.md
+++ b/README.md
@@ -58,7 +58,6 @@ The full workspace. Every agent and every worktree, tiled side by side. macOS an
-
**Web client**
diff --git a/assets/readme/web-client.png b/assets/readme/web-client.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a181316dbe09c2e0bc3c55f25907bad75dbe54c
GIT binary patch
literal 914988
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