Skip to content

Commit f1bbb28

Browse files
committed
Merge main (#292) into the CF-4 parser slice
Coven-Harness: Claude Code / claude-opus-5-5
2 parents 29a74e8 + 04b7ec7 commit f1bbb28

39 files changed

Lines changed: 1080 additions & 965 deletions

‎README.md‎

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
Modex is an open, Codex-App-style desktop app for running coding agents in your local
1212
repositories. It drives **Claude Code** and **Codex** through their own CLIs (`claude -p`
1313
stream-json and `codex app-server`), using existing CLI logins or app-owned ChatGPT sign-in.
14-
App-owned sign-in is under review; see [its acceptance gates](docs/chatgpt-signin.md).
14+
App-owned sign-in shipped in v0.0.6; see [how it works and its limits](docs/chatgpt-signin.md).
1515
It never calls a model
1616
API directly. App-owned ChatGPT credentials use protected OS-encrypted storage; existing
1717
Claude and Codex CLI credentials remain with their CLIs.
@@ -165,8 +165,11 @@ skills exactly as it would in a terminal.
165165
### Run it
166166

167167
For macOS on Apple Silicon, download the DMG or ZIP from the
168-
[latest release](https://github.com/TypeSafeAI/modex/releases/latest). Replace the existing
169-
app to upgrade; projects, threads, and preferences remain in `~/.modex`. Builds from v0.0.5
168+
[latest release](https://github.com/TypeSafeAI/modex/releases/latest). From v0.0.12 the app
169+
updates itself (see [Release notifications](#release-notifications)); earlier builds upgrade by
170+
replacing the app. Projects, threads, and preferences remain in `~/.modex`. The same page has
171+
unsigned Windows x64 and Linux x64 installers from v0.1.0, which update manually; see
172+
[native platforms](docs/native-platforms.md). Builds from v0.0.5
170173
are signed with a Developer ID and notarized by Apple, so they open without a Gatekeeper
171174
warning; v0.0.1–v0.0.4 were ad-hoc signed and need a right-click → Open the first time. You
172175
still need `claude` or `codex` installed and logged in. To check a download yourself, see
@@ -210,10 +213,10 @@ Starting with v0.0.7, installed macOS builds check for a newer stable release at
210213
workspace is visible, with a check when you return to it. A small banner links to the
211214
release page; dismissing it hides that version across relaunches. A later release appears
212215
again. Checks use public GitHub release metadata and require an uploaded installer for
213-
your Mac. Offline failures stay quiet. Published builds still require manual downloads and
214-
installation. The in-flight [automatic update and durable-draft work](docs/update-recovery.md)
215-
adds verified preparation and recovery and has passed local integration checks. Signed native
216-
acceptance and release approval remain required before publication.
216+
your Mac. Offline failures stay quiet. From v0.0.12 the banner also offers **Download update**:
217+
Modex verifies the archive and its publisher, then offers **Restart to update** and keeps your
218+
drafts. Builds before v0.0.12 install it manually once. Windows and Linux show no update banner;
219+
install a newer release by hand. See [update preparation and draft recovery](docs/update-recovery.md).
217220

218221
If you are on v0.0.6 or earlier, install v0.0.7 from the release page once to enable future
219222
update notifications; older builds do not contain the banner.
@@ -268,13 +271,13 @@ must be public for the rules to apply.
268271

269272
## Not (yet) here
270273

271-
Codex Cloud tasks and scheduled automations remain deferred until local readiness. Automatic
272-
update installation and public Windows/Linux installers still need their release gates;
273-
[native installer candidates](docs/native-platforms.md) already have bounded acceptance
274-
evidence. Modex has no HTTP-API execution mode;
275-
if a CLI is not installed or logged in, the thread says so.
274+
Codex Cloud tasks stay out of scope. Read-only [routines](docs/routines.md) are on `main`,
275+
unreleased; routines that change code wait on the approval gate decision. Windows and Linux
276+
installers ship from v0.1.0, and their [acceptance gaps](docs/native-platforms.md) are still
277+
open. Modex has no HTTP-API execution mode; if a CLI is not installed or logged in, the thread
278+
says so.
276279

277-
## Images and Plugins (unreleased)
280+
## Images and Plugins
278281

279282
The full desktop app includes local image imports and a native Claude Code/Codex plugin manager.
280283
Compatible image skills can generate and revise images through the existing CLI runner, with

‎docs/analytics.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ counts. Prompts, files and replies are never recorded.
2121
unpriced rather than free.
2222
- **Recording is best-effort.** A failed write is logged and never changes the turn. Reading skips lines that
2323
don't parse, so a torn last line after a crash costs one row.
24-
- Usage from before this release, from other tools, and from outside Modex is not imported.
24+
- Usage from before v0.1.0, from other tools, and from outside Modex is not imported.
2525

2626
## How it is shown
2727

@@ -121,7 +121,7 @@ mobile navigation after desktop collapse, Copilot filtering, unknown costs,
121121
account attribution, and a real CSV download. Browser interaction checks
122122
complement these; they do not constitute VoiceOver or human keyboard-only acceptance.
123123

124-
Safari verification on 2026-10-07 covered both appearances, navigation, empty
124+
Before the #248 restyle, Safari verification on 2026-10-07 covered both appearances, navigation, empty
125125
search, custom dates, call details, and exact project drill-downs. Phone and
126126
tablet iframe checks (390 and 768 CSS pixels including scrollbars) confirmed no
127127
page-level horizontal overflow. CSV serialization tests pass; Safari displayed

‎docs/approval-rules.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ tools themselves, create approval requests the CLI did not make, or widen a sand
66
The gate remains **off** while this integration is reviewed. Settings can save rules and
77
**Try it** can preview their decisions during this period. Rules do not answer live approvals;
88
the existing thread policy still applies (Ask each time, Always allow, or YOLO).
9-
This editor follows v0.0.6 and is not included in its replacement release tag.
9+
The editor shipped in v0.0.7.
1010
See the [specification](specs/2026-10-01-modex-jev-approval-rules-spec.md).
1111

1212
## Add a rule

‎docs/auto-routing.md‎

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ calibrated probabilities. Modex asks six questions in one request
2626
| `needs_deep_reasoning` | noul | doing it well needs multi-step reasoning about interactions |
2727
| `depends_on_prior_turns` | noul | only when the thread has history: the request leans on it |
2828

29-
The state sent is the request (clipped to 4k chars), the last six turns as short digests
30-
(user/assistant text clipped, tool titles), and thread/project facts (backend, mode, plan,
29+
The state sent is the request (clipped to 4k chars), the last six transcript entries (user
30+
text clipped, a placeholder for each assistant reply, tool titles), and thread/project facts (backend, mode, plan,
3131
turn count, project name, branch). No file contents, diffs, or tool output are sent.
3232

3333
## Key and transport
@@ -51,16 +51,16 @@ locked vault as the problem rather than silently judging with the heuristic.
5151

5252
The judge itself is reached one of two ways (Settings → Judge transport):
5353

54-
- **`jev` CLI** (default when installed): Modex runs `jev run - --raw` with the payload on
55-
stdin and the resolved key in the child's environment only. That gives Modex the CLI's
56-
config, its retries, its error messages, and `jev doctor`, and keeps one code path for
54+
- **`jev` CLI** (default when installed): Modex runs `jev run - --raw --compact --attempts 1`
55+
with the payload on stdin and the resolved key in the child's environment only. That gives
56+
Modex the CLI's config, its error messages, and `jev doctor`, and keeps one code path for
5757
people, scripts, and agents. Install with `npm link` in `TypeSafeAI/cli`.
5858
- **Built-in HTTPS** (`POST https://api.typesafe.ai/v1/systemone`): the same request from
5959
Modex's own process, used when the CLI is absent or the policy says so.
6060

6161
Transport selection is explicit: **Auto** prefers the CLI and may fall back to HTTPS;
62-
**Always the jev CLI** never uses HTTPS if its executable is unavailable; **Always HTTPS**
63-
does not inspect the CLI. Saving changed judge transport, executable, or model settings
62+
**Always the jev CLI** never uses HTTPS if its executable is unavailable; **Always Modex's
63+
HTTPS call** does not inspect the CLI. Saving changed judge transport, executable, or model settings
6464
invalidates resolved setup without clearing learned preferences or disrupting an
6565
already-running turn. General, posture-only, and no-op saves retain connection-test health.
6666

@@ -125,8 +125,8 @@ deterministically, and every step that changes the outcome adds a reason to the
125125
unavailable. Mid-thread switches lose the CLI's context, so this is off by default; model
126126
switches have their own guard in step 7.
127127
4. **Model.** The highest rung at or below the target tier on that backend
128-
(`routing/catalog.ts`). The ladder is rebuilt from the CLI's live model list: Claude's
129-
aliases (haiku 0 · sonnet 1 · opus 2 · fable 3) and Codex's catalogue (gpt-5.5 0 ·
128+
(`routing/catalog.ts`). The ladder is rebuilt from each backend's model list: Modex's
129+
fixed Claude aliases (haiku 0 · sonnet 1 · opus 2 · fable 3) and Codex's live catalogue (gpt-5.5 0 ·
130130
gpt-5.6-* 1 · gpt-6-luna/sol 2 · gpt-6-astra 3), with description hints for anything new
131131
and the middle tier for unknowns.
132132
Successful non-empty lists are cached for a minute. A failed or empty list retries on
@@ -235,7 +235,8 @@ what each switch actually cost.
235235

236236
## Bounds you control
237237

238-
Settings has separate General, Coding CLIs, Auto routing, and Advanced sections, with Save
238+
Settings has separate General, Coding CLIs, Auto routing, Approval rules, and Advanced / demo
239+
sections, with Save
239240
and Cancel kept visible while the content scrolls. Auto routing exposes posture, effort
240241
ceiling, minimum judge confidence, premium turns per day, fast-mode allowance, backend
241242
switching, and whether new threads start on Auto, plus the judge model and allowed coding

‎docs/browser-tools.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ biometric gesture.
8888
See the [acceptance report](reviews/2026-10-11-browser-credential-acceptance.md) for the exact
8989
evidence and limits.
9090

91-
Before releasing 1Password filling, use a disposable Login for a controlled HTTPS site in
92-
a signed app launched normally. Verify real unlock, selection, filling without submission,
91+
1Password filling shipped in v0.0.11 with this check still open. To complete it, use a
92+
disposable Login for a controlled HTTPS site in a signed app launched normally. Verify real unlock, selection, filling without submission,
9393
cancellation during listing and item reads, navigation and close cancellation, and absence
9494
of credentials from app state, logs, and error surfaces. Enable the CLI integration in
9595
1Password and select the intended account first if you use several accounts.

‎docs/chatgpt-signin.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# App-owned ChatGPT sign-in through Codex (#76)
22

3-
Settings → Coding CLIs offers **Continue with ChatGPT**, account selection,
3+
Settings → Coding CLIs offers **Continue with ChatGPT** (**Add another ChatGPT account** when
4+
the Codex CLI is already signed in), account selection,
45
reauthorization and sign-out. Actions apply immediately. Existing Codex CLI authentication
56
remains available. Each saved account label includes its issued registration so two
67
workspaces with the same email remain distinguishable.
@@ -67,7 +68,7 @@ recovery prevents accidental concurrent refresh on a shared home.
6768
Fixture tests cover public/returning flows, identity validation, state/path rejection,
6869
encryption, insufficient scopes, refresh serialization, local/remote sign-out and separate
6970
Codex child ownership. They do not establish a real OpenAI grant or subscription entitlement.
70-
Before landing: complete a real user-controlled new registration, returning authorization,
71+
Before landing, the plan required a real user-controlled new registration, returning authorization,
7172
Codex turn, refresh/resume, multi-account selection and sign-out on macOS Apple Silicon.
7273
Apple Silicon acceptance completed on 2026-10-04: real registration and returning
7374
authorization, completed Codex turns, rotating refresh and process replacement,

‎docs/ios-companion.md‎

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ Claude and Codex coding turns continue to run through their CLIs on the Mac.
2222

2323
The listener is off until enabled. It exposes only a small paired API: snapshots, thread
2424
creation, provider-scoped command discovery, sending a follow-up, answering an unanswered
25-
approval once, and archiving or unarchiving a thread. It omits project paths, skill paths, backend session
26-
handles, settings, and tool arguments from snapshots. The iPhone offers only Approve once and
27-
Deny, with an extra confirmation before approval. The Mac certificate and token live under
25+
approval once, setting a thread's approval policy, and archiving or unarchiving a thread. It
26+
omits project paths, skill paths, backend session handles, settings, and tool arguments from
27+
snapshots. The phone confirms each answer to an approval card before sending it; see
28+
[Approvals](#approvals-skills-and-finished-tasks). The Mac certificate and token live under
2829
`~/.modex/companion/` with owner-only permissions, outside the repository and app bundle.
2930
The server needs the Mac app to be running. There is no relay or internet endpoint.
3031

@@ -92,7 +93,7 @@ recovery permanently. Bonjour publishes only the address and public certificate
9293

9394
Xcode 26.6 and XcodeGen are used to generate the native SwiftUI project from
9495
`apps/ios/ModexCompanion/project.yml`. The app identifier is
95-
`works.jev.modex`, version 0.1.0 (build 6), for iPhone on iOS 18 or newer.
96+
`works.jev.modex`, version 0.2.0 (build 7), for iPhone on iOS 18 or newer.
9697

9798
```sh
9899
cd apps/ios/ModexCompanion
@@ -181,8 +182,8 @@ Build 3 adopts the official Modex mark in the App Store icon, onboarding and wor
181182
On 2026-10-05, all 10 native tests and the paired simulator flow passed. Its signed IPA
182183
passed Apple validation and upload, then reached `VALID` and `IN_BETA_TESTING` in the
183184
existing Internal group with one tester (build ID `ee29b4ab-89d6-401d-a4ae-c4a860c71ae0`).
184-
Physical iPhone installation and acceptance remain open; the public website continues to
185-
show **Coming soon**. See the [v0.0.7 ledger](reviews/2026-10-05-v0.0.7-release-review.md).
185+
Physical iPhone installation and acceptance remained open; the public website then showed
186+
**Coming soon**. See the [v0.0.7 ledger](reviews/2026-10-05-v0.0.7-release-review.md).
186187

187188
Build 4 adds persistent pairing, trusted local discovery and automatic recovery after the
188189
Mac address or port changes. On 2026-10-05, all 14 native tests and the extended LAN
@@ -211,7 +212,10 @@ settings and full skill descriptions, and keeps the saved pairing and draft whil
211212
It also rotates through every private address the Mac advertises. On 2026-10-13 its signed IPA
212213
passed validation and upload (build ID `2f6e7d20-527e-44dd-a337-74564ac23bba`), reached
213214
`VALID`, and was assigned to the Internal and External groups. Apple returned beta review
214-
`APPROVED` at submission. Physical installation of this build was not performed. See the
215+
`APPROVED` at submission. Physical installation of this build was not performed. On
216+
2026-10-11 a signed development build passed pairing, recovery, approval and retirement on a
217+
physical iPhone; fresh-install consent and a TestFlight install remain unaccepted
218+
([physical acceptance](reviews/2026-10-11-iphone-acceptance.md)). See the
215219
[v0.0.11 ledger](reviews/2026-10-12-v0.0.11-release-review.md#iphone-companion-build-6).
216220

217221
The iPhone build has a separate release path from the signed and notarized macOS release.

‎docs/knowledge-maintenance.md‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
Choose a knowledge folder and install OpenKnowledge in **Space → Knowledge base**.
44
**Use your Modex notes** makes the notes folder ([Notes folder](notes.md)) the knowledge base, so
55
pages written in Space and in Open Knowledge are the same files. A page's menu then offers
6-
**Open in knowledge base** instead of a copy. With the notes folder as the knowledge base, each
7-
project's agents read, write and search only that project's notes; search then runs over those
8-
files directly rather than through the companion.
6+
**Open in knowledge base** instead of a copy. When the knowledge base is the notes folder, a
7+
folder inside it, or a folder that holds it, each project's agents read, write and search only
8+
that project's notes there; search then runs over those files directly rather than through the
9+
companion.
910
Claude and Codex threads can search and read it from any project or worktree. Modex
1011
starts the companion when a coding turn needs the connection.
1112

‎docs/mac-app-store.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ renderer reuse, not production transport authorization or Store acceptance.
7676
cannot submit commands, including requests already in flight. Add real CLI acceptance.
7777
4. Run signed, sandboxed acceptance under a fresh macOS user. Verify consented file access,
7878
persistent pairing, sleep/wake, host/client restarts and compatible-version upgrades.
79-
5. Create the macOS App Store Connect record and provision the distinct Store bundle ID
80-
(proposed `works.jev.modex.desktop`, final record/name to be confirmed at that gate).
81-
Produce the Apple Distribution package; validate, upload, verify processing and test
82-
installation through macOS TestFlight. A Developer ID DMG does not satisfy this gate.
79+
5. The App Store Connect record (**Modex Mac App Store**, app ID `6819549715`) and the Store
80+
bundle ID `works.jev.modex.desktop` exist, and the Apple Distribution package for 0.0.8
81+
was uploaded and processed. Installation through macOS TestFlight is still untested. A
82+
Developer ID DMG does not satisfy this gate.
8383
6. Submit truthful metadata and screenshots for App Review. Publish only after acceptance.
8484

8585
The iPhone reconnection work in v0.0.7 supplies useful identity/revocation behavior, but it

‎docs/mac-store-preview-plan.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Mac App Store preview execution ledger
22

3+
**Status (2026-10-18): partial.** The preview merged in #119. The two open items below remain;
4+
the other Store gates are in [status, In flight](status.md#in-flight). No open PR carries this
5+
work.
6+
37
Val requested a runnable desktop Store preview on 2026-10-05, following approval of the
48
separate signed-host direction. Reuse the existing desktop React interface and CLI-owned
59
engine. The iPhone-on-Mac Companion is not this desktop target.

0 commit comments

Comments
 (0)