---
title: Drafts
description: Save a task for later with dray draft, list saved drafts, and start or remove them.
sidebar:
  order: 4
---

A draft is a task saved for later: a prompt plus the picks it will start with, and no session behind it yet. Nothing runs and no worktree exists until it starts. It is the same thing ⌘S saves from the new-task composer.

Drafts show in the sidebar's drafts view. Click **Show drafts** (the dashed circle beside the project filter) to see them. From there you can open a draft, edit it and send it yourself.

## Save a draft

```bash
dray draft new "Add retry to the upload client. It should back off up to 30s."
```

Prints the draft's id.

| Flag | What it does |
|---|---|
| `--project <path>` | The repo it will run in. Defaults to the repo you are in, then the calling session's project. |
| `--model <alias>` | The model. Defaults to the calling session's. |
| `--effort <level>` | `low`, `medium`, `high`, `xhigh`, `max` or `ultra`. |
| `--harness <name>` | `claude_code`, `codex`, `pi`, `fx` or `grok`. |
| `--fast` | Run at the agent's faster tier once started. |
| `--base <session\|ref>` | Start its worktree from existing work once started: a session id, a branch, or any git ref. Committed work only. |

The picks inherit from the calling session exactly as [`dray session new`](/docs/cli/sessions#what-a-new-session-inherits) does. A draft made here always starts in its own worktree. A `--base` that cannot be found is refused when you save, and checked again when the draft starts.

## List drafts

```bash
dray draft ls
dray draft ls --all --json
```

One line per draft, newest first: id, agent, model, then the first line of the prompt. `[checkout]` marks a draft that will start in the project's own checkout instead of a worktree; only a draft saved that way in the app does.

| Flag | What it does |
|---|---|
| `--all` | Every project, not just this one. |
| `--project <path>` | List this repo instead. |
| `--json` | One JSON array, for scripts. |

## Start a draft

```bash
dray draft start <draft-id>
```

Starts the draft as a session and takes it off the draft list. Prints the new session's id and a line like `Started "…" in worktree calm-owl`. Run from inside a session, the new session is nested under the caller, and the [depth limit](/docs/cli/sessions#how-deep-it-can-go) applies. If the start fails, the draft goes back on the list.

## Remove a draft

```bash
dray draft rm <draft-id>
```

Deletes the draft.

## Limits

- A draft made with `dray` cannot be edited from the CLI. Edit it in the app.
- No flag makes a draft start in the project checkout.
