# Sense compute → workflow (RFC #308) Stateful senses no longer emit signals or pass outputs through `routeSenseComputeOutput`. The worker runs `compute(state)` and returns `{ state, workflow }`. ## Flow ``` Sense worker: compute(state) → { state, workflow } ↓ persist state JSON (data/senses/.json) ↓ IPC compute-result → kernel ↓ workflow !== null → parseWorkflowTrigger (validation) → workflowManager.startWorkflow scheduler.onSenseCompleted(senseName) → dependents with `on: [senseName]` ``` ## Workflow trigger shape When `workflow` is non-null it must be a plain object validated by `parseWorkflowTrigger()` in `packages/core/src/sense.ts`: - `name`: non-empty string - `maxRounds`: integer ≥ 1 - `prompt`: string - `dryRun`: boolean Invalid triggers are rejected by the daemon when handling the worker message (workflow is not started). ## Scheduling Other senses list this sense under `on` in `nerve.yaml` to be scheduled when this sense completes a successful compute (see sense scheduler reverse-index in the daemon).