Jobs are the workflows that orchestrate your agents. Each job is a finite state machine (FSM) — you define the states it moves through, what agents execute at each state, and how it transitions forward.Documentation Index
Fetch the complete documentation index at: https://docs.hellofriday.ai/llms.txt
Use this file to discover all available pages before exploring further.
Anatomy of a job
workspace.yml
The trigger contract
When a signal fires, the runtime resets the FSM toinitial and sends { type: <signal-name>, data: <payload> }. The initial state’s on map must have a key that exactly matches the signal name — or the event is silently ignored and no session starts.
Action types
Each entry array in a state takes one or more actions: Agent action — invoke an agent and optionally capture its output:type: emit to trigger the transition. The event name must exactly match a key in the on map.
Passing data between steps
UseoutputTo and inputFrom to chain steps:
inputFrom as an array — the engine concatenates them:
Conditional branching
Transitions can be arrays with guard functions — the first passing guard wins:Running jobs
- Signals — external events like webhooks or cron schedules
- Studio UI — click Run on any job card in the Studio
- API —
POST /api/workspaces/:id/signals/:signalId - CLI —
friday signal trigger -n <signal> -w <workspace>
Memory
Jobs can read and write workspace memory through agents. Memory persists across sessions — agents can recall what happened in previous runs. See Memory.Inspecting jobs
Use the Job Inspector to visualize the FSM as a , run jobs with custom inputs, and debug executions with the waterfall timeline.Common gotchas
type: atlasagents ignore thetoolsarray. Bundled agents are self-contained. If you need MCP tools called, usetype: llmwith an explicittoolsarray instead.- Missing
type: emit— if a state has no emit action, the FSM never transitions and the session hangs. - Emit name mismatch —
event: DONEin the emit must match theon: DONEkey exactly. outputTomissing in a pipeline — the next step’sinputFromreceives nothing. Always pair them.

