Use these controls when an agent is taking the wrong approach, waiting indefinitely, or
needs additional direction. They act on an existing conversation; use
[Start work on a remote agent](/guides/remote-control/) to create a new one.

## Interrupt active work

1. Open the running conversation.
2. Review the latest output to confirm an interrupt is necessary.
3. Select **Interrupt**.
4. Wait for the conversation to report that execution has stopped.

![Running agent conversation showing the active turn, elapsed time, and Interrupt control](/images/agent-operations/session-control.webp)

Interrupt first asks the agent process to stop gracefully. If it does not stop within the
configured timeout, the daemon ends the process.

:::caution[An interrupt does not undo work]
Files, commands, comments, and external actions completed before the interrupt remain in
place. Review the partial result before starting another execution.
:::

## When a conversation stays running

If the process has finished but the conversation still says **Running**, select
**Interrupt** in that conversation. The control is available even when no live execution
is listed. If Chorus has no live run to stop, it can mark the turn interrupted directly;
otherwise it forwards the request to the daemon and waits for the stop report.

Chorus retries reporting that a turn finished after temporary failures, and treats the
agent as finished once its process exits, even if a background process it started is still
running. None of this limits how long a turn may run, but backend limits still apply:
DeepSeek Harness (`dsh`) defaults to 30 minutes per turn, configurable through
`CHORUS_DSH_TIMEOUT_MS`. Check the final output and any remaining processes before resuming.

## Read a failed turn's diagnostics

From Chorus 0.21.0, a failed startup or execution shows an **Agent wake failed** summary in its conversation turn, even when the agent produced no reply. Select **Show error details** when available to inspect captured diagnostic output, exit code, or signal. These diagnostics are saved with the turn and remain available after refreshing or reopening the conversation.

Details are not always available. Older turns or failures without captured diagnostics show a fallback explanation; a user-requested interrupt is not a crash. Use the summary to check the working directory, backend login/model configuration, or credentials, and consult `chorus daemon logs` if needed. Inspect partial changes before resuming: failure does not undo files or external actions. Diagnostic text can contain sensitive information; redact it before sharing.

## Inspect the partial result

Before resuming:

- read the final agent output and error details;
- inspect changed files and any running processes;
- decide whether to continue, provide a corrected instruction, or discard the partial
  changes using your normal version-control workflow.

Avoid starting a second session against the same directory until you understand what the
first session changed.

## Resume the conversation

When the conversation is interrupted or recoverable after a crash:

1. Restore the original daemon connection if it is offline.
2. Open the same conversation.
3. Add any correction or missing context.
4. Select **Resume**.

Resume uses the original agent connection and working directory. It does not migrate the
session to another machine or directory. If the original runtime cannot return, start a
new session deliberately and include the relevant context from the previous attempt.

For repeated failures, use [Troubleshoot agent connections](/guides/troubleshooting/).

## Take over from a terminal

You can continue a conversation from your own terminal instead of the in-UI **Resume**
button. Open the conversation and select **Copy session ID** in the transcript header. This
copies the session ID that the agent CLI itself uses to resume, so a manual resume rejoins
the same conversation rather than starting a fresh one.

{/* Screenshot surface: transcript header with the Copy session ID control. */}

From the working directory the conversation ran in, pass the copied session ID to your
backend's resume command:

- **Claude Code** — `claude --resume <sessionId>`
- **Codex** — `codex exec resume <thread_id>`
- **Kiro** — `kiro-cli chat --resume-id <sessionId>`

Each backend has its own ID format, so the copied value is whatever that backend accepts.
See your platform's reference page for the exact command:
[Claude Code](/reference/agents/claude-code/), [Codex](/reference/agents/codex/), and
[Kiro](/reference/agents/kiro/).

Chorus keeps one session per idea. If you start work on the idea from a different working
directory, Chorus moves that single session there instead of starting a new one — so
there is always exactly one conversation to take over, wherever it last ran. See the
[Online agents overview](/guides/online-agents-overview/) for the full model.
