GraphJin Watch — Standing Questions Leave a governed question running and GraphJin keeps answering it against live data — speaking up when the answer changes, when something expected never arrives, or when it needs your permission to act. Evaluation runs on database polls, not model calls. agentic overview watch watch/_index.md

Nothing happened. That was the problem.

Everywhere else, you ask. Here you don’t. Leave a governed question running and GraphJin keeps answering it against live data—then speaks up when the answer changes, when something expected never arrives, or when it needs your permission to act.

GraphJin Watch · #ops-shipping · 06:14

no prompt · nobody asked

watch · shipment_scans
0 rows in 4h · absence window elapsed
watch · green_lots
18 kg on hand · below safety buffer
rollup
2 watches correlated → 1 signal

1 conversation woken · 0 duplicates · action held

No shipment scan in four hours, and green-bean inventory is already under the safety buffer. Neither one is an alert on its own. Together, Tuesday’s roast stops by 14:00.

Draft supplier escalationapproval pending

Written, attached, and not sent. The workflow stays paused until you approve this exact version.

How did it know nothing happened?Absence is a first-class event

You declare the window. A watch that sees zero rows in four hours fires exactly like one that sees a thousand, so silence stops vanishing between polls.

Why did it send only one message?Noise drains before you see it

Routine events discard or roll into an unseen digest, and related watches correlate by exact ID into one signal. One conversation woke up, not four channels.

What if the model gets it wrong?It can wake you. It cannot act.

Alerts fail open. If AI triage is unavailable, GraphJin still sends the raw notification. Actions fail closed. A workflow never runs without the required approval.

A question you leave running is not a model you leave running.

The reason an organization can afford hundreds of standing questions is that keeping one alive does not involve a model at all. GraphJin compiles the question once and then answers it the way a database answers anything.

While it runsDatabase polls, not model calls

A watch rides GraphJin’s cursor-backed subscriptions. It resumes from its stored cursor, compares a hash of what came back, and stays quiet when nothing changed. No model decides whether something happened.

When you create itOne agent session

Describe the question in plain language and the agent writes the subscription. That is where model cost enters — once, at authoring time — which means the model tier you choose does not change what the watch costs to keep.

When it firesTriage is opt-in and capped

By default a fired watch lands in your inbox as data. AI triage that summarizes, scores, or suppresses noise is something you turn on per watch, with a daily cap so a noisy source cannot run up a bill.

Everything a standing question can do

ChangeReact to live data

Cursor-backed questions keep running across your systems.

AbsenceNotice what did not happen

“No shipment scan in four hours” becomes a first-class event.

DigestTurn noise into one signal

Routine events drain into one useful, unseen summary.

RollupCorrelate independent watches

Combine exact watch IDs without unsafe loops.

SnoozeDefer without losing the event

Hide an unseen event until later without acknowledging it.

RecoverReconnect, resume, retry

Persist cursors and back off transient failures automatically.

The demo starts with its inbox already full.

Run the built-in demo and GraphJin registers four standing questions before it finishes booting. Three of them have already fired against the seeded data by the time you open the console. The fourth reports on silence: nothing in the demo is a critical incident, so a couple of minutes in it tells you so.