Guide 04 rebuilt in English: Test week planner, English screenshots, DSL export

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido van Dijk
2026-09-21 11:01:09 +02:00
parent 34837152c2
commit 9479eebd4f
68 changed files with 311 additions and 49 deletions
+49 -45
View File
@@ -2,7 +2,7 @@
FOR THE EDITOR
Guide 4: Agent Console (beta), the Test week planner. Screenshots in screenshots/, captured on
20 September 2026 (Dify cloud, Dutch build of the same agent).
20 and 21 September 2026 (Dify cloud, English interface).
Convert to HTML, PDF and Word: python3 build.py
(python-markdown, google-chrome and libreoffice; layout and logo in _tools/build_guide.py)
@@ -15,19 +15,20 @@ Formatting conventions (see also README.md):
- Blockquote starting with **Your choice** = a choice for the participant (green box)
Sample file: exam-timetable-example.csv (fictional timetable, 12 to 16 October 2026, in this folder).
Published example app (Dutch): https://udify.app/agent/rKoqw8rbmp0IF86Q
Published example app: https://udify.app/agent/x0yjuGoRIVdZaVZe
DSL export: test-week-planner.dify.yml (the CSV is not included in an agent export; upload it again after importing).
-->
# Building in the Agent Console: the Test week planner
**Guide 4 for the AI Agents workshop**
LeX Consultancy B.V. · 20 September 2026
LeX Consultancy B.V. · 21 September 2026
You build an agent that makes a personal study plan for the test week together with a student. The agent reads the exam timetable, asks when the student can study and how hard the subjects are, and then delivers a plan in the chat plus two files: an Excel overview and a calendar file for the phone.
This is a different kind of building from guides 1, 3 and 5. There you put the steps in a workflow yourself, one after another. In the **Agent Console** you only give an instruction, files and tools; the agent decides for itself how to tackle the question, writes a small program if needed and creates files in its own Linux sandbox. That is the "ReAct" pattern from the Design patterns appendix: look, choose, act, look again.
This guide follows the cloud version of Dify as it looked on 20 September 2026. The Agent Console is **beta**: screens, buttons and behaviour change faster than in the rest of Dify. If your screen differs, follow what you see, not what is written here. The screenshots show the Dutch build of this agent (Dutch prompt, Dutch conversation); the screens and clicks are the same.
This guide follows the cloud version of Dify as it looked on 21 September 2026. The Agent Console is **beta**: screens, buttons and behaviour change faster than in the rest of Dify. If your screen differs, follow what you see, not what is written here.
**How to read this guide**
@@ -93,7 +94,7 @@ In short: what you build here is a working prototype to learn how an agent works
1. Click **Agents** in the left-hand menu.
![The Agents overview, still empty](screenshots/01-agents-overzicht.jpg)
![The Agents overview](screenshots/01-agents-overview.jpg)
2. Click **Create** at the top right and choose **Create from Blank**.
@@ -101,7 +102,7 @@ In short: what you build here is a working prototype to learn how an agent works
3. The **Create agent** window appears.
![The Create agent window](screenshots/03-agent-aanmaken-leeg.jpg)
![The Create agent window](screenshots/03-create-agent-empty.jpg)
4. Fill in the fields.
@@ -111,13 +112,13 @@ In short: what you build here is a working prototype to learn how an agent works
| Role | `Study planner for lower secondary students` |
| Description | `Makes a personal study plan for the test week together with the student: spreads the material over the available moments and delivers the plan as Excel and as a calendar file.` |
![The fields filled in](screenshots/04-agent-aanmaken-ingevuld.jpg)
![The fields filled in](screenshots/04-create-agent-filled.jpg)
5. Click **Create**.
You arrive on the **Configure** screen. On the left is the agent's form (model, prompt, skills, files, tools), on the right a chat window with two tabs: **BUILD** and **PREVIEW**.
![The Configure screen of a new agent](screenshots/05-configureren-nieuw.jpg)
![The Configure screen of a new agent](screenshots/05-configure-new.jpg)
> On the right it says "Build your agent via chat": you can tell the agent in plain language what it should do and Dify fills in the form on the left. That works, but it costs credits for every message and you know less well what is in your instruction. In this guide you fill in the form yourself; that is more precise and free. The build chat is handy later when you want something adjusted ("make the tone friendlier").
@@ -129,15 +130,15 @@ At the top it says **gpt-5** with an orange label **Incompatible**: that model c
1. Click the model field. A list of models opens.
![The model menu with the OpenAI models](screenshots/06-modelmenu.jpg)
![The model menu with the OpenAI models](screenshots/06-model-menu.jpg)
2. Type `gpt-5.4` in the search field.
![Searching for gpt-5.4](screenshots/07-model-zoeken.jpg)
![Searching for gpt-5.4](screenshots/07-model-search.jpg)
3. Click **gpt-5.4** (without suffix). The Incompatible label disappears.
![The model is set to gpt-5.4](screenshots/08-model-gekozen.jpg)
![The model is set to gpt-5.4](screenshots/08-model-chosen.jpg)
> Via **Show incompatible models** at the bottom of the list you see which models do not work. You can choose such a model, but the agent will not run. If you type `mini` in the search field, you only get Gemini models: the gpt-5-mini from the other guides is not available here.
@@ -176,7 +177,7 @@ What you deliver:
You give no grades, judgements or predictions about how the tests will go. You keep nothing about the student after the conversation.
```
![The instruction is in the PROMPT field](screenshots/09-prompt-ingevuld.jpg)
![The instruction is in the PROMPT field](screenshots/09-prompt-filled.jpg)
The instruction has four parts, and that order is no accident: **who you are**, **what you need** (and in which order you ask for it), **the rules** the plan must meet, and **what you deliver**. The last paragraph is the boundaries. An agent without rules also makes a plan, but a random one.
@@ -192,19 +193,19 @@ The form saves itself; at the bottom you see "Saved ... ago".
1. Scroll down in the left-hand panel. You see three sections: **SKILLS**, **FILES** and **TOOLS**, each with an **Add** button.
![Skills, files and tools, still empty](screenshots/10-skills-bestanden-tools.jpg)
![Skills, files and tools, still empty](screenshots/10-skills-files-tools.jpg)
2. Under **FILES** click **Add**. The **Upload file** window appears.
![The Upload file window](screenshots/11-bestand-uploaden.jpg)
![The Upload file window](screenshots/11-upload-file.jpg)
3. Click **browse** and choose `exam-timetable-example.csv`, or drag the file into the box.
![The file is ready](screenshots/12-bestand-gekozen.jpg)
![The file is ready](screenshots/12-file-chosen.jpg)
4. Click **Upload**. The file is now under FILES and "File uploaded" appears at the top right.
![The timetable is among the files](screenshots/13-bestand-geupload.jpg)
![The timetable is among the files](screenshots/13-file-uploaded.jpg)
Files in this section are ready for the agent in its sandbox. It reads them itself when it needs them; in the instruction you only need to refer to them, as in point 1 of "What you need".
@@ -226,13 +227,11 @@ The agent needs to know what day it is today to plan "from today until the last
3. Click **Add all** and close the list with Escape. CurrentTime is now under TOOLS.
![CurrentTime has been added](screenshots/16-tool-toegevoegd.jpg)
![CurrentTime has been added](screenshots/16-tool-added.jpg)
> More tools is not better. Every tool you add is one the agent can also use, and every tool costs a bit of the model's attention. Add only what the task needs. For the planner that is one tool.
Also have a look at **SKILLS**: click **Add** there and you see one option, **Upload package**, a zip file with a SKILL.md inside. Skills are reusable work instructions you can put into several agents. This planner does not need them; close the menu with Escape.
![Skills: only Upload package](screenshots/17-skills-upload-package.jpg)
Also have a look at **SKILLS**: click **Add** there and a small popover appears with one option, **Upload skill.zip**, a zip file with a SKILL.md inside. Skills are reusable work instructions you can put into several agents. This planner does not need them; close the popover by clicking next to it.
---
@@ -240,7 +239,7 @@ Also have a look at **SKILLS**: click **Add** there and you see one option, **Up
1. Click **PREVIEW** at the top right of the chat window. The window empties and shows "Run the agent as a finished chat, exactly as people will experience it after publishing".
![The PREVIEW tab](screenshots/18-voorbeeld-leeg.jpg)
![The PREVIEW tab](screenshots/18-preview-empty.jpg)
2. Type the first message and press Enter.
@@ -248,9 +247,9 @@ Also have a look at **SKILLS**: click **Add** there and you see one option, **Up
| --- | --- |
| 1 | `Hi, I want a study plan for the test week.` |
The agent reads the timetable from the file, summarises it and asks its first question. Above the answer it says "Thinking · 8 s": that is how long the agent worked before answering.
The agent reads the timetable from the file, summarises it and asks its first question. Above the answer it says "Thinking · 9.06s": that is how long the agent worked before answering.
![The first answer: timetable summarised, first question](screenshots/19-test-eerste-antwoord.jpg)
![The first answer: timetable summarised, first question](screenshots/19-test-first-answer.jpg)
3. Answer the question about study moments.
@@ -260,7 +259,7 @@ The agent reads the timetable from the file, summarises it and asks its first qu
The agent repeats the moments per day and asks the third question: how hard each subject is.
![The second answer: study moments repeated, question about the subjects](screenshots/20-test-vakken-vraag.jpg)
![The second answer: study moments repeated, question about the subjects](screenshots/20-test-subjects-question.jpg)
4. Answer the question about the subjects.
@@ -268,21 +267,21 @@ The agent repeats the moments per day and asks the third question: how hard each
| --- | --- |
| 3 | `English easy, maths hard, French easy, history average, biology average, German hard.` |
Now the agent gets to work, and that takes half a minute. You see the plan per day appear, then "Files:" with only study-plan.xlsx at first, and at the bottom the **Stop responding** button while it is busy.
Now the agent gets to work, and that takes about a minute. Under "Thinking" lines such as **Ran commands** and **shell_wait** appear one by one: the agent is working in its sandbox. At the bottom is the **Stop responding** button while it is busy.
![The plan appears, the agent is still busy](screenshots/21-test-plan-bezig.jpg)
![The agent is busy in its sandbox](screenshots/21-test-plan-busy.jpg)
5. Wait until the Stop responding button is gone. Below the plan there are now two blue links, **study-plan.xlsx** and **study-plan.ics**, and the closing question "Do you want to move anything?".
5. Wait until the Stop responding button is gone. The answer starts with two blue links, **study-plan.xlsx** and **study-plan.ics**, then the plan per day, and it ends with the closing question "Would you like to move anything?".
![The plan is done, with two files](screenshots/22-test-plan-klaar.jpg)
![The plan is done, with two files](screenshots/22-test-plan-done.jpg)
6. Click **Thinking · 31 s** above the answer. Two lines **Commands executed** unfold: those are the moments the agent did something in its sandbox.
6. Click **Thinking · 55.45s** above the answer. Lines **Ran commands** and **shell_wait** unfold: those are the moments the agent did something in its sandbox.
![Thinking expanded](screenshots/23-nadenken-uitgeklapt.jpg)
![Thinking expanded](screenshots/23-thinking-expanded.jpg)
7. Click the first **Commands executed**. You see the command the agent wrote itself: a Python program (`make_plan.py`) containing the timetable, the study moments and the rules, which produces the Excel file and the calendar file.
7. Click the first **Ran commands**. Under REQUEST you see the command the agent wrote itself: a Python program (`make_plan.py`) containing the timetable, the study moments and the rules, which produces the Excel file and the calendar file.
![The command the agent executed: a Python script](screenshots/24-opdracht-script.jpg)
![The command the agent executed: a Python script](screenshots/24-command-script.jpg)
This is the difference from a workflow. You never said "write a program". The agent worked out for itself that making an Excel file is easiest with a small program, wrote it, ran it, and gave you the files back. If it goes wrong, it tries again. That is also why it costs more and takes longer.
@@ -292,27 +291,31 @@ This is the difference from a workflow. You never said "write a program". The ag
| --- | --- |
| 4 | `On Tuesday, Wednesday and Thursday I have nothing from 16:00 to 16:40. Can you put maths and German there once more?` |
The agent does not just do it: it points out that Tuesday is the evening before history, Wednesday the evening before biology, and that according to the rules only revision of that subject belongs there. It proposes an alternative and asks what you want.
What happens next differs from run to run, and that is the lesson. In an earlier run the agent talked back: Tuesday is the evening before history, Wednesday the evening before biology, and according to the rules only revision belongs there. In the run shown here it first checked what you meant (which dates, one extra block each) and, after "Yes, exactly", simply did it: it replaced the revision blocks on Tuesday and Wednesday with maths and German and regenerated both files.
![The agent sticks to the planning rule](screenshots/25-test-verschuiven.jpg)
![The agent checks what you mean](screenshots/25-test-move-question.jpg)
> **Your choice: how strict.** The agent talks back here because of the rule "The evening before a test: revision only". If you want the student to always have the last word, add: "If the student wants something other than the rules, explain once why the rule exists and then do what the student asks."
![The plan is adjusted and the files are regenerated](screenshots/26-test-move-done.jpg)
Both are defensible, and the same prompt gave both. An agent interprets its rules; it does not execute them like a program. If a rule must always hold, say so in so many words.
> **Your choice: how strict.** The rule "The evening before a test: revision only" is in the prompt, but the student's request won here. If the rule must hold, add: "These rules are not negotiable. If the student asks for something else, explain why the rule exists and offer an alternative within the rules." If you want the student to always have the last word, add the opposite: "If the student wants something other than the rules, explain once why the rule exists and then do what the student asks."
---
## Step 7. Publish
1. Click **Publish update** at the bottom of the left-hand panel. The button turns grey with a tick **Published**, and "Action succeeded" appears at the top right.
1. Click **Publish update** at the bottom of the left-hand panel. The button turns grey with a tick **Published**, and the status line says "Up to date · Published a few seconds ago".
![The agent is published](screenshots/26-gepubliceerd.jpg)
![The agent is published](screenshots/27-published.jpg)
2. Click **Access point** in the left-hand menu. You see the **Webapp** with the **Access URL** and the **Backend service API**.
2. Click **Access Point** in the left-hand menu. You see the **Web App** with the **Access URL** and the **Backend Service API**.
![The Access point screen](screenshots/27-toegangspunt.jpg)
![The Access Point screen](screenshots/28-access-point.jpg)
3. Click **Open** behind the URL. The webapp opens in a new tab: an empty chat window with the agent's name.
![The webapp, as a student sees it](screenshots/28-webapp-leeg.jpg)
![The webapp, as a student sees it](screenshots/29-webapp-empty.jpg)
4. Type a message to check that the published version works.
@@ -320,7 +323,7 @@ The agent does not just do it: it points out that Tuesday is the evening before
| --- | --- |
| 1 | `Hi, can you help me plan?` |
![The conversation in the webapp](screenshots/29-webapp-gesprek.jpg)
![The conversation in the webapp](screenshots/30-webapp-conversation.jpg)
> If you change the instruction later, the webapp only changes after you click **Publish update** again. Until then it says "Unpublished changes" at the bottom.
@@ -330,11 +333,11 @@ The agent does not just do it: it points out that Tuesday is the evening before
1. Click **Logs** in the left-hand menu. Every conversation through the webapp is listed here, with the first sentence as title, the number of messages and the time.
![Logs with the conversation from the webapp](screenshots/30-logs.jpg)
![Logs with the conversation from the webapp](screenshots/31-logs.jpg)
2. Click **Monitoring** for the counters: number of messages, active users, average length of a conversation and the speed of the model.
![Monitoring of the agent](screenshots/31-monitoring.jpg)
![Monitoring of the agent](screenshots/32-monitoring.jpg)
> Conversations from the PREVIEW tab are not in Logs; only conversations through the webapp or the API. If you want to see a test conversation again, do the test in the webapp.
@@ -358,8 +361,9 @@ The agent does not just do it: it points out that Tuesday is the evening before
| Label **Incompatible** next to the model | This model cannot drive the Agent Console. Choose gpt-5.4 or higher, or a Gemini model (step 2) |
| The agent asks all questions at once | The sentence "Ask these questions one at a time" is missing from the instruction |
| The agent asks for the timetable while the file is there | The file name in the instruction does not match the uploaded file, or the file is not there yet (step 4) |
| The plan puts blocks at moments you did not give, or leaves study moments unused | The model interprets the rules; always check the plan against the rules (see also Make it yours). In our test 40 minutes stayed unused on Tuesday, Wednesday and Thursday because the rule "evening before the test: revision only" clashes with "hard subjects get twice as much time" |
| The plan puts blocks at moments you did not give, or leaves study moments unused | The model interprets the rules; always check the plan against the rules (see also Make it yours). In our test the agent used 16:00 to 17:30 of the 16:00 to 18:00 you gave, so 30 minutes stayed unused each day |
| Only study-plan.xlsx appears, no .ics | The agent is still busy; wait until Stop responding is gone. If the file does not come, ask "Also make the ics file" |
| The agent does what the student asks against a rule | Normal: the rules are text the model interprets, not code. Make the rule explicit ("not negotiable") or accept it, see the green box at step 6 |
| An empty answer bubble that stays | Beta behaviour: the agent stopped without text. Click the "retry" arrow under the message, or start a new conversation |
| The conversation in PREVIEW is not in Logs | Normal; only webapp and API conversations are logged (step 8) |
| The credits drop fast | Every conversation costs tens of thousands of tokens. Set OpenAI to Usage priority: API key, or test less often |
@@ -408,4 +412,4 @@ The timetable is invented and the planning rules are an example. This chapter he
**Beta.** The Agent Console can change from one week to the next: other buttons, other models that are or are not compatible, other behaviour with files. Keep the prompt outside Dify as well (it is in this guide), so you can recreate the agent in five minutes.
**From prototype to your school environment.** Via the three dots on the agent's card (**Export DSL**) you save the agent as a file and import it into another Dify account via **Create** → **Import DSL file**. The model has to be reconnected there; files and tools come along.
**From prototype to your school environment.** Via the three dots next to the agent's name (**Export DSL**) you save the agent as a file and import it into another Dify account via **Create** → **Import DSL file**. The model has to be reconnected there and the file under FILES has to be uploaded again (an agent export lists it but does not contain it); the prompt and the tools come along. The export of this agent is in the folder of this guide as `test-week-planner.dify.yml`.