# Halcyon demo

> A sleep app draws the agent’s breathing widget as its own orb, with no Mindset UI on screen.

Pattern: Your own UI. Brand: Halcyon. Tags: UI-less client, custom widget, own transcript, situational awareness, reduced motion.

## What it shows

- **Your own UI**: the UI-less client (`createAgentConversation`) with the page drawing every bubble, the composer and the status line itself: no Mindset UI on screen
- A custom widget, `halcyon-breathing-timer`, arriving as a `widget-payload` event and drawn as the app’s breathing orb instead of a card
- A composer held closed until the client is ready, announced through an `aria-live` status, as the UI-less reference page teaches
- Situational awareness telling the agent whether a breathing session is running, so it never starts a second one
- A still orb with a text countdown under `prefers-reduced-motion`

## Files

- `demos/halcyon/demo.json`
- `demos/halcyon/widgets/halcyon-breathing-timer.json`
- `demos/halcyon/prompt/policy-rules.md`
- `src/demos/halcyon/index.tsx`
- `src/demos/halcyon/breath.ts`
- `src/demos/halcyon/useBreathing.ts`

## More

- [Source](https://docs.mindset.ai/demos/halcyon/source)
- [How it works](https://docs.mindset.ai/demos/halcyon/how)
- [The UI-less client](https://docs.mindset.ai/docs/the-ui-less-client)
- [Use your own UI](https://docs.mindset.ai/docs/use-your-own-ui)
- [Events reference](https://docs.mindset.ai/docs/events-reference)
- [Show a widget](https://docs.mindset.ai/docs/build-a-widget)
- [Put an agent on your page](https://docs.mindset.ai/docs/put-an-agent-on-your-page)
