Recipes and Session Restore
The View menu saves the current tab as .asterrecipe or opens a Recipe. Recipes store tab/window scope, nested splits and ratios, Pane types, directories, files, optional commands, and content levels, not PIDs, tokens, or file descriptors. Each open creates new Pane identities, making repeated use possible. External Recipes must be size-limited regular files; referenced editing resources have a cumulative budget too.
External commands are fully listed for confirmation by default, including command 21 onward. Settings → Recipes offers never replay, one confirmation, confirmation per command, or trust only identical SHA-256 content. Trust follows contents, not paths; edits ask again. Per-command confirmation offers run/skip/stop immediately before sending each command. Commands send sequentially only after Shell Integration is ready at an idle prompt and the preceding command has a completion marker.
Settings → Shell → Session Restore controls what returns in each terminal after quitting and reopening Aster:
- Restore tmux / screen Sessions: if the foreground process was
tmux/screenat snapshot, the first prompt runstmux attach -t <session>orscreen -r <session>, or attaches without arguments if the name cannot be parsed. - Restore Code Agent sessions: Claude/Codex/OpenCode reconnect via native
--resume, sharing the switch on the Agents page. - Latest project Agent session as first completion: when an Agent such as Claude Code, Codex, or Grok Build exits, the window offers its resume command and remembers that directory's latest session. Any Pane in that directory gets the whole resume command as the empty-prompt inline suggestion and first pinned candidate; Tab accepts and Return runs it. Prefixes such as
clkeep it first. Commands differ by provider:claude --resume <id>,grok --resume <id>,codex resume <id>, or--session <id>for OpenCode/Kimi/Pi. Only providers with native resume are recorded; each directory keeps one latest entry. Closing a running Agent's Pane/tab or quitting Aster also records it. Claude Code/Codex do not require hooks for this: their files in~/.claude/projects/<encoded-directory>/and~/.codex/sessions/bind a session ID during execution, enabling titles, Fork, and copy ID, and identify it at exit. If no new session file is created, for example byclaude --version, but old sessions exist, completion falls back toclaude --continue/codex resume --last. Nothing executes automatically. - Terminal restore protocol (OSC 88): a program can declare how it should restart.
printf '\e]88;query\a'receives\e]88;supported;v=1\a;printf '\e]88;restart=nvim .\a'declares a command and\e]88;clear\aremoves it. The declaration stores in the workspace snapshot and sends as ordinary input on restore; it is not evaluated as a separate script. - Restart running processes: never, allowlist only, or all running processes. The comma-separated allowlist matches command prefixes, so
npm runmatchesnpm run dev.
Priority is OSC 88 declaration, then multiplexer, then ordinary process. Agent-bound Panes use only Agent reconnection. Restore commands send at the first Shell prompt; any earlier user input cancels them. Switches are read at send time, so changing settings does not require another quit.
⇧⌘T restores mistakenly closed Panes/tabs in recently closed order. This history survives normal exit and crashes. Normal exit restores the main window and still-open additional windows. After three consecutive crashes, Aster bypasses a potentially damaged snapshot and opens a clean Shell. If a background project-directory check fails during recovery, Aster continues restoring the workspace and uses the current directory for missing project information. Serializable layouts restore, but PIDs, file descriptors, and transient read-only state do not persist.