# Quotes and merges

Send a quote, see what the client gets, then merge, retry, or reject.

## Prerequisites

- The request is open from the **Inbox**.
- A quote is available when the status is **Needs a quote**.
- A merge needs a pull request. **Retry** needs the status **Failed**.

## Steps

### Send a quote

1. On a **Needs a quote** request, the form is **Quote for the client**.
2. **Amount** is optional. The hint is "Optional. Currency:" and the workspace currency. Leave it blank to send no price.
3. **Timing** is optional. The placeholder is "2-3 business days".
4. **Note to the client** is required. The placeholder is "What this covers".
5. **Show the amount to the client** is on by default. Turn it off to hide the price.
6. Press **Send quote to client**. The toast is "Quote sent". The status becomes **Quote sent**, and the quote state is **Pending**.

The quote stays valid for **Quote validity (days)** on the project. The default is 14. See [Autopilot and limits](https://www.modifee.com/docs/agency/autopilot-and-limits).

On the same menu (the **…** button) you can skip the quote:

- **Run the agent anyway**. The toast is "Agent queued".
- **Mark as handled outside Modifee**. The toast is "Marked as handled".

### What the client sees

The widget title is **Quote**. In French it is **Devis**. In Spanish it is **Presupuesto**.

They see the note, the timing under **Timing** (**Délai** / **Plazo**), and the amount when the switch was on. The buttons are **Accept** and **Decline**.

- **Accept** queues the agent. The widget says "Thanks —" the team name "is starting on this." French: "Merci —" the team name "s'en occupe." The dashboard state becomes **Accepted**.
- **Decline** asks **Why? (optional)**, then **Decline quote**. The widget says "Understood." and the team name "has your answer." The dashboard state becomes **Declined** and the request status is **Quote declined**.
- When the quote expires, the widget says "This quote is no longer valid. Write to us to update it." The dashboard state is **Expired**, and the inbox line is "Quote expired".
- After 3 days with no answer, the client is reminded: the team name "is still waiting on your answer to this quote." The inbox line is "Quote awaiting response (3 days)".

### Merge

Press **Approve & merge**. The dialog title is the same.

- After the client has approved, the text is "Squash-merge this pull request into the default branch."
- Before that, it is "The client hasn't approved yet. Merge anyway?"
- When the pull request changes more than 5 files, it adds "This diff touches" the count, then "files."
- If the file count did not load, it adds "The file count could not be loaded."

Confirm **Approve & merge**. The toast is "Merged". The status becomes **Merged**. The widget says **It's live!**

The key `a` opens the same merge, unless you are typing in a field. `r` opens **Reply**. **Reply to the client** says "This message is emailed to the client." The toast is "Reply sent".

Autopilot can merge an eligible change after **Looks good** without this button. See [Autopilot and limits](https://www.modifee.com/docs/agency/autopilot-and-limits).

### Retry

**Retry** is enabled only when the status is **Failed**. Otherwise the reason is "Only failed requests can be retried."

The dialog is **Retry this request**. The text is "Start the agent again. Extra context is added to this attempt only." The box placeholder is "Add context for the agent (optional)". Confirm **Retry**. The toast is "Retry started".

### Reject

**Reject** opens **Reject this request**. The text is "Close it without merging. An optional note is sent to the client." The placeholder is "Message to the client (optional)". Confirm **Reject**. The toast is "Rejected".

The widget then says the team name "closed this request without publishing it."

**Reject** and **Reply** are disabled on a closed request with "This request is already closed."

## Verify

A sent quote shows **Pending** until the client acts. **Accept** moves the request forward and shows **Accepted**. A merge ends on **Merged**. A reject ends on **Rejected**. A retry leaves **Failed**.

## Troubleshooting

- **Approve & merge** stays disabled. Read the tooltip: "This request is already closed." "Preview not ready yet." "Review required — merge on GitHub." "No pull request to merge."
- **Review required** with a "Protected path:" or "Deleted file:" line will not merge from this button. Merge that pull request on GitHub, or change the request so it no longer touches those files. See [Guardrails](https://www.modifee.com/docs/agency/guardrails).
- The client says the quote is no longer valid. Send a new quote. The old one is **Expired**.
