Two good questions.
Concurrent sessions: works today. Every backscroll run (or exec) is its own session — concurrent writers share one SQLite DB (WAL mode), and each row keeps its session id, so streams don't smear together; list/search/pick/export --session <id> isolates one. For a tree of agents the nicer pattern is labeling: launch each agent's shell with BACKSCROLL_HOST=agent-7 backscroll run … — every command gets tagged, --host agent-7 filters any view (CLI, web UI, MCP), and stats --by host gives you a per-agent failure/latency table. That's essentially the setup described in the agents-audit doc.
Env capture: not today — a row is command, output, exit, cwd, duration, host/session, plus an optional note. It's feasible for exec (we spawn the process, so we could record env at launch), and the reason I haven't shipped it is that env is exactly where secrets live — a raw dump is a footgun. If it ships it'd be allowlist-based (exec --env 'PATH,GIT_*' style) with the redaction pass applied on top, never a full dump. Filesystem snapshots I'd keep out of scope (zfs/btrfs/restic territory), but an allowlisted env var is a natural place to carry a snapshot id along with each command (SNAP_ID=… backscroll exec …).
If allowlisted env capture would actually be useful in your orchestration setup, open an issue — the earlier threads here already turned into shipped changes (0600 DB perms, prune --max-size), so that's not a rhetorical invitation.
Both were day-one design constraints, since they're the two obvious ways a "record everything" tool dies.
Runaway output (the typo'd grep): per-command caps. By default backscroll keeps the first 256 KiB and the last 1 MiB of each command's output and drops the middle, marking the entry as truncated — head for context, tail because that's where the error usually is. So a command that spews gigabytes costs at most ~1.25 MB in the DB, and it's zstd-compressed before storage, so repetitive spam usually ends up far smaller than that. Tunable with
run --head-cap/--tail-cap. On top of that there's a total-DB cap (prune --max-size 500M, oldest-first) and ignore patterns for commands you never want recorded.Interactive / full-screen (htop, vim, less, fzf): these switch the terminal to the alternate screen, and backscroll excludes alt-screen bytes from storage entirely. You still get the entry — that htop ran, when, for how long, exit code — but none of the thousands of repaint frames. Interactive programs that don't use the alt screen (a REPL session, say) are recorded as-is under the same caps, which in my experience is what you want: the REPL transcript is often exactly the thing you're trying to find again later.