---
title: "Creating Your First Job"
description: "Walk through creating, editing, and managing a scheduled job in AnythingLLM."
---

import { Callout } from "nextra/components";
import Image from "next/image";

# Creating Your First Job

This page walks through creating a scheduled job from scratch. Everything is done from **Settings > Scheduled Jobs**.

## 1. Open the Scheduled Jobs page

Click the **wrench icon** to open Settings, expand the **Tools** section in the sidebar, and click **Scheduled Jobs**.

<Image
  src="/images/guides/scheduled-jobs/scheduled-jobs-settings-sidebar-location.png"
  height={562}
  width={518}
  quality={100}
  style={{
    display: "block",
    borderRadius: "12px",
    marginTop: 24,
    marginBottom: 24,
    maxWidth: "280px",
    height: "auto",
  }}
  alt="Settings sidebar with the Tools section expanded and Scheduled Jobs highlighted"
/>

You'll land on a list of your existing jobs (empty the first time) along with a **New Job** button.

<Image
  src="/images/guides/scheduled-jobs/scheduled-jobs-empty.png"
  height={2074}
  width={2802}
  quality={100}
  style={{
    display: "block",
    borderRadius: "20px",
    marginTop: 24,
    marginBottom: 24,
  }}
  alt="The Scheduled Jobs page with no jobs yet and a New Job button in the middle"
/>

## 2. Click "New Job"

Clicking **New Job** opens a form with four things to fill out:

- **Name** — what you want to call the job
- **Prompt** — the instruction sent to the agent each time it runs
- **Schedule** — when the job should run
- **Tools** — which agent tools the job is allowed to use

<Image
  src="/images/guides/scheduled-jobs/new-scheduled-job.png"
  height={1592}
  width={1344}
  quality={100}
  style={{
    display: "block",
    borderRadius: "20px",
    marginTop: 24,
    marginBottom: 24,
    maxWidth: "420px",
    height: "auto",
  }}
  alt="The New Scheduled Job modal with name, prompt, schedule, and tools fields filled in"
/>

New jobs are **enabled by default** as soon as they're created — there's no toggle in the modal itself. If you want to pause a job after creating it, use the enable/disable toggle on its row in the main jobs list.

## 3. Give the job a name and prompt

### Name

Pick something descriptive — you'll see this in the jobs list and in notifications. Examples: "Morning inbox digest", "Weekly sales report", "Competitor news check".

### Prompt

The prompt is the message the agent receives every time the job runs. Treat it exactly like the first message you would send in an agentic chat. Be specific about:

- **What the agent should do** — the task itself
- **What format you want** — summary, bullet list, table, etc.
- **Any constraints** — date ranges, sources to use, things to ignore

<Callout type="info" emoji="💡">
  A scheduled job starts with a clean slate each run — there is no back-and-forth.
  Write the prompt as a complete, self-contained instruction the agent can act
  on without any follow-up questions.
</Callout>

**Example prompt:**

> Search my inbox for emails received in the last 24 hours that appear to require a response. For each one, list: sender, subject, a one-sentence summary, and a suggested reply. Ignore newsletters and automated notifications.

## 4. Pick a schedule

The schedule is a standard cron expression that tells AnythingLLM when to run the job.

You have two ways to set it:

- **Cron Builder** — a visual editor with dropdowns for frequency, time, and day selection. Recommended for most people.
- **Custom cron** — type a cron expression directly if you know exactly what you want.

Either way, the form shows a live, human-readable description below your schedule (for example, _"At 09:00 AM, only on Monday"_) so you can confirm it matches your intent before saving.

For a deep dive on cron expressions and the builder, see [Scheduling & The Cron Builder](/scheduled-jobs/scheduling).

## 5. Choose tools

The **Tools** picker controls which agent capabilities are available when the job runs. This includes:

- Built-in agent skills (web search, web scraping, document search, chart generation, etc.)
- Imported plugins
- Agent flows you have built
- MCP servers you have connected

Use the search box at the top to filter. Click a category header to toggle every tool inside it at once, or check individual tools.

<Callout type="warning" emoji="⚠️">
  If you leave the tool list **empty**, the job will run without any tools — the
  agent will only be able to produce a response from the LLM alone. Be sure to
  select at least the tools your prompt needs (for example, web search if you're
  asking it to look things up online).
</Callout>

## 6. Create the job

Click **Create**. The job is registered with the scheduler immediately and will fire on its next scheduled time. New jobs are enabled by default; if you'd rather not have it run right away, flip the enable/disable toggle off on its row in the jobs list after creating it.

## Managing existing jobs

From the main Scheduled Jobs page, each job row shows:

- **Name**
- **Schedule** — a human-readable description of the cron (e.g. _"At 10:00 AM"_, _"Every 6 hours"_)
- **Status** — the status of the most recent run, or _"Never run"_ for brand-new jobs
- **Last run** — timestamp of the most recent run (or `—` if it hasn't run yet)
- **Next run** — timestamp of the next scheduled run (or `—` if the job is disabled)

Clicking anywhere on the row opens the job's run history. The icons on the right side of the row are where you act on the job itself:

| Icon | Action | Description |
| :--: | ------ | ----------- |
| <img src="/images/guides/scheduled-jobs/run-history-action-button-x.png" alt="Delete icon" width="24" height="24" /> | **Delete** | Permanently remove the job and all of its run history. |
| <img src="/images/guides/scheduled-jobs/run-history-action-button-pencil.png" alt="Edit icon" width="24" height="24" /> | **Edit** | Open the job in the same form you used to create it, letting you change the name, prompt, schedule, or tools. |
| <img src="/images/guides/scheduled-jobs/run-history-action-button-play.png" alt="Run Now icon" width="24" height="24" /> | **Run Now** | Trigger an immediate run, bypassing the schedule. Greyed out while a run is already queued or running for this job. |
| <img src="/images/guides/scheduled-jobs/run-history-action-button-toggle.png" alt="Enable/disable toggle" width="42" height="24" /> | **Enable/disable** | Flip it off to pause the job without deleting it; flip it back on to resume scheduling. |

<Image
  src="/images/guides/scheduled-jobs/scheduled-jobs-populated.png"
  height={2074}
  width={2802}
  quality={100}
  style={{
    display: "block",
    borderRadius: "20px",
    marginTop: 24,
    marginBottom: 24,
  }}
  alt="The Scheduled Jobs page with one job listed and action icons on the right side of the row"
/>

<Callout type="info" emoji="💡">
  **Run Now** still respects the one-run-at-a-time rule. If a run is already in
  progress for that job, a second one won't start until the first finishes.
</Callout>

## What happens next

Once the job is enabled, AnythingLLM runs it on schedule in the background. Every run is saved — see [Viewing Runs & Results](/scheduled-jobs/viewing-runs) to learn how to review them, download generated files, and continue a run as a workspace thread.
