Skip to content

Commit 397f422

Browse files
karngyanclaude
andauthored
docs+ux: say out loud that sessions outlive flue
flue restart and flue update now report that sessions kept running (suppressed under the FLUE_NO_HOLDER escape hatch, whose sessions still ride snapshots), usage stops promising snapshots where none are needed, and the README gets the durability story in one paragraph. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 09da6ee commit 397f422

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ not lost, but nothing runs until it wakes.
8181

8282
The full version is at [flue.sh/docs/setup](https://flue.sh/docs/setup).
8383

84+
## Sessions outlive flue
85+
86+
Every session runs in its own small holder process, not inside the daemon.
87+
Updating flue, restarting it, even the daemon crashing outright: the shells
88+
and agents keep running, and the next daemon picks them back up with their
89+
scrollback where you left it. A machine reboot is the one thing that ends a
90+
session, and even then flue brings it back with its history, a fresh shell,
91+
and the command that resumes the agent conversation it was in.
92+
8493
## The CLI
8594

8695
```

cmd/flue/main.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ const usageText = `flue — your terminal, as a browser tab
114114
115115
flue enable install the login service, start the daemon, open the UI
116116
flue disable remove the login service
117-
flue restart restart the daemon; live sessions ride across on snapshots
117+
flue restart restart the daemon; sessions keep running through it
118118
flue status daemon, login service, and session diagnostics
119119
flue relay setup deploy a relay to your own Cloudflare account
120120
flue relay join URL --secret S --fleet K point this machine at an existing relay
@@ -1611,6 +1611,14 @@ func runRestart(w io.Writer, wait time.Duration) error {
16111611
return err
16121612
}
16131613
fmt.Fprintf(w, " ✓ daemon running on 127.0.0.1:%d\n", port)
1614+
// True by construction, not aspiration: sessions live in their own
1615+
// holder processes, and the daemon that just restarted reattached to
1616+
// them on its way up. The one exception is a daemon running with
1617+
// FLUE_NO_HOLDER, whose sessions still ride snapshots; that escape
1618+
// hatch's users chose the old behaviour and know what it costs.
1619+
if os.Getenv("FLUE_NO_HOLDER") == "" {
1620+
fmt.Fprintf(w, " ✓ sessions kept running; tabs reconnect on their own\n")
1621+
}
16141622
return nil
16151623
}
16161624

cmd/flue/update.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,12 @@ func restartForUpdate(w io.Writer, latest string) error {
365365
return err
366366
}
367367
fmt.Fprintf(w, " ✓ daemon restarted, running flue %s on 127.0.0.1:%d\n", got, port)
368+
// Same honesty rule as runRestart: holder-backed sessions rode
369+
// across the bounce; only the FLUE_NO_HOLDER escape hatch still
370+
// pays for an update with its sessions.
371+
if os.Getenv("FLUE_NO_HOLDER") == "" {
372+
fmt.Fprintf(w, " ✓ sessions kept running; tabs reconnect on their own\n")
373+
}
368374
return nil
369375
}
370376
}

0 commit comments

Comments
 (0)