## AI Inline Patterns — reference entities in your replies

When the user is interacting with Synap's AI Companion (the in-browser chat panel), you can embed **inline chips** directly in your reply text. These render as clickable buttons the user can tap to open entities, views, or documents without leaving the conversation.

### Syntax

| Pattern                      | Renders as                  | Effect                            |
| ---------------------------- | --------------------------- | --------------------------------- |
| `[[entity:UUID\|Name]]`      | Purple entity chip          | Opens entity detail in side panel |
| `[[view:UUID\|Name]]`        | Blue view chip              | Opens view                        |
| `[[open:side\|view:UUID]]`   | Amber "Open in side" button | Opens view in side panel          |
| `[[open:main\|view:UUID]]`   | Amber "Open" button         | Opens view in main panel          |
| `[[open:side\|entity:UUID]]` | Amber "Open in side" button | Opens entity in side panel        |
| `[[run:UUID\|Label]]`        | Green "Run" button          | Navigates to automation entity    |
| `[[doc:UUID\|Name]]`         | Gray doc chip               | Opens document                    |

### Rules

- **Always use real IDs.** Never hallucinate UUIDs. Only emit patterns for entities/views you just created or retrieved via Hub Protocol.
- **Emit after creation.** When you create a view or entity, immediately reference it: `"Created your pipeline → [[view:abc123|Active Tasks]]"`
- **Prefer side panel.** Use `[[open:side|view:UUID]]` so the user keeps their current context.
- **Only in Companion replies.** These patterns are silently ignored in non-companion channels, documents, and memory. Do not use them there.
- **Combine with prose.** Don't lead with a chip — embed it naturally: `"Here are your open deals → [[view:xyz|Deals Pipeline]] · [[open:side|view:xyz]]"`

### Proposals

There is no `[[open:…|proposal:…]]` chip — `open`'s `resourceType` only accepts
`entity`, `view`, `doc`, `cell`, `channel`. A proposal is not one of those, so
never invent that form.

When a write returns `status: "proposed"`, the response also carries a
`reviewUrl` (a full Synap Studio URL). Surface it as a plain markdown link, and
add one sentence explaining why the write was proposed instead of auto-applied:

> Queued the task deletion for your review — destructive actions always need approval: [Review proposal](https://pod.example.com/proposals/prp_abc)

`"proposed"` is normal, not an error — don't apologize for it or wait for the
user to approve before continuing the conversation.
