> ## Documentation Index
> Fetch the complete documentation index at: https://studio.assembly.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Iterating on apps

The initial build gets you a working app. Iteration is where it becomes the app you actually want. The iteration model is the same chat you used to build the app — you describe what you want changed, the app builder changes it.

## The build chat

Every custom-built app has a build chat attached to it. Open the app in your Dashboard, click into the builder, and you're back in the same conversation. The agent has the full history and the current state of the app.

You can iterate as much as you want. There's no separate edit mode.

## Requesting changes

Phrase changes the way you'd phrase them to a teammate. Concrete is better than abstract.

<CodeGroup>
  ```text Concrete theme={null}
  On the client view, move the "Submit" button to the top
  of the form. The current bottom placement requires
  scrolling on mobile.
  ```

  ```text Vague theme={null}
  Make it more usable.
  ```
</CodeGroup>

<CodeGroup>
  ```text Concrete theme={null}
  Add a filter on the team dashboard for "assigned to me."
  When it's on, show only deals where the current user is
  the owner.
  ```

  ```text Vague theme={null}
  Add filters.
  ```
</CodeGroup>

## One change at a time

This is the single biggest unlock for iteration quality.

A change request like "fix the form, change the colors, add a filter, and reorganize the dashboard" produces a slower build, a higher chance of regressions, and a harder time spotting what went wrong. Same four changes one at a time produces faster builds, cleaner results, and easier debugging if something breaks.

<Tip>
  Watch the live preview after each change. If something looks wrong, say so before requesting the next thing. The agent has context on the most recent change and can fix it faster than it can untangle three changes back.
</Tip>

## Approving gated tasks

Some tasks pause for your approval before executing. These are tasks that affect things outside the app itself — adding integrations, modifying workspace settings, anything that the agent flags as needing a human in the loop.

When this happens, the chat will show a task card with an Approve or Skip choice. Read what the task does and decide.

## Adding secrets and API keys

If your app needs to call an external service — Stripe, OpenAI, an internal API — the app builder asks for credentials mid-build. The build pauses on a form that names the secret, explains what it's for, and gives you a field to paste the value.

<Note>
  Secrets you provide are stored encrypted and only available to your app at runtime. They aren't exposed in the build chat, in version history, or to other apps.
</Note>

If you don't have the credential handy when asked, you can skip the form and the build continues without that integration. You can add the secret later by re-running the build with the secret in hand, or by adding it from the app's settings.

## Version history

Every change in the build chat creates a new version. You can browse versions from the app's history view and roll back to a previous one if a change introduced a regression.

<Note>
  Version browsing is in active development during the beta. The list of versions is reliable; the diff view and rollback flow are still improving. If you need to revert urgently and the UI isn't behaving, ask in [#help](/docs/programs-and-support/community).
</Note>

## When iteration isn't working

A few signals that the iteration loop is the wrong tool:

* You've asked for the same change three times and it isn't sticking
* The app feels structurally wrong, not just rough in spots
* You realize the original prompt didn't capture what you actually want

In those cases, starting over with a sharper prompt is usually faster than iterating your way out. Save the version, start a new build, and crib whatever you can from the existing app.
