> ## Documentation Index
> Fetch the complete documentation index at: https://docs.profy.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# End-to-end: Daily briefing

> Build a briefing pipeline that runs itself, with the real limits of recurrence and a cost brake

This builds a daily briefing that actually runs on its own: at a fixed time each morning, an agent gathers information in a domain you care about, writes it up, and delivers it somewhere you'll see it.

Scheduled tasks are the only feature on Profy that **spends your money while you're not there**, so this guide is less about how to create one and more about **making it run on the schedule you think it does** and **noticing when it goes wrong**. The recurrence options are far narrower than natural language suggests; knowing that up front avoids most of the rework.

## What you'll get

A new message in your conversation with that expert at 08:30 every day (time configurable), containing that day's briefing. If you create it from an IM channel like Feishu, the briefing is pushed back into that conversation too.

## The key constraint: there are only four recurrence types

This is the most important section in this guide. A scheduled task's repeat type has exactly **four possible values**:

| Repeat type | Meaning     | Trigger rule                                             |
| ----------- | ----------- | -------------------------------------------------------- |
| `no-repeat` | One-off     | Runs once at the given date and time, then it's done     |
| `daily`     | Every day   | Runs at the given time every day                         |
| `weekly`    | Every week  | Runs on **the weekday of the first execution date**      |
| `monthly`   | Every month | Runs on **the day-of-month of the first execution date** |

Several consequences follow that you need to know:

<Warning>
  * **"Mondays and Fridays" is not supported.** One task maps to one weekday. Two days means two tasks.
  * **"Weekdays" is not supported.** There is no weekday concept. Either create five tasks, or use `daily` and have the prompt make the agent say "it's the weekend, skipping" — but that still executes and bills every single day.
  * **Hourly or minute-level recurrence is not supported.** The tightest legal cadence is once a day. "Every 30 minutes" cannot be done.
  * **Be careful with the 31st.** If the first execution is on the 31st, months without a 31st simply won't fire. For "last day of the month," the 28th is the safer choice.
</Warning>

Times are interpreted in `Asia/Shanghai` by default; another timezone can be specified at creation.

## Prerequisites

<Steps>
  <Step title="Pick the host expert">
    A scheduled task belongs to an expert. Choose one you'll actually open regularly, because results land in your conversation with it.
  </Step>

  <Step title="Run it manually once first">
    **Do not create the scheduled task first.** Run the briefing manually in conversation, confirm the output quality and the cost of one run, and only then freeze it into a schedule. Skip this and you get a task that burns credits on time every day producing output you don't want.
  </Step>

  <Step title="Price a single run">
    After that manual run, check what the conversation consumed. Monthly cost ≈ per-run cost × runs per day × 30. Make sure you're comfortable with that number before continuing.
  </Step>
</Steps>

## Steps

### Step 1: Run it manually and finalize the prompt

```text theme={null}
Give me today's AI product briefing:

Scope: product and pricing changes at OpenAI / Anthropic / Google DeepMind,
       plus equivalent moves from major Chinese vendors
Window: last 24 hours
Structure:
  1) The three that matter most (one-line conclusion + link each)
  2) Also worth knowing (list, max two lines each)
  3) If nothing notable happened today, just say "nothing notable today" —
     do not pad with older news
Length: under 500 words
```

Iterate until you're happy, then **save that exact prompt verbatim** — it becomes the scheduled task's prompt.

<Tip>
  The "say nothing when there's nothing" constraint is essential. Without it, the briefing degrades on quiet days into a repackaging of three-day-old news, and it can take weeks before you notice.
</Tip>

### Step 2: Create the task

Just say so in conversation:

```text theme={null}
Turn that briefing into a scheduled task:
- Title: AI product daily
- Every day at 08:30 (Asia/Shanghai)
- Use exactly the prompt I confirmed above, unchanged
```

The agent calls the `schedule` tool and returns a card with the task ID, execution time, and repeat type. **Check the repeat type and time on that card** — it's your only chance to confirm it was created the way you meant.

### Step 3: Confirm in the management UI

The agent's `schedule` tool can do exactly two things: **create** and **list**. Editing and deleting must happen in the UI:

| Action                                                    | Where                                            |
| --------------------------------------------------------- | ------------------------------------------------ |
| See all tasks, next run time, execution history           | The expert's scheduled tasks page                |
| Change time / recurrence / prompt / notification channels | Task detail, edit                                |
| Pause                                                     | Task detail, cancel (status becomes `cancelled`) |
| Delete                                                    | Task detail, delete                              |

<Warning>
  Don't tell the agent "move the daily to 9am" or "cancel that briefing" — it has no tool that performs those actions. It may politely reply "done," but nothing happened and the task still fires at 08:30. Changes must be made in the UI.
</Warning>

### Step 4: Choose the execution type

There are two task types at creation, and the cost difference is an order of magnitude:

| Type       | Behavior                                                       | Consumes credits             |
| ---------- | -------------------------------------------------------------- | ---------------------------- |
| `execute`  | Actually runs a full conversation and produces content         | Yes, billed as `token_split` |
| `reminder` | Pushes the text you wrote at the scheduled time, no model call | No conversation credits      |

A briefing needs `execute`. If what you actually want is "remind me to go look at it myself," `reminder` costs nothing.

### Step 5: Configure delivery

Results land in your conversation with the expert by default. If you created the task from Feishu / DingTalk / WeCom, the source channel is recorded automatically and the briefing is pushed back to that IM conversation as well.

Tasks created on the web default to in-app only. To push to IM, enable the channel in the task detail.

### Step 6: Check it every day for the first week

For the first seven days, check three things — none of which is content quality:

1. **Did it run at all** — there's a record for that day and its status is `completed`
2. **Did it run at the right time** — actual execution time matches what you set
3. **Is the content new** — compare with yesterday; it should not be the same links reworded

Item 3 is the one people skip and the one that most often goes wrong.

## How execution actually behaves

Things you'll eventually run into, better known in advance:

<AccordionGroup>
  <Accordion title="Failures are not retried">
    If a run fails (network issue, insufficient balance, model error), the task is marked failed with a reason and **is not retried**. For recurring tasks the next cycle fires as normal, but that day's briefing simply doesn't exist. So "I subscribed to a daily so I won't miss anything" is not a safe assumption — check the execution history periodically.
  </Accordion>

  <Accordion title="Up to an hour late still runs">
    If the system is busy at the scheduled moment, the run still happens within the next hour. Misses beyond an hour are skipped entirely.
  </Accordion>

  <Accordion title="It uses your model preference">
    Scheduled tasks use the model preference saved on your account, falling back to the platform default. Temporarily switching models in some other conversation doesn't affect it.
  </Accordion>

  <Accordion title="Insufficient balance fails silently">
    A run with insufficient balance fails and records the reason, but nothing separately alerts you. Keep a buffer for long-running schedules.
  </Accordion>

  <Accordion title="Tasks can be chained">
    A task can declare a predecessor: it runs only after the predecessor completes. If the predecessor fails you can choose to skip or continue anyway. Waiting for a predecessor is bounded (about an hour), after which it's treated as failed. Useful for "fetch data first, then write the report."
  </Accordion>
</AccordionGroup>

## Boundaries and failure modes

| Symptom                                             | Cause                                                    | Fix                                                                        |
| --------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
| Didn't run at the scheduled time                    | Status isn't `pending`, or the task was cancelled        | Check status in the UI; `cancelled` tasks never fire again                 |
| Weekly task fires on the wrong weekday              | The weekday is derived from the first execution date     | Change the first execution date to the weekday you want                    |
| A month was skipped (monthly)                       | That month has no such day-of-month (e.g. the 31st)      | Move the day-of-month to 28 or lower                                       |
| Briefing nearly identical to yesterday              | Prompt lacks the "say nothing when there's nothing" rule | Add it and update the prompt in the UI                                     |
| Told the agent to change the time, nothing happened | The agent has no tool to modify tasks                    | Change it in the UI                                                        |
| Several days of failures in a row                   | Insufficient balance or model unavailable                | Read the error in the execution history; top up or change model preference |
| Monthly cost far above expectations                 | Frequency or per-run cost underestimated                 | Lower the cadence, narrow the window, cap output length                    |

## Related pages

<CardGroup cols={2}>
  <Card title="Scheduled tasks" icon="clock" href="/en/documentation/chat/scheduling">
    Full reference for scheduled tasks
  </Card>

  <Card title="Feishu channel" icon="comment" href="/en/documentation/channels/feishu">
    Deliver briefings into Feishu
  </Card>

  <Card title="Competitive research" icon="chart-line" href="/en/documentation/guides/competitive-research">
    Get the one-off flow working first
  </Card>

  <Card title="Limits and quotas" icon="gauge" href="/en/documentation/reference/limits">
    Every hard limit on the platform
  </Card>
</CardGroup>
