Upgrading from March
Move a March 2026 Edward onto this release without losing what he knows.
This page is for an Edward installed from the March 2026 public release (main up to commit 408e1d5, or the v1.0.0 tag). A fresh install needs none of it: start at Quick start. The full version, with every command and edge case, is docs/UPGRADING.md in the repository.
The short version: stop Edward, back up the database, pull, move the old Python environment aside, run ./setup.sh, tidy .env, start him. The first start migrates the database in place. Plan on half an hour, most of it installs and the first frontend build.
What changes
Almost everything around the memory store. Your memories, documents, conversations, files, scheduled events, password and settings are kept. What Edward can do, and how, is new:
- Every model call goes through the Claude API, one route per purpose, under a daily spend cap ($5 by default). The model you picked in March is replaced by the route’s.
- One toolset of 14 tools on every surface, and a sandboxed computer of his own. The Python/JavaScript/SQL sandboxes, Lightpanda and self-evolution are gone.
- The heartbeat’s triage is replaced by the mind: wakes, follow-through, a silent nightly, a journal and (opt-in) noticing.
- @Edward pings in iMessage are answered by default if he reads your messages (step 8).
- The app is new: Today is the front door, the Edward tab replaces the old settings page, and the frontend runs as a production build.
1. Stop Edward
The March restart.sh ran the backend on :8000 and npm run dev on :3000:
lsof -t -iTCP:8000 -sTCP:LISTEN | xargs kill
lsof -t -iTCP:3000 -sTCP:LISTEN | xargs killIf you made your own launchd job or login item for him, unload it first.
2. Back up
PG="$(brew --prefix postgresql@16)/bin"
mkdir -p ~/edward-backups
"$PG/pg_dump" -Fc -d edward -f ~/edward-backups/edward-march-final.dump
"$PG/pg_restore" --list ~/edward-backups/edward-march-final.dump | head
cp .env ~/edward-backups/env-march
cp backend/.jwt_secret ~/edward-backups/jwt_secret-march 2>/dev/null
cp -R backend/storage ~/edward-backups/storage-march 2>/dev/nullKeep the dump until you have used the new Edward for a while; the nightly backup’s rotation never touches that name.
3. Pull the release
git pullPut any changes of your own on a branch first: this release rewrites most files, so expect to port them by hand. A fresh clone works just as well (copy .env, backend/.jwt_secret and backend/storage/ into it); the database is shared, not part of the checkout.
4. Move the old Python environment aside
mv backend/.venv backend/.venv.marchThis release needs Homebrew’s Python 3.12 and installs pinned versions, so a clean environment is simplest.
5. Run setup
./setup.shIt keeps your .env and asks only for what is empty: your name, the API key if missing, your time zone. It builds pgvector for Postgres 16 when it is missing (the March setup used a Homebrew bottle that no longer ships), creates the venv, installs Playwright’s headless shell, runs npm ci and builds the Swift helpers. It stops on an Intel Mac or under Rosetta.
At the end it prints the python that needs Full Disk Access. Grant it even if you granted one in March: the permission belongs to a binary’s path, and the new environment may run on a different python.
6. Update .env
Compare yours with .env.example. The backend reads only the .env at the repo root (move a backend/.env up), and a variable set in your shell or by launchd now wins over the file. The changes that matter:
| Setting | What to do |
|---|---|
LANGCHAIN_TRACING_V2, LANGCHAIN_API_KEY, LANGCHAIN_PROJECT | Delete. LangSmith support is gone, but LangChain would keep sending traces while they are set. |
GITHUB_TOKEN | Delete; nothing reads it. |
EDWARD_OWNER_NAME, EDWARD_OWNER_HANDLES, EDWARD_OWNER_EMAILS, TIMEZONE | New. Who you are, and how he recognises your own messages. |
EDWARD_INSTRUCTION_HORIZON_SINCE | New. Set it to the day you upgrade (e.g. 2026-10-12), so the weekly memory upkeep leaves the instructions March stored alone instead of letting the ones it can’t trace to you lapse. |
TWILIO_* | Webhooks now check Twilio’s signature and need TWILIO_AUTH_TOKEN; only your own numbers get an answer (EDWARD_TWILIO_ANSWER_ANYONE=on brings back answering everyone, at a risk). |
HTML_HOSTING_URL, HTML_HOSTING_API_KEY | No default host any more; set both if you used hosted pages. |
EDWARD_PUBLIC_BASE_URL, EDWARD_COOKIE_SECURE | New. Your tunnel’s https address, if you use one; the cookie setting only for a plain-HTTP network you trust. |
EDWARD_DAILY_SPEND_CAP_USD | New, default 5. March had no cap. |
7. Start him
bash scripts/install-launchagents.sh # always on
# or
./restart.sh # by handThe first start builds the frontend and migrates the database; watch /tmp/edward-backend.log. Sign in with your March password. The one-time setup code is only for an install with no password; if your March Edward never had one, set it on the Mac with cat backend/.setup_code.
8. Check what he listens to
- Mind → Skills. Your March switches carry over. Shell/Bash is now his whole computer, Web Search gates search and fetch, iMessage gates reading and sending. Code Interpreter, JavaScript and SQL say “Retired”.
- Attention → Listening. March turned Messages on by default. If Edward read your iMessages then, he reads them now, and he now answers @Edward in any chat, from anyone (friends inside limits, unknown numbers held for you), from your own iMessage account. If you don’t want that, turn Messages off in its Configuration view;
EDWARD_PINGS=offalone is not enough. - House → Locale. Check the time zone: reminders, quiet hours, the nightly and “today” follow it.
- Work → Events. Your reminders and recurring tasks are kept; check their times in your zone.
Two optional steps (adopting this release’s persona, and backfills that tidy March data) are in UPGRADING.md, as is rolling back to March.
What is gone
| March feature | Now |
|---|---|
| Self-evolution (Edward proposing, testing and deploying changes to his own code) | Gone, its tables dropped. He keeps a wishlist for you instead (Work → Wishlist) and never promises to build what he wishes for. |
| Browser automation through Lightpanda | Gone. His own browser is Playwright’s headless shell, and with EDWARD_CHROME_HANDS=on he can use your Chrome. |
| Python, JavaScript and SQL sandboxes | Gone. His sandboxed shell runs python, node and sqlite3. |
| LangSmith tracing | Gone. Each turn’s reasoning, tools and memory hits are stored with the answer and shown in the chat’s work rail. |
| Morning briefing, meeting prep, open-loop nudges, pattern detection | Gone. Wakes (follow-through, the nightly) and opt-in noticing replace them. |
| The heartbeat’s triage and its calendar listener | Gone. Listening stores what arrives and hands it to the mind; the calendar is read when needed. |
| Self-service install of MCP servers | Edward can’t install servers himself any more. Servers you installed still load, and you manage them in Mind → Servers. |
| The persistent-database, file-storage and hosted-page tools | Out of his toolset (he has his own home folder). Your saved files and databases are kept and browsable in the Memory room. |
What is dormant
Workers and coding sessions. The orchestrator, its routes and the Workers panel are still in the tree, and March tasks stay in their table, but no tool in the default toolset starts a worker any more: long work is a background job in his own shell plus a scheduled wake. The coding-session code now drives the Codex CLI inside a sandbox, and is equally dormant.
What is new
- Memory with provenance: who said it, about whom, a tier, a source; weekly upkeep that never deletes; one question at a time about contradictions; a forget that previews exactly what it removes. Memory
- His computer: a sandboxed shell, an editor, web search and fetch, a headless browser,
look. His computer - The mind: wakes, follow-through, the nightly, free time, a journal with your verdicts, opt-in noticing. The mind
- Pings and media in iMessage: @Edward in any chat; photos, PDFs, voice messages and videos understood. Listening & pings
- The app: Today, a work rail that shows his thinking live, live voice, the Edward tab,
/screen, the household hub, push with quiet hours. The app - Guard rails: a secret scan on everything that leaves, spend caps, a one-time setup code, a sandbox for his shell, friends’ pings without your machine, Twilio answering only you. Guard rails
- Running it: LaunchAgents, a health watchdog, nightly verified backups, staged frontend deploys with a one-command rollback.