# Agent → Triggers (`/agent/triggers`)

Status: DRAFT from the live app, 2026-09-13. Not yet confirmed by the operator.

## What it is for
While ManyChat is still running, the list of keywords that belong to it: a
comment or message matching one of these is left to ManyChat and our AI stays
quiet. Our own keyword triggers were retired on 2026-07-30 ("triggers will be
obsolete"); flows carry that job now. This screen exists only for the handover
period and goes with ManyChat when ManyChat goes.

## What it must show
- The keywords read from the ManyChat account: each with where it came from
  (the flow name and the folder it is filed in) and the surfaces it applies to
  (direct messages, comments).
- Per keyword, **Left to ManyChat on**: which surfaces our AI yields on for that
  keyword. Off means our AI answers even though ManyChat has a flow for it.
- A refresh that re-reads ManyChat's flow names and folders, so renaming or
  re-filing a flow there changes this list. Switching a flow off does not (ManyChat
  reports no live status); "not-live" in the flow's name hands its keyword back.
- Honest empty states: no ManyChat key configured (nothing can be read), and no
  keywords found.

## What it must do
- Refresh from ManyChat; flip a keyword's suppression per surface.

## Deliberately not here
- No trigger authoring: a trigger that starts one of our flows is made on the
  flow's canvas, not here.
- No ManyChat flow editing: ManyChat's own UI, by a person (its API has no
  flow-authoring endpoint).

## Known gaps against intent
- A ManyChat flow that is switched OFF in ManyChat still suppresses our AI
  here until the list is refreshed and the row is flipped (boarded 07-24).
- When ManyChat is retired the screen should disappear with it; there is no
  switch that hides it yet.

## Proof
`Triggers.test.tsx` passes; on prod, renaming a flow in ManyChat and pressing
refresh changes the row's "where it came from".
