@leftoff/cli 0.9.17 → 0.9.18-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,7 +2,37 @@
2
2
 
3
3
  What changed in Leftoff (called Checkpoints until 0.4.5), newest first. The board's **What's new** page and `leftoff changelog` both read this file.
4
4
 
5
- ## [0.9.17] - 2026-11-02
5
+ ## Unreleased
6
+
7
+ - **This session · Whole folder.** The walkthrough's Files view, What it did and Ask about this change now cover only what the session changed, like the walkthrough, with a toggle that shows the counts on both sides (“This session 4 · Whole folder 24”). Whole folder marks each file that isn't the session's “not from this session”; switching marks the story out of date (Update writes it again) and never runs a model on its own. Ask says which scope it drafted from, and the choice is kept on this device.
8
+
9
+ - **Walk me through it covers only what the session changed.** A session started in a repo with uncommitted or untracked files counted them as its own (a new session read “20 files” before its first prompt). Leftoff now notes what was already changed as a session starts, on this Mac only, and the walkthrough and its count leave those files out; a file the session edited on top of earlier changes shows only its own change. A session with no turns yet shows no count, and one from before this update counts only the files it edited plus its commits, with a note saying so. Each repo of a multi-repo session gets the same rule.
10
+
11
+ - **Fix: terminals from the npm package start again.** The detached terminal host looked for `bin/pty-host-main.js`, which the npm build never shipped, so Board terminal and My terminal app sessions died at once (`[it exited]`). The build now ships it beside the bundle and refuses to build without it.
12
+
13
+ - **Fewer “access data from other apps” prompts.** Leftoff no longer reads inside other apps' data in your Mac's Library. The board terminal's Match my Ghostty reads Ghostty's settings only when you pick it, Syncthing's settings are read every 10 minutes instead of every minute, and a git repo at your home folder never walks Library.
14
+
15
+ - **Permission prompts say “Leftoff”, once.** On a Mac, the login service now runs through a small Leftoff.app built once on your Mac. macOS asks as “Leftoff” instead of “node”, for everything Leftoff starts (headless Claude and Codex, board terminals, git), and an Allow survives Leftoff and node upgrades. Run `leftoff update` once. It needs the Command Line Tools; without them nothing changes.
16
+
17
+ - **`leftoff update` and `leftoff restart`.** `leftoff update` brings the login service up to date (and on a Mac builds Leftoff.app) and restarts only if something changed; running it again changes nothing. `leftoff restart` always restarts the daemon.
18
+
19
+ - **`leftoff doctor --tcc`.** Shows who asked macOS for a permission and for which program: the privacy log for the last 2 hours, then a live minute while you use Leftoff. No sudo. The docs page “macOS permission prompts” says how to reset an answer.
20
+
21
+ - **Continue in terminal / Continue headless.** An idle session can switch how it runs and keep its conversation: a headless one continues in a terminal of Leftoff's (`claude --resume` / `codex resume`, same session), and one in Leftoff's terminal continues headless. The old process ends before the new one starts, so the session never runs twice; one that's mid-turn or waiting on you is refused, and if the new side can't start, it goes back where it was.
22
+
23
+ - **Terminal sessions keep running.** A session in the board terminal or your terminal app now survives closing that window or tab, closing the board, and restarting or updating Leftoff: each terminal runs in a small detached host of its own, and Leftoff finds it again when it starts. With nothing showing it, it reads “◌ running · detached”; Go brings back the terminal app window attached to it (or shows it in the board), Open in Terminal attaches a window to the same session, and `leftoff attach <id>` works even while the daemon is stopped, including a session started just before the restart. Only Stop or Exit ends it. (After updating, Leftoff rewrites its login service once so a restart leaves these running.)
24
+
25
+ - **Headless Codex.** Codex can run with no terminal: pick Codex and Headless in New session (or `leftoff start --codex --headless "…"`) and talk to it in Live from the board or your phone. Its answers stream in, its command and edit approvals wait in Needs you, Stop interrupts it, a message sent while it works is Queued (Cancel or Send now), and the next message after a Stop or a restart picks the same Codex session back up. Permissions become Codex's sandbox and approval policy, never the bypass.
26
+
27
+ - **Pick where a session runs.** New session asks the agent (Claude Code or Codex) and the mode: **Headless** (talk to it in Live, from any device), **Board terminal** (a terminal Leftoff keeps, in the board and on your phone) or **My terminal app** (that same terminal, opened in Ghostty, iTerm or Terminal through `leftoff attach`). It's remembered per Mac and per agent, and starts the way Start did before until you pick. From a terminal: `leftoff start [--codex] [--headless | --term | --app]`.
28
+
29
+ - **Start with Codex.** New session asks Claude Code or Codex when this Mac has both, remembers the pick on this Mac, and picks Codex by itself when Claude Code isn't installed. Codex runs in the board's own terminal in the folder you chose (a new worktree, Permissions and the first message carry over; a phone sees it too), and its session opens as soon as Codex writes it, linked to that start by folder and time. From a terminal: `leftoff start --codex "first message"` (or `--agent codex`) runs Codex right there. Resume on a Codex session still runs `codex resume`.
30
+
31
+ - **Codex stands in when Claude can't.** Walk me through it has a Codex choice: `codex exec`, read-only, with no network, in the session's folder, on your own Codex login. A Codex session's walkthrough uses it when you haven't picked a model (before, it was a fresh Claude). When Claude fails because it's signed out or hit a subscription or usage limit, the walkthrough falls back to Codex, then to your summarizer. The header says "Written by Codex (Claude unavailable: usage limit reached)", and Claude is skipped for the next 10 minutes. Ask falls back the same way. On a Codex session started from the board, Ask about this change puts the question in Codex's own box.
32
+
33
+ - **Exact Needs you for Codex started from the board.** Codex doesn't save approval prompts to its session file, so for other Codex sessions Leftoff still guesses after 8 seconds. Codex started from the board is asked, for that run only, to post its own notifications in the terminal Leftoff owns. "Approval requested: …" and "Codex wants to edit …" now show on the card the moment Codex asks. Your Codex config is untouched.
34
+
35
+ - **Go finds the Codex sessions Leftoff started.** A Codex session started from the board brings up its terminal on the board, on any device. One started with `leftoff start --codex` is focused in the terminal app you typed it in, like a Claude Code session, and so is one resumed in the board's terminal. Codex started elsewhere still says Leftoff can't tell where it is.
6
36
 
7
37
  - **Point the walkthrough's question at exact lines.** Click a line number in a walkthrough's code to pick it; shift-click or drag for a range, and Cmd/Ctrl-click to add lines from another file or step (on a phone, tap one number, then another). The picks show as chips over the ask box, and the question goes into the chat with each ref and its exact lines.
8
38