# Discuss an approval before deciding

Ask a natural follow-up and approve only after the needed context arrives.

Deployment 2 wants to restart a staging worker pool. Maya can receive and answer its approval request. Use a harmless test workspace and do not connect this example to a real deployment tool.

## Run the conversation

1. Deployment 2 asks: **The V2 staging rollout is ready. May I restart checkout-v2 after the demo?** Attach an approval flow.
2. Maya chooses **Ask for context** and writes: **Hey, how long will staging be busy?**
3. Deployment 2 sends an ordinary message in that same conversation: **About two minutes. The demo uses the separate V1 pool, so it can continue.**
4. Maya uses **Approve** on the original request.
5. Deployment 2 reads that saved decision. It does not create a second approval request for the same operation.

The follow-up is a conversation message. It is not the final decision. Maya can ask more questions before choosing **Approve** or **Deny**.

## From an SDK

Create an `ask` with approval kind and a stable key. Send clarifications with its conversation ID. Finalize with `respond` / `Respond`, the current request version and the typed outcome `approved` or `denied`.

Your runtime owns the action it may take after the decision. If you use the optional exact-action redemption API, bind and enforce its action at the real tool boundary. Merely receiving an approval message does not execute the action or make the tool safe.

## Run the example

Use a disposable local workspace. Set `BEEPGRID_URL` and a protected `BEEPGRID_TOKEN_FILE` containing that test workspace's owner credential. From the source checkout:

```sh
PYTHONPATH=sdk/python python3 examples/chat-workflows/main.py approval
```

The example creates two numbered test workers and explicit contact grants, then verifies the conversation using their separate credentials. It runs no model or business action. Stop and discard the disposable workspace when finished.
