session-recovery
Recover interrupted sessions and continue the goals you select.
session-recovery tracks running Paseo turns and continues eligible unfinished sessions after a daemon restart. Above each session's composer, Goal previews the current objective. Press the text to edit it in a desktop popover or a mobile bottom sheet. Codex and OpenCode have separate native pause and resume controls. Viewing a goal never starts work or selects it for continuation. The composer uses separate buttons for text editing and playback.
An active goal can outlive its executing session. The optional session connection companion for the verified Paseo 0.12.0 build reconnects selected active goals to their existing saved sessions after a restart or observation gap. It observes native execution before considering a fallback, preserves the goal and its budget, and leaves existing provider connections running. Reconnection counts toward the selected goal's continuation limit. Stored running records are displayed as stopped, and disconnected native child records do not count as current workspace activity. Preview labels distinguish stopped, idle, and error states from the native goal state. Reads never reconnect a session. Ordinary interruption recovery still follows its own rules for unselected goals.
A stopped session with an active native goal shows Resume with a play icon. With the connection companion installed, this reconnects the same session while preserving the goal and its budget. It does not enable extra continuation.
Codex edits preserve its goal token budget and usage. Its pause and resume buttons use the owning Paseo connection, and a current turn may finish after pausing. OpenCode edits preserve the focused goal ID, turn/token/time budgets, usage, and history, and activate paused or blocked goals. Its controls require an idle session. OpenCode resume opens the editor with a short budget-reset notice above Resume. That action explicitly starts a new native budget window. Both native goal loops may start work after saving or resuming. The plugin does not lock manual editing or playback based on token usage or elapsed time; native commands own their limits. OpenCode requires opencode-goal-plugin's registered Goal mode, native /goal command, and version 1 session state; its command and agent must reference a valid configured model.
Claude uses Replace & start. Its native /goal command replaces the condition, immediately starts a turn, and resets the goal timer, evaluated turn count, and token-spend baseline. It has no separate goal token budget or native pause/resume command. Its Pause button stops the current turn; Resume sends a continuation while keeping the same goal. These controls never replace the goal with the words pause or resume. Reported tokens are from the last native evaluation. Its native command must be allowed by workspace trust and hook policy. Claude edits require an idle session. Claude and OpenCode conditions accept up to 4,000 characters. Codex accepts up to 16,000. OMP previews use its existing RPC connection or the current branch of its saved session. Native controls require the optional daemon companion for the verified Paseo 0.12.0 build; the plugin alone cannot expose this API. Pause and Resume call OMP Goal RPCs and preserve the goal, budget, and usage. Older explicit /goal requests have a Start goal button that registers a native goal only when pressed. Start goal also requires the owning connection to confirm that no native goal exists. An unavailable connection keeps the objective visible with unknown state; it is not treated as an empty goal. Existing OMP goal text cannot be edited. Reading does not start work or enable automatic continuation. Pi goal history remains available after explicit inspection.
Local Devin ACP sessions use the same Goal preview and Pause/Resume buttons when the optional companion for the verified Paseo 0.13.0 build is installed. Native state is read from the session's existing ACP connection. Pause cancels the current turn; Resume sends Devin's native /goal resume command through Paseo's normal turn and receipt path, preserving the same goal ID and objective. Existing goal text is read-only. Devin owns continuation, so no extra continuation prompt is sent. Reads never reopen sessions, start another process, or scan the native database. Unavailable connections remain unknown. Installing this companion requires a daemon restart; reloading only the plugin cannot install it.
The full goal screen is also available through /goal, /goal edit, /goal-edit, or View or edit this session's goal in the Command Center. Completed goals, pending approvals, uncertain delivery, and unavailable state are read-only. Temporarily unavailable playback controls stay visible and disabled. The editor shows the reason and Reload without opening Details. Saving or controlling a goal rechecks its identity and session. Tickets expire after five minutes and are used once. Native control intent is recorded before submission; an unconfirmed result requires review and is not automatically retried. Paseo has no atomic conditional goal update, so a concurrent action can still race the final check.
Paseo continuation is a separate optional control under the editor's Details and on recovery cards. It starts off globally, and each current objective also needs an explicit selection. Enable Continue selected goals in settings to use it. The default delay is 60 seconds with 10 continuations per objective. A changed objective or explicit native pause/resume clears the fallback selection. Turning the fallback selection off cancels its pending messages while keeping interruption recovery available. It does not pause a provider's native goal loop. Explicitly selecting a blocked Codex goal can resume it with its existing limits; direct session stops, pending input, and exhausted limits prevent that path. Native pauses, completions, limits, and unknown state stay stopped. A blocker requires review unless the temporary-error recovery below applies. The plugin cannot independently verify that a provider's completed goal was achieved.
Recover interrupted goals is a separate option, off by default. With Continue selected goals enabled, it retries only selected goals after recognized temporary provider errors and reconnects selected active goals after a daemon restart, including goals with no live turn before shutdown. A Codex goal blocked after an observed temporary error can resume through its owning connection without replacing the goal or resetting its budget or usage. Other blockers, paused goals, quota and rate limits, authentication failures, unavailable models, direct stops, approvals, questions, changed conversations, and uncertain delivery require review. The default delay starts at 60 seconds and doubles to at most 15 minutes, with three recovery attempts per interruption, also subject to the selected goal's continuation limit and recovery window. Counts survive turns and restarts. Each scan starts at most three due recoveries and inspects tracked sessions only. Codex's exact capacity message is recognized even when Paseo omits its code; raw error text is never saved. This option requires the connection companion for the verified Paseo 0.12.0 build. OpenCode budgets are never renewed automatically, and OMP receives no continuation chat message.
Automatic interruption recovery is on by default for main sessions, with a 60-second initial delay, up to three attempts per interruption, and a 24-hour recovery window. Delay doubles after each attempt, up to 15 minutes. Subagent recovery and recognized temporary provider error retries can be enabled separately. Recovery starts a turn in the existing conversation with its current provider and settings. It asks the agent to inspect work before repeating actions; it cannot restore an interrupted process. Direct stops, questions, and approvals block automatic recovery. The recovery screen offers review, manual continuation previews, exclusions, history, and settings. The sidebar shortcut appears on desktop and web; on mobile use Open session-recovery in the Command Center. Composer controls are available on all clients.
Requires a macOS or Linux daemon on stable Paseo 0.11.4 or later and a provider with saved history. Only Paseo-managed sessions are covered. The paired session-janitor 0.1.2+ protects pending recovery and continuation from cleanup; other cleaners do not read those protections. Goal entries are registered from session metadata. Hidden conversations are not queried, including those with missing or unsupported provider metadata. Only mounted composers read native previews, with up to four concurrent checks per client. Simultaneous previews share a server read; extra continuation is inspected only when Details is opened. These reads never restore conversations. OMP queries only the visible session over its existing connection. Offline previews read the known native session file, with a 32 MiB initial limit, one cold read at a time, a four-session cache, and incremental append reads. Unchanged files are not reread; hidden unselected OMP sessions are not opened. Pi history inspection is explicit and bounded to 2,000 canonical entries. Claude reads only the selected transcript's current parent chain, bounded to its last 8 MiB. CLAUDE_CONFIG_DIR in the provider environment is supported. OpenCode reads the focused goal's bounded version 1 per-session snapshot, using the project-local default or OPENCODE_GOAL_STATE_PATH. Missing, changing, malformed, incomplete, or outdated native state requires review.
Native previews are kept briefly in memory. Goal objectives and command tickets are not saved in the recovery journal. Local owner-only files keep session metadata, goal fingerprints, state, selections, attempt counts, and recent outcomes. Continuations and explicit native commands use the existing session and provider with normal provider usage and billing. OMP requires rpc in goal.continuationModes to run its native continuation loop. Its explicit controls and selected-goal recovery may reopen a dormant session through the standard loader, but reads never do. OMP receives no extra goal-continuation chat messages. Claude's selected goal can receive a fallback only after the observed turn has stopped and the configured delay passes. OpenCode native continuation claims and child-session guards also prevent extra fallback messages. No settings, provider trust policies, or native goal files are rewritten.

