Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
bfcd79a
chat: remove closed conversations from Home immediately
ZeroPoint95 Sep 23, 2026
0e009aa
chat: separate closing from confirmed permanent deletion
ZeroPoint95 Sep 24, 2026
009496e
chat: use the ordered shutdown path for deletion
ZeroPoint95 Sep 24, 2026
fbf7c04
test: align row interaction checks with shared conversation actions
ZeroPoint95 Sep 24, 2026
bbe0dd5
docs: clarify that closed conversations remain on Home
ZeroPoint95 Sep 24, 2026
bb55657
chat: sync closed conversations across tabs and session lists
ZeroPoint95 Sep 24, 2026
bfd2ce3
chat: preserve current session identity when merging live status
ZeroPoint95 Sep 24, 2026
9b89d0d
chat: remove deleted conversations from stale page snapshots
ZeroPoint95 Sep 24, 2026
888beac
Fix chats menu when every conversation tab is closed
ZeroPoint95 Sep 24, 2026
60f12fe
Stop active tasks and confirm deletion of settled task subtrees
ZeroPoint95 Sep 24, 2026
09b1c92
Update task menu expectations for Stop
ZeroPoint95 Sep 24, 2026
d1baa9b
Honor permanent task deletion across live roster and saved views
ZeroPoint95 Sep 24, 2026
24fac9d
Mark cached plan fixtures finished in deletion regression
ZeroPoint95 Sep 24, 2026
3188389
Preserve stopped task status across Sessions and conversation views
ZeroPoint95 Sep 24, 2026
db64f70
Count stopped tasks separately from completed work in the conversation
ZeroPoint95 Sep 24, 2026
23e86ba
Require stopped wording when a stop is repeated
ZeroPoint95 Sep 24, 2026
3aac2ec
Document synchronized conversation and task lifecycle for PR 1432
ZeroPoint95 Sep 24, 2026
e0f9b3b
Merge dev into PR #1432 preserving current task and Home behavior
ZeroPoint95 Sep 28, 2026
884c048
Keep joined-task outcome reading within the complexity limit
ZeroPoint95 Sep 28, 2026
e71b092
Keep closed conversations working until their tasks end
ZeroPoint95 Sep 28, 2026
c72520c
Merge latest dev and keep stop timeout guidance reachable
ZeroPoint95 Sep 28, 2026
451f91e
Merge dev and preserve removal of the retired Search page
ZeroPoint95 Sep 28, 2026
d763413
Merge dev and preserve copy-name actions with conversation deletion
ZeroPoint95 Sep 30, 2026
aeb4374
Merge remote-tracking branch 'origin/dev' into codex/todo-home-close
ZeroPoint95 Oct 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions docs/changes/unreleased/1432-conversation-task-lifecycle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
kind: changed
title: Conversation close, task stop and permanent deletion stay synchronized across views
pr: 1432
surface: [chat, engine, docs]
invalidates:
- "Closing a conversation could stop its agent or hide its work. Close now only closes its tab; saved conversations and active work remain available."
- "Task rows offered Close. They now offer Stop while active and confirmed Delete for a settled task and its descendants."
- "Deleting a record could leave live task bars and cached lists unchanged. Permanent deletion now removes all views immediately and survives replay."
- "Stopped work could appear finished or count as done. Conversation rows and task pages now preserve stopped status."
---

Home and Sessions share conversation actions, dark grey closed rows and permanent-delete
confirmation. Enter reopens; y confirms deletion; n or Escape returns to the actions.
Conversation deletion stops its agent and removes all owned tasks, while task deletion
keeps its conversation and unrelated siblings. Option+K remains usable with every tab closed.

The dev integration keeps program badges, interrupted-run recovery and live Home
activity readings. The retired rail footer totals and its fold-state map stay
removed; stopped-state checks cover the task and room surfaces that still exist.

The current Home menu keeps Copy name second, including on closed conversations;
its first action becomes Delete while Enter remains the reopen door. Sessions shares
these conversation actions, and task rows retain Copy project.
72 changes: 48 additions & 24 deletions internal/manual/chat/home.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,15 +295,16 @@ list, the same word the sessions place uses. It never reads as its session id, i
the id with its first letter raised (`D53cceead3f99593`). A conversation that has a title
keeps that title.

## Close or put away a task from home — task row options, new in project, open folder, copy project
## Stop or delete a task from home — task row options, new in project, open folder, copy project

**`→` offers task options just as it does for threads:** `x close`,
`n new in project`, `o open folder`, and `p copy project` when the corresponding local
folder and action are available. On a wide home these appear beneath the description
in the middle column. Putting a task away hides that task from home and the unfiltered
Sessions list; it does not stop it, delete its record, or put away its conversation.
Find it again by typing its name in Sessions, then use `→` and `x reopen`.
The choice survives closing the app. Folder actions use the task's conversation project.
**Tasks have no Close action.** `→` offers `x stop` while the task or any descendant
is active, including queued or waiting work. Stop preserves the task records and the
conversation. Once the entire subtree has stopped, the action is `x delete`.
Deletion asks `delete is permanent, are you sure?`: `y` deletes the selected task and
all descendants; `n` or Escape restores the four actions. Enter never confirms deletion.
A Stop action remains Stop even if the task finishes while its menu is open.
The other actions are `n new in project`, `o open folder`, and `p copy project`.
Previously hidden tasks are visible again; conversation Close is unchanged.

## Why does only one row spin — the one spinner on home

Expand Down Expand Up @@ -370,9 +371,9 @@ rows that do not fit behind `N more`. The Sessions heading opens the full Sessio
typing into the box searches older history. The `alt+k chats` menu (`opt+k` on macOS)
continues to list open tabs only.

Closing with `→`, then `x close`, or `ctrl+e`, removes the same conversation from
Home's open rows, the tab strip and the default chats menu immediately. It keeps
running work and drafts. A waiting conversation carries a `?`;
Closing with `→`, then `x close`, or `ctrl+e`, closes the tab and removes it from
the default chats menu immediately. Home keeps the conversation visible as closed,
including progress from its running work. It keeps running work and drafts. A waiting conversation carries a `?`;
the question remains reachable even when its tab is closed.

**On `space` `space` the cursor is already on the chat you were in before this one**, so a
Expand Down Expand Up @@ -701,19 +702,42 @@ machine with one conversation and on one with none (see *Why is the home screen

## Close or archive a conversation — put junk away and clean up home

Select a conversation, press `→`, then **`x close`**. `ctrl+e` does the same.
Its tab closes and it leaves the default `alt+k chats` list immediately. Home keeps closed conversations dimmed in the same Sessions list while they are
among the fifteen most recent. The
foot says `closed · type its name to find it again`.
Select a conversation, press `→`, then **`x close`**. `ctrl+e` also closes it.
Its tab closes and leaves the default `alt+k chats` list. Home keeps the conversation
among its fifteen most recent, and search finds older ones. Running replies, tasks
and jobs keep their progress marks after the tab closes. Its draft and saved history stay.

Nothing is deleted: its transcript, tasks, running work and draft remain. Closing
from Home also saves its archived status, so the bounded closed list can find it
after a restart. Closing a tab with `ctrl+w` retains it in this window's close stack
without archiving it on disk.
**Enter reopens the conversation and its tab.** On a phone-width terminal, Enter first
opens its sheet; use the sheet's open action. Home, Sessions, the tab close button and
`ctrl+w` in the chats menu save the same closed status across restarts. Closed names
use the same dark grey on Home and Sessions, including the selected row. Running
progress stays visible. Reopening from any of these places or `ctrl+shift+t` clears
the closed status everywhere.

**Enter on a dimmed row reopens the conversation and its tab.** `→`, then `x reopen`,
or `ctrl+e`, does the same. Older closed conversations remain searchable by name.
On a phone-width terminal, Enter first opens the row's sheet; use its open action.
## Permanently delete a conversation or task — delete is permanent, are you sure?

Home and Sessions use the same four conversation actions: **`x close`**, **`c copy name`**,
**`n new in project`**, **`o open folder`**. After Close, `x` becomes **delete**;
Enter already reopens. In Sessions, `→` opens a collapsed family first; another `→`
opens its actions. Nested tasks use `x stop` while active and `x delete` once their
whole subtree has stopped; they have no Close action.

Delete asks **`delete is permanent, are you sure?`**. Press **`y`** to confirm or
**`n`** to cancel and return to the four actions. Escape also cancels. Enter does not
confirm deletion.

Deleting a conversation stops its agent and removes its session folder, saved history
and all its task records. Its owned workspace is part of that folder; a borrowed
project stays. It leaves Home, Sessions, search and the reopen stack. There is no undo.
Deleting the current conversation prepares a fresh conversation first.

Deleting a nested task removes its saved record and all descendant task records and
journals. Its conversation and unrelated sibling tasks remain. It does not cancel their work or erase references already
written into the conversation's messages. A deleted record cannot be reopened or
recreated by a late completion. Closing alone never deletes or stops work.

Permanent deletion is available for local session folders, including the local engine.
It is absent on a remotely hosted session, whose files are on the other machine.

## Why did the list jump to the bottom when I typed — home's two shapes

Expand Down Expand Up @@ -2464,6 +2488,6 @@ A task handed to a program such as senior-dev has no tab. It opens inside the co

Closing a tab hides that conversation from tabs and the chats menu. It does not
stop its work or release an agent still held by this window. Such a conversation
remains in Home history and can reopen here; it must not claim another window
holds it. The other-window label is reserved for a conversation actually held
remains in Home history and can reopen here. Its search card says `closed`, with
its current work state when applicable; it must not claim another window holds it. The other-window label is reserved for a conversation actually held
elsewhere.
47 changes: 37 additions & 10 deletions internal/manual/chat/keys.md
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,10 @@ second `esc` inside half a second is the rewind's door and `ctrl+c` at rest is t
out, so neither is free — and you do not need one. The `esc` you already pressed started the
10-second window, and when it runs out codeaf stops waiting on its own.

**What happens at 10 seconds.** codeaf detaches from the turn: the waits codeaf holds are
## What happens if it will not stop — the ten-second limit

After `esc` or `ctrl+c` cancels a running turn, codeaf waits at most 10 seconds.
Then codeaf detaches from the turn: the waits codeaf holds are
ended and whatever request was still open to the model is aborted. A wait that ignores
being cancelled — a command whose output a grandchild is still holding, say — may run on
behind the detached turn; what detaching guarantees is that NOTHING IS WAITING FOR IT any
Expand Down Expand Up @@ -856,7 +859,8 @@ inside one.
a browser.

Your unsent sentence, caret and attachments stay with the conversation. The
conversation remains in `alt+k` and Home, and reopening restores its tab and draft.
conversation remains on Home, with progress still visible while it works. It leaves
the open `alt+k` list; reopening restores its tab and draft.

Closing the active tab selects the most recently used remaining open tab. With
none left, the window goes **Home** with the current session behind it.
Expand Down Expand Up @@ -1770,9 +1774,11 @@ every section at once and is drawn on the **control row** at the top of the list
`⌕ port`. `alt+s` sorts by the next column — age, name, state, files, cost — and
`alt+shift+s` turns the column you are on round; a press on one of the two column labels at
the right of that control row sorts by it. `→` opens the row's
verbs, and this place has one: `s stop it`, over a task this conversation is holding that is
still queued or running. Its foot is assembled from what is true of the row under the
cursor — `enter open its room · → verbs: stop it · alt+s sort · type to filter` over a task this
conversation actions: `x close` (then `x delete` after closing), `c copy name`,
`n new in project`, and `o open folder`. A collapsed family opens before its actions.
Delete asks `delete is permanent, are you sure?`; `y` confirms, `n` restores the actions.
Enter reopens a closed row. To stop work without deleting its record, open its room
and use its Stop action. The foot names the applicable actions over a task this
window is running, `enter go inside it` on a task another conversation ran, which has no room to open,
and one of three clauses on a task another codeaf **window** is running:
`enter go to that conversation` when this terminal is holding that conversation, which
Expand Down Expand Up @@ -1930,7 +1936,9 @@ released Ctrl.
```

It works from the **first** session: on a fresh launch you hold one conversation, the card
has that one row, and the fold has the rest of the machine in it.
has that one row, and the fold has the rest of the machine in it. If every conversation tab is
closed, the card shows saved conversations immediately, including when only one remains.
The hide-closed option appears only while there are open rows to leave on screen.

## What the fold at the foot holds, and the tabs above the conversation

Expand Down Expand Up @@ -2144,10 +2152,13 @@ everything else this window is not showing — so pressing it again closes the n
rather than the same one, and several go in a row. Its conversation, its work and its
draft are untouched; `→` reaches it and `enter` brings it back.

**Tab closing does not archive the saved conversation.** Home shows up to three
recently closed tabs as dimmed rows. `ctrl+e` or `→`, then `x close`, on Home also
archives the conversation and closes its tab, removing it from the default chats
list. Both routes keep work and drafts. Enter on a dimmed Home row reopens it.
**Every Close shares the same saved closed state.** Closing a tab, closing from
this menu, or using Close on Home or Sessions removes its tab and default chats
entry. Home and Sessions show its name in dark grey; work and drafts remain.
`→ show closed` in the chats menu includes saved closed conversations. Enter there,
on Home or Sessions, or `ctrl+shift+t` reopens it and clears the closed state everywhere.
Confirmed permanent deletion from Home or Sessions removes it from all four places
and the reopen stack.

On the row marked `you are here`, the card closes and the window selects the most
recently used remaining tab, or Home when none remain. This is the same action as
Expand Down Expand Up @@ -3521,3 +3532,19 @@ Press `alt+k` (`opt+k` on macOS) to open the chats menu from a conversation.
It lists the same open tabs as Home, in the tab strip's order. Select one and press
Enter. Closed conversations are behind the menu's fold; Home also keeps up to
three recently closed conversations dimmed below the open list.

## Permanently delete from Home or Sessions — y confirms, n cancels

Close the selected conversation with `→` then `x close`. Its work continues.
Open the actions again: `x delete` now asks `delete is permanent, are you sure?`.
`y` confirms. `n` or Escape cancels and restores the four actions; Enter does not confirm.
In Sessions, press `→` again after opening a collapsed family to reach these actions.
Enter on a closed row reopens it instead of deleting it.

Confirmed conversation deletion stops its agent and removes the conversation and all
its tasks. Tasks have no Close action: `→ x stop` stops active work, including queued or waiting
tasks. Once the entire task subtree has stopped, `→ x delete` offers the same y/n
confirmation. Deletion removes the selected task and all descendants. A Stop press
never changes into Delete if the task finishes while the menu is open.
Borrowed project files and sibling tasks remain. Permanent deletion has no undo and
is not offered for remotely hosted files.
54 changes: 33 additions & 21 deletions internal/manual/chat/places.md
Original file line number Diff line number Diff line change
Expand Up @@ -588,30 +588,42 @@ rather than home's `› type to search or start something new`. It used to show
shared prompt with the correction two rows further down on the foot, which meant the loudest
row on the screen was inviting a message the page cannot send. `enter` opens a task's room
when this conversation is holding it, and goes inside its record card otherwise. `→` opens
the row's options: `x close`, `n new in project`, `o open folder`, and
`p copy project` where the local conversation and project are available. A task this
conversation is holding that is still queued or running also offers `s stop it`. Everything starts expanded; the list scrolls and its
a conversation's options: `x close` (then `x delete` after closing), `c copy name`,
`n new in project`, and `o open folder` where those doors are available. Task rows offer
Stop while active and Delete for a settled subtree; their copy action remains `p copy project`. Everything starts expanded; the list scrolls and its
tail fades. The rule under the list is a bare line — the counts are on the section headings
the list already draws, and it says `nothing matches` only when your filter has emptied the
page — and the foot names only what is true of the row you are on: `enter open its room ·
→ verbs: stop it`.

## Close or put away a task, find an archived task, or reopen it

On home or the Sessions list, select the task, press `→`, then `x close`.
The task disappears immediately from the Sessions list, including the current filter
results, and from home's panels. Its work continues if it is running; its record,
conversation, and other tasks are unchanged. The choice is saved with the conversation
and survives reopening the app.

To recover it, change the Sessions filter or reopen the page and type its name. Search
includes put-away tasks within the selected time window; expand that window if the task is older. Select the matching
task and use `→`, then `x reopen`. `enter` can still open its record.

`n new in project`, `o open folder`, and `p copy project` use the project of the conversation
that owns the selected task. A new chat is independent of the task. These folder actions
and per-task put-away are local capabilities; a connected remote window does not offer
them. Its existing stop action remains available when that engine supports it.
→ verbs: stop, new in project, open folder, copy project` over an active task.

## Closed conversations in Sessions — dark grey names and synchronized tabs

A closed conversation stays in Sessions with its name in the same dark grey as Home,
even when selected. Its running work keeps its progress marks. Closing from Home,
Sessions, the conversation tab or the chats menu saves the same state: the tab and
its default `alt+k` entry disappear. The menu's `→ show closed` fold can still find it.
Enter reopens it and restores its normal name and tab. Confirmed permanent deletion
removes the conversation immediately from the current Home or Sessions screen, as well
as tabs, the chats menu and reopen history. There is no need to leave and return;
an older engine snapshot cannot bring the deleted row back.
This also works for the current conversation: its saved folder and ownership survive
live-status updates, and deletion prepares a fresh conversation before stopping it.

## Stop or delete a task — what happened to close or archived tasks?

On Home or Sessions, select the task and press `→`. `x stop` stops active work,
including queued or waiting tasks and active descendants. Its records remain visible.
Tasks have no Close operation; previously hidden tasks are shown again.

Once the whole selected subtree has stopped, `x delete` asks
`delete is permanent, are you sure?`. `y` deletes the task and all descendants;
`n` or Escape cancels and restores the four actions. Enter does not confirm deletion.
New in project, Open folder and Copy project remain available. Deletion removes rows
immediately and preserves the conversation and unrelated siblings. A Stop action stays
Stop even if the task finishes while its menu is open.

Conversation rows retain Close followed by confirmed Delete. Closing preserves work;
confirmed conversation deletion stops its agent and deletes every task it owns.

## standing — what runs without being asked, and where to type on the standing page

Expand Down
Loading
Loading