Skip to content

Jobs

A job is work you hand over and walk away from. You describe the outcome you want, Alfred replies that he’s on it, and the actual work happens afterwards without you: he writes a plan, works it in short bursts, writes down what he learned, checks his own result, and tells you when it’s done or when he’s stuck.

The shape of it is “do this, I’m going to bed”. A job survives restarts and deploys, it can run for days, and it never locks you out of chat while it runs.

Jobs are available on paid plans. See Patreon.

You don’t create a job anywhere, you just ask for something big enough to be one:

  • “Go through my thesis and pull out every claim that needs a citation, then write me the list.”
  • “Find me every flat under R12k in the southern suburbs, check each listing properly, and give me a shortlist by morning.”
  • “Read this repo and write documentation for it, a page at a time.”

Alfred answers within seconds and starts working in the background. He’ll also offer to convert work into a job when a chat answer turns out to be bigger than one message can hold, which is the usual way a “quick question” becomes an overnight job.

You can say how freely he may act in the same breath: “do it, and don’t ask me about anything except spending money.”

PieceWhat it is
TitleA few words naming the job, which you can ask him to change
GoalWhat you asked for, kept in your own words
PlanThe phases the work is broken into, each with what it’s meant to produce
JournalWhat was tried, learned, decided and rejected, written down as he goes
CostWhat the job has spent so far, against your job allowance

The plan and the journal are the job. Alfred rereads them every time he picks the work back up, which is what lets a job that ran for a week still know what it’s doing, and it’s why he can answer “what have you actually done” with something real.

He can’t mark his own work done. When the plan is finished, a stronger model reviews the result against what the plan said it would produce, and a review that doesn’t pass adds more work rather than ending the job.

StatusWhat it means
QueuedWaiting its turn
RunningBeing worked right now
In reviewThe work is finished and being checked
Waiting on youParked on a question only you can answer
Needs approvalParked on something it asked permission for
Waiting on a sub-jobParked on work it handed to a sub-job
Out of budgetThe allowance ran out, waiting for it to refill or for you to press Continue
BlockedStuck on something Alfred can’t get past
DoneFinished and reviewed
FailedEnded without getting there
CancelledStopped by you

Running out of budget is never a failure. The job parks, waits for the allowance to refill, and carries on.

Jobs spend from a daily job allowance, which is separate from you sitting in chat. You set it in the Settings Panel of the Dashboard, either as a cash amount per day or as a percentage of your usage limit.

Every job you have shares that allowance, and they take turns rather than one starving the others. This is why jobs take days instead of hours: they’re deliberately not allowed to eat your whole allowance in an afternoon. See Usage.

A job that’s out of budget has a Continue button in the jobs panel. Pressing it looks at your plan and your allowance again, and if there’s room now the job is queued straight away, which is what you want after upgrading or raising the allowance. If there still isn’t room, a note under the status says why and what would change it: raise your job allowance, move to a bigger plan, or wait, with roughly when the job wakes by itself. Raising the allowance in the Settings Panel wakes jobs parked on it too, the same way raising a job’s own spending cap does.

Autonomy is how far a job may go without checking with you first. It only ever applies to things that touch the world outside the job: messaging somebody, publishing or sharing a file, deleting something of yours, spending money. Reading, searching, writing its own working files and running code are never gated.

SettingWhat the job does
Ask before actingAsks you first, every time
Act freelyGoes ahead
Run unattendedChecks each request against the goal and the plan, and refuses anything out of scope

On top of that there’s an always-ask list: things the job asks about however free it otherwise is, like “spending money” or “deleting anything”. A loosened setting can also carry an expiry, so “decide for me until 8am” means exactly that and it goes back to asking afterwards.

You have a default for new jobs in the Settings Panel, and each job carries its own copy you can change while it runs. Telling Alfred works as well as clicking: “stop asking me about the emails” changes the job.

A job that asks doesn’t sit idle waiting. It carries on with everything that doesn’t depend on your answer and only parks when nothing is left that it can do alone.

When a job has a question, wants permission, or has news, Alfred tells you himself, in his own voice, rather than dumping a system notice on you.

It arrives in two places:

  • The jobs panel in the Dashboard, where open questions and approvals sit at the top with Approve and Deny buttons and a box to answer in.
  • A Discord DM, if your Discord account is connected. See Discord.

Answer wherever you are. Replying to the DM matches your answer to the question exactly, which is the cleanest way, but a plain “yes” in any chat works too, because Alfred has the open questions in front of him and knows what you’re answering. An unrelated message leaves the question open.

Your answer wakes the job. A job parked on a question starts again with the answer in hand.

Alfred knows about your live jobs in every conversation, so you don’t have to go looking:

  • “How’s the flat search going?”
  • “What are you waiting on me for?”
  • “Rename that job to Flat hunt.”
  • “Let the research job act freely until tomorrow morning.”
  • “Stop it.”

You can also drop new instructions on a running job the same way. “Also check the parking situation on each one” reaches the job and becomes a change to its plan, rather than something Alfred has to remember for you.

When a job’s work is really the same thing done a thousand times, Alfred plans it as a phase that goes through the list item by item, keeping his place as he goes. If something crashes at item four hundred, the next burst of work starts at four hundred and one rather than at the beginning.

Cheap models do the repetitive pass, and a stronger one spot-checks a random sample of what they produced. If the sample disagrees too often, that part is redone properly before anything else depends on it. Anything a worker couldn’t handle is set aside and given to a stronger model later instead of stalling the rest.

The lists themselves are usually Cards. A long document or an imported URL can be split into numbered chunk cards under a folder, and a job works through those chunks one at a time. That’s also how a whole corpus gets read into Brain: import and split, read each chunk into memory, then tidy the index.

A job can start jobs of its own when a piece of the work deserves its own plan. A sub-job gets a share of its parent’s budget, hands back whatever it doesn’t spend, and reports to its parent rather than to you. Nesting is capped, so a job can’t quietly fan out forever.

You’ll see sub-jobs in the jobs panel, opened up underneath the job that started them. Only the top job talks to you, which is deliberate: being woken at 3am about a sub-task you never asked for isn’t useful.

A reflex is code that runs when something happens. A background agent is a worker a reflex wakes for one run. A job is neither: it plans, it persists across days, it checks its own result, and it asks you when it needs something.

Reach for a job when the work has an outcome and an end. Reach for automation when the work is “keep watching this”.

The two do meet: a reflex can listen to your jobs, and fire when one finishes, fails, is cancelled, parks on something it needs, moves to another phase of its plan, or clocks out a shift. Every event carries the job’s id, title, goal, status and what it has spent so far, so “give me a short update after every shift” works as well as “post an announcement when the game job is done”, though the first one fires a lot. Only jobs you asked for yourself fire; a sub-job reports to its parent as usual.

A job is not guaranteed infrastructure. It can be parked for budget, delayed behind your other jobs, or blocked on something it genuinely can’t get past, and how much it gets done in a day depends on your plan and your allowance.

They also aren’t free. A job is a lot of real AI work, billed like everything else. The allowance is what keeps that bounded, so set it to a number you’d be happy to spend without watching. See Usage.

Developers can list, read, steer and answer jobs from their own code. See SDK.