Registers a session_restart tool that spawns a fresh child session on the current project, prompts it with a focused task (+ optional notes) via promptAsync, and aborts the current session by default so a single focused task continues in a clean context window instead of compacting. Includes an experimental.compaction.autocontinue hook to reject the synthetic continue turn after compaction (default on).
59 lines
No EOL
2.9 KiB
Markdown
59 lines
No EOL
2.9 KiB
Markdown
# opencode-session-restart
|
|
|
|
opencode plugin that lets the agent restart a session into a fresh child session with a clean context window and a focused prompt, dodging context compaction loss.
|
|
|
|
When a session runs long enough to trigger compaction, opencode summarizes the conversation into a prompt and keeps going — fidelity you did not choose. This plugin gives the agent a first-class escape hatch: start a new child session on the same project, prompt it with a curated fresh prompt, and (by default) freeze the old session. The single focused task continues in a fresh window.
|
|
|
|
## Install
|
|
|
|
Add the plugin to your opencode config:
|
|
|
|
```json
|
|
{
|
|
"plugin": ["opencode-session-restart"]
|
|
}
|
|
```
|
|
|
|
or from a local clone:
|
|
|
|
```json
|
|
{
|
|
"plugin": [["/path/to/opencode-session-restart", { "abort_current": true }]]
|
|
}
|
|
```
|
|
|
|
## What it does
|
|
|
|
The plugin registers one tool, `session_restart`, that the agent can call when the session is getting long:
|
|
|
|
- Creates a child session (via the SDK `session.create` with `parentID`), so it shows up in the session tree under the original.
|
|
- Immediately prompts it (via `session.promptAsync`) with the focused `task` plus optional carry-over `notes` and a fresh-start preamble that tells the new session not to reconstruct the old conversation and to orient itself from the working tree.
|
|
- Aborts the current session by default, so only the restarted session stays active.
|
|
- Returns the new session ID so the agent can tell you where to switch.
|
|
|
|
### Tool arguments
|
|
|
|
| argument | type | default | description |
|
|
| --------------- | ------- | ------- | ----------- |
|
|
| `task` | string | — | The single focused task for the restarted session, written as a fresh prompt. |
|
|
| `notes` | string | — | Durable context to carry over: decisions, constraints, files touched, unfinished steps. Omit to rely on the working tree only. |
|
|
| `model` | string | current | `"providerID/modelID"` for the restarted session. |
|
|
| `agent` | string | current | Agent for the restarted session. |
|
|
| `abort_current` | boolean | `true` | Abort this session after restarting. |
|
|
|
|
### Notes on behavior
|
|
|
|
- The new session keeps the fresh prompt as its user-turn text and immediately starts working. On-disk state (git status, staged or uncommitted changes) carries over because it is the same project directory.
|
|
- `abort_current` freezes the original session after the new one is started. Because abort cancels the current agent turn, the tool's returned text may not be delivered to the old session — the side effects (create + prompt) complete first.
|
|
- `disable_compaction_continue` (default `true`) rejects the synthetic "continue" turn opencode would append after a compaction, so a compaction that does slip through never silently continues. Set it to `false` to keep stock behavior.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
bun install
|
|
bunx tsc --noEmit
|
|
```
|
|
|
|
## License
|
|
|
|
MIT |