---
source: CrewKit documentation
url: https://crewkit.io/docs/workspace-feature.md
title: "Ship a feature with approval"
description: "Propose a feature keyed to an Epic, get a lead's approval, start it and follow the Epic's progress."
---


You end up with a feature that a lead signed off before any branch was cut, keyed to its Jira Epic, with the Epic's progress — done count, date span and risk — visible in the CLI, the dashboard and Slack.

**You need:**

- What every workspace guide needs — see [Before you start](/docs/workspaces#before-you-start) — and to be a workspace member to propose, a lead (or manager or above) to approve.
- A workspace folder — see [Set up a workspace](/docs/workspace-setup).

---

## 1. Propose the feature

With the Epic's key:

```bash
crewkit work start --feature CREW-120
```

Or from a description, which searches the workspace's Jira project for Epics and offers to create one:

```bash
crewkit work start --feature "single sign-on"
```

crewkit creates the work item as **Proposed** and cuts nothing:

```
  Work item crew-120-single-sign-on  CREW-120
  proposed: waiting for a lead's approval
```

With Jira connected, a feature's card must be an Epic. The workspace's Slack channel gets a post asking for approval, with a link to the work item.

---

## 2. A lead approves it

Any one of these, by a workspace lead or a manager or above:

- **Dashboard** — on the workspace page, the **Work** card lists the item under **Proposed**. Click **Approve**.
- **Slack** — the approval post's link opens the workspace page at the item; click **Approve** there.
- **CLI** —

  ```bash
  crewkit work approve crew-120-single-sign-on
  ```

  ```
    Approved crew-120-single-sign-on open
  ```

The item moves to **Open** and Slack posts the approval.

---

## 3. Start the work

```bash
crewkit work start CREW-120
```

crewkit resumes the approved feature and cuts its branches and worktrees as for a fix, asking which repositories to work in (or taking `--repo`). From here the flow is the same as [fixing a ticket](/docs/workspace-fix): work, `crewkit work save`, `crewkit work pr`, merge.

---

## 4. Follow the Epic's progress

crewkit reads the Epic's child issues about every 15 minutes:

- **Progress** — children done out of the total.
- **Date span** — the earliest child start date to the latest child due date; a missing date reads `unknown`.
- **At risk** — at least one child that is not done is past its due date.

Where you see it:

- **`crewkit work list`** — a line under the feature:

  ```
                 █████░░░░░ 4/8 done (50%) · Oct 1 → Nov 14 · at risk
  ```

- **`crewkit work show crew-120-single-sign-on`** — the same line after `progress:`.
- **Dashboard** — the feature's row in the **Work** card shows a progress bar, `4/8 done`, the date span and an **At risk** badge (hover it for how many children are past due).
- **Slack** — a post each time the progress changes, e.g. `progress 3/8 → 4/8 done, at risk`.

An Epic with no children reads `no child issues`.

---

## If it stops

- **`proposed: waiting for a lead's approval`** after `crewkit work start CREW-120` — the feature is not approved yet, so no worktree is cut. Ask a lead to approve it, then run the same command again.
- **`Approved: cut its worktrees with crewkit work start CREW-120`** — you ran `--feature` on a feature that is already approved. Run the command it prints.
- **`pick an Epic with crewkit work start --feature <KEY-n>; creating one needs an interactive terminal`** — choosing from search results and creating an Epic need a yes on a terminal.
- **The approval is refused** — only workspace leads and managers or above can approve, and only a proposed feature. Ask a lead, or check the item is still under **Proposed**.
- **`epic too large to read`** or **`no Jira connection`** next to the status — progress is not current. An admin can check the connection under **Integrations**.

---

## Next steps

- [Hand off work and set agent settings](/docs/workspace-handoff)
- [Workspaces](/docs/workspaces)
