## Decision Desk resetting deliberately

Eli now has a conversational fork\.&#32;Before changing it\,&#32;write down the intended boundary\:

- Keep the conversation\,&#32;refresh local provider\-facing state\:&#32;**fresh**\.
- Drop the live\/model conversation but keep this journal identity\:&#32;**clear**\.
- Start another conversation identity\:&#32;**new**\.

These operations are not escalating levels of secure deletion\.

### A before\-and\-after reset ledger

The table describes successful native operations\.&#32;“Identity” means persistent journal identity\.

| State | `/fresh` | `/clear` | `/new` |
| --- | --- | --- | --- |
| Live conversation | Retained | Cleared | Cleared |
| Existing journal history | Unchanged by the operation | Retained\;&#32;reset boundary appended | Retained in the previous journal |
| Persistent ID and path | Retained | Retained | New ID and allocated path |
| Title | Retained | Retained | Ordinary new session starts without the prior title |
| Model and settings | Retained | Retained | Not a factory reset\;&#32;current model\/settings remain applicable |
| Provider\-facing state | Local handles closed\;&#32;fresh transient ID | Local handles closed\;&#32;fresh transient ID | Local handles closed\;&#32;normal identity selection resynchronized |
| Ordinary queues | Retained | Cleared | Cleared |
| Cwd and workspace | Unchanged | Unchanged | Current project remains |
| Prior artifacts and exports | Retained | Retained | Prior artifacts retained\,&#32;not copied as a fork |
| Active plan reference | Retained | Path retained and reference re\-armed | Ordinary new\-session reference resets to its default |

Normally the provider\-facing ID after&#32;`/new`&#32;follows the new journal ID\.&#32;An explicit provider\-session override is a separate input\;&#32;do not turn that normal case into a universal identity rule\.

### Milestone\:&#32;Refresh the provider boundary without losing the conversation

**Need\.**&#32;Eli wants to discard local provider transport\/session state while retaining the conversation\.

**Obstacle\.**&#32;“Fresh session” sounds like an empty conversation\,&#32;but this command is deliberately narrower\.

In the idle fictional fork\:

**Human OMP slash command\:**

~~~text
/fresh
~~~

**Expected observation\.**&#32;The visible conversation remains\.&#32;The status reports how many local provider states were pruned\.&#32;Zero can be normal\.

The implementation closes cached provider\-state entries\,&#32;clears the local map\,&#32;mints a fresh provider\-facing ID\,&#32;rekeys associated session\-memory identity\,&#32;and invalidates append\-only context for rebuilding\.

It does not append a reset boundary\,&#32;change the journal header ID\,&#32;or clear ordinary steering\/follow\-up queues\.&#32;The next model\-context build uses the retained conversation—not every old entry that might remain elsewhere in the journal\.

**Recorded check\.**&#32;One inert provider handle received&#32;`close()`\.&#32;The provider\-facing ID changed\;&#32;persistent journal ID\,&#32;file\,&#32;bytes\,&#32;messages\,&#32;and ordinary queues remained unchanged\.

That is local state\-transition evidence\.&#32;It does not prove that a real provider outage\,&#32;authentication failure\,&#32;remote conversation problem\,&#32;or retention concern was fixed\.

**Failure and recovery\.**&#32;If a response is still streaming\,&#32;wait or abort through OMP’s normal control\,&#32;then retry\.&#32;A pruning count is not a remote deletion receipt\.&#32;Even local close errors can be logged while the handle map is cleared\.

**Self\-check\.**&#32;Does a changed&#32;`AgentSession.sessionId`&#32;after&#32;`/fresh`&#32;prove that a new durable conversation was created\?

**Answer\:**&#32;No\.&#32;That getter is provider\-facing\.&#32;Compare the persistent header ID and file\.

### Milestone\:&#32;Clear live context while keeping the journal

**Need\.**&#32;Eli wants the next conversation to stop depending on the current turns\,&#32;but wants to continue this persistent session\.

**Obstacle\.**&#32;A blank live transcript could be mistaken for erased history\.

In the idle fictional fork\:

**Human OMP slash command\:**

~~~text
/clear
~~~

**Expected observation\.**&#32;The live transcript clears and OMP reports a context reset while the session continues\.

The source\-backed reset drops\:

- Live messages\.
- Steering\,&#32;follow\-up\,&#32;and pending next\-turn messages\.
- Pending tool calls and error state\.
- Deferred session\-scoped tool decisions and internal per\-turn state\.
- This agent’s scheduled continuation work and owned asynchronous jobs\.

It also rotates provider\-facing state and refreshes applicable base\/project context\.&#32;Clearing conversation messages does not disable project instructions or erase a separate memory backend\.

The persistent ID\,&#32;path\,&#32;title\,&#32;cwd\,&#32;model\,&#32;settings\,&#32;and active plan path remain\.&#32;A&#32;`reset_boundary`&#32;is appended to the journal\.

Subsequent model\-context and collapsed\-live rebuilds honor that boundary\.&#32;Full\-history paths still retain earlier entries\.&#32;This distinction survives reopening\;&#32;it is not merely a temporary screen clear\.

**Recorded check\.**&#32;The real reset retained identity\,&#32;path\,&#32;title\,&#32;model\,&#32;and cwd\;&#32;cleared messages\,&#32;ordinary queues\,&#32;and a synthetic pending tool marker\;&#32;and appended one reset boundary\.&#32;Reopening rebuilt an empty context after the boundary while full\-history reconstruction retained the earlier fictional messages\.

The test also appended one fictional post\-clear message and observed only that message in rebuilt model context\.&#32;It did not send a next provider request\.

**Failure and recovery\.**&#32;`/clear`&#32;refuses while streaming or while foreground bash\/Python work is running\.&#32;Its controller first aborts active compaction and waits for it to stop\.&#32;The warning text does not enumerate every predicate\.

If reset throws after beginning\,&#32;do not assume nothing changed\.&#32;Inspect the journal boundary and active state before retrying\;&#32;this reset is not presented as an all\-stage transaction\.

**Self\-check\.**&#32;Can a later full HTML export still include the conversation from before&#32;`/clear`\?

**Answer\:**&#32;Yes\.&#32;Clear is a context boundary\,&#32;not an export scrubber\.

### Milestone\:&#32;Start a different identity without deleting the old one

**Need\.**&#32;Eli wants another conversation rather than continuing the fork’s identity\.

**Obstacle\.**&#32;An empty new journal may not yet exist as a physical file\.

**Human OMP slash command\:**

~~~text
/new
~~~

**Expected observation\.**&#32;OMP starts an empty conversation under a new persistent identity and allocated path\.

Ordinary&#32;`/new`\:

- Preserves the prior journal and workspace\.
- Does not create a fork parent link\.
- Clears messages and queues\.
- Aborts current work after the veto point rather than using the same streaming refusal as&#32;`/fresh`\.
- Refreshes base\/project prompt context\.
- Does not reset the whole installation’s settings\.

A new session can contain initial metadata without having a materialized transcript file\.&#32;Therefore\,&#32;an absent third JSONL file is not evidence that the identity failed to change\.

**Recorded check\.**&#32;The real new\-session transition allocated another identity and path\,&#32;emptied messages and ordinary queues\,&#32;and retained the previous journal and workspace\.&#32;Its immediate identity was measured directly in the SDK ledger\,&#32;not inferred from file count\.

**Failure and recovery\.**&#32;A before\-switch hook can veto&#32;`/new`\.&#32;Transient UI may already have been cleared by the controller\,&#32;so a changed status area is not proof of a new identity\.&#32;Other failures need inspection\;&#32;there is no universal rollback promise for this path\.

**Self\-check\.**&#32;Does ordinary&#32;`/new`&#32;delete the fork you just left\?

**Answer\:**&#32;No\.

### Inspect the saved outcome

Exit without sending a model prompt\.

**Human OMP slash command\:**

~~~text
/exit
~~~

Then inspect only the lab’s files\.

**Terminal shell — read\-only comparison\,&#32;in the same shell holding the receipt variables\:**

~~~sh
jq -s 'map(select(.type == "session") | {id,parentSession,cwd,title})' "$SESSIONS"/*.jsonl
shasum -a 256 "$SOURCE"
jq -s 'map(select(.type == "reset_boundary") | {type,id,parentId})' "$SESSIONS"/*.jsonl
jq -s 'map(select(.type == "message") | .message.content)' "$SESSIONS"/*.jsonl
cat "$PROJECT/today.txt"
~~~

Look for retained parent history\,&#32;a child header linked to the original identity\,&#32;a reset boundary in the cleared child\,&#32;and retained fictional messages\.

These queries aggregate saved journals\.&#32;**They do not measure a now\-closed process’s live context\.**&#32;Correlate the child header with its recorded parent and the child file path you noted\.&#32;Inspect that individual file when you need per\-file evidence\.

The original hash is useful evidence\,&#32;but do not demand universal byte equality across native startup and shutdown\.&#32;Lifecycle records can be added outside the narrower fork call\.&#32;The recorded parent\-byte assertion was scoped to that call\.

### Milestone\:&#32;Fork from the original at startup

**Need\.**&#32;Eli wants another identity from a saved conversation without first opening it interactively\.

**Obstacle\.**&#32;Startup has a launch cwd and no parent process’s ordinary message queues to clone\.

Print the supplied startup fork command\:

**Terminal shell — print the generated native startup fork command\:**

~~~sh
jq -r '.commands.forkExplicitPath' "$RECEIPT"
~~~

Run the entire printed command\.&#32;Stop on setup\;&#32;do not prompt\.&#32;If startup succeeds\,&#32;inspect session information and directories\,&#32;then exit normally\.

This recipe supplies the copied project as launch cwd\.&#32;It therefore does not visually demonstrate two different project directories\.&#32;The separate parser\/manager check did use a different launch cwd and confirmed the rule\.

**Expected observation\.**&#32;A new child identity retains source history and records the original persistent ID as parent\.&#32;The source remains available\.&#32;Session artifacts are copied best\-effort by default\;&#32;workspace files are not copied\.

**Recorded checks\.**&#32;The parser\/manager test confirmed launch\-cwd behavior and rejection of&#32;`--fork`&#32;with&#32;`--no-session`\.&#32;The separate source\-CLI startup fork returned a new identity\,&#32;two retained fictional messages\,&#32;and unchanged workspace bytes\.

Source\-ID fork lookup is implemented but was not the exercised startup\-fork target form\;&#32;the recorded startup examples used explicit paths\.

**Failure and recovery\.**&#32;Unknown source IDs fail\.&#32;`--fork`&#32;with&#32;`--no-session`&#32;is invalid\.&#32;After a write or artifact error\,&#32;inspect the child journal and artifact availability before calling the result a complete copy\.

**Self\-check\.**&#32;Does startup fork inherit queued follow\-up messages from an old OMP process\?

**Answer\:**&#32;No\.&#32;It rebuilds from saved history\,&#32;not another process’s queues\.

**Source anchors\:**&#32;`packages/coding-agent/src/session/agent-session.ts`&#32;—&#32;`freshSession`\,&#32;`resetSessionContext`\,&#32;`newSession`\,&#32;`sessionId`\;&#32;`packages/agent/src/agent.ts`&#32;—&#32;`reset`\;&#32;`packages/coding-agent/src/modes/controllers/command-controller.ts`&#32;—&#32;`handleFreshCommand`\,&#32;`handleResetContextCommand`\,&#32;`handleClearCommand`\,&#32;`#runNewSessionFlow`\;&#32;`packages/coding-agent/src/session/session-context.ts`&#32;—&#32;`buildSessionContext`\.
