Guide 06 rebuilt in English: Materials check with OERSI tool, 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:17:43 +02:00
parent 9479eebd4f
commit 0f03038345
71 changed files with 302 additions and 53 deletions
@@ -3,8 +3,8 @@ FOR THE EDITOR
Guide 6: Agent Console (beta), the Materials check: assessing and adapting learning material for
students who need support, with a custom search tool for open educational resources.
Screenshots in screenshots/, captured on 20 September 2026 (Dify cloud, Dutch build of the same
agent, which used the Dutch OER index Edurep; two window sizes, the build script scales by width).
Screenshots in screenshots/, captured on 21 September 2026 (Dify cloud, English interface, OERSI
as the search index).
Convert to HTML, PDF and Word: python3 build.py
(python-markdown, google-chrome and libreoffice; layout and logo in _tools/build_guide.py)
@@ -19,19 +19,21 @@ Formatting conventions (see also README.md):
Files in this folder:
lesson-booklet-ecology.pdf fictional lesson booklet, Biology Year 9 (same as in guide 8)
oer-search.openapi.json the schema of the search tool (OERSI), to paste in step 3
Published example app (Dutch, with the Dutch search tool): https://udify.app/agent/lkWKedkSW2d3nqBV
Published example app: https://udify.app/agent/BIKJSPHj1JnCRzAp
DSL export: materials-check.dify.yml (the custom tool and the PDF are not in the file; recreate the
tool from oer-search.openapi.json and upload the PDF again after importing).
-->
# Building in the Agent Console: the Materials check
**Guide 6: making learning material accessible for all students**
LeX Consultancy B.V. · 20 September 2026
LeX Consultancy B.V. · 21 September 2026
You build an agent that helps a teacher make their learning material accessible for students who need support. The agent reads the lesson booklet, asks which needs occur in the class, assesses the material on seven points, produces adapted versions for the teacher and for students, and searches an open index for open educational resources that fit, with licence.
Two things are new compared with guide 4. First the pedagogy: the agent works according to **Universal Design for Learning** (UDL), the framework that says you do not make an exception per student, but design the material so that it works for everyone. Second the technique: you make your **own tool**. Dify has no tool that searches an OER index, so you describe the search engine in a small schema, and with that the agent can call it. That is the step from "choosing tools from a list" to "any website with an API as a tool".
This guide follows the cloud version of Dify as it looked on 20 September 2026. The Agent Console is **beta**; if your screen differs, follow what you see, not what is written here. Guide 4 explains the Agent Console itself (model, prompt, files, tools, publishing); here those steps are shorter. The screenshots show the Dutch build of this agent, which searched the Dutch national OER index (Edurep); in this guide you build the same tool for OERSI, an international index. The screens are the same, the schema differs.
This guide follows the cloud version of Dify as it looked on 21 September 2026. The Agent Console is **beta**; if your screen differs, follow what you see, not what is written here. Guide 4 explains the Agent Console itself (model, prompt, files, tools, publishing); here those steps are shorter.
**How to read this guide**
@@ -102,26 +104,26 @@ This agent works with learning material, not with students. That makes it a lot
| Role | `Accessibility coach for learning material` |
| Description | `Assesses learning material for accessibility for students with support needs (UDL), produces adapted versions for teacher and student and searches for open educational resources.` |
![The Create agent window, filled in](screenshots/01-agent-aanmaken.jpg)
![The Create agent window, filled in](screenshots/01-create-agent.jpg)
3. Click **Create**.
4. Click the model field, search for `gpt-5.4` and choose **gpt-5.4**.
![The Configure screen with gpt-5.4 as model](screenshots/02-configureren-model.jpg)
![The Configure screen with gpt-5.4 as model](screenshots/02-configure-model.jpg)
---
## Step 2. See which tools there are
1. Scroll to **TOOLS** and click **Add**. At the top are tabs: **All**, **Toolplugin**, **Swagger API**, **Workflow**, **MCP**.
1. Scroll to **TOOLS** and click **Add**. At the top are tabs: **All**, **Tool Plugin**, **Swagger API**, **Workflow**, **MCP**.
![The tool picker with the five tabs](screenshots/03-tools-kiezer.jpg)
![The tool picker with the five tabs](screenshots/03-tool-picker.jpg)
Each tab is a way to let an agent do something outside its own sandbox:
| Tab | What it is | Example |
| --- | --- | --- |
| Toolplugin | Ready-made tools from the Marketplace | CurrentTime (guide 4), Tavily (web search), Audio |
| Tool Plugin | Ready-made tools from the Marketplace | CurrentTime (guide 4), Tavily (web search), Audio |
| Swagger API | A website or service with an API that you describe in a schema | The OER index you build in step 3 |
| Workflow | One of your own Dify workflows as a tool | Calling the School news workflow from guide 3 from an agent |
| MCP | An MCP server (Model Context Protocol), the standard by which AI assistants talk to systems | A connection to a student information system, on a school platform |
@@ -134,11 +136,11 @@ For an OER index there is no ready-made tool. So you make one yourself via **Swa
**OERSI** is an open index of open educational resources from dozens of repositories (university OER portals, Zenodo, national indexes), with a public search interface and no key. You describe that interface in a schema (OpenAPI, also called Swagger): which address, which parameters, what comes back. Dify turns that into a tool.
1. Click **Integrations** in the left-hand menu, then **Swagger API as Tool**.
1. Click **Integrations** in the left-hand menu, then **Tools** → **Swagger API as Tool**. In a new workspace this page is empty; in ours two earlier tools are already there.
![Swagger API as Tool, still empty](screenshots/04-swagger-api-leeg.jpg)
![Swagger API as Tool](screenshots/04-swagger-api-list.jpg)
2. Click **Create a Swagger API as Tool**.
2. Click **Add Swagger API as Tool** at the top right. The **Create Custom Tool** window opens.
3. Under **Name** type `OER search` and under **Schema** paste the text below (or the contents of `oer-search.openapi.json`).
```
@@ -171,23 +173,25 @@ For an OER index there is no ready-made tool. So you make one yourself via **Swa
}
```
As soon as the schema is valid, one line appears under **Available Tools**: **searchOpenResources**, method get. (The screenshot shows the Dutch tool for Edurep, with its own path; yours shows the OERSI path.)
As soon as the schema is valid, one line appears under **Available Tools**: **searchOpenResources**, method get, with the OERSI path.
![The schema pasted, the tool recognised](screenshots/05-custom-tool-schema.jpg)
![The schema pasted](screenshots/05-custom-tool-schema.jpg)
![The tool recognised: searchOpenResources, get](screenshots/06-custom-tool-recognised.jpg)
What the schema says, in plain words: the **servers** line is the address of the search engine. The **path** is the search entrance. The **parameters** are the fields you pass along: `q` is the query, `size` the number of results. The **description** texts are not for you but for the agent: from them it learns when and how to use the tool. So write them in plain sentences, with an example.
4. Leave **Authorization method** on None (OERSI asks for no key) and click **Save**. The tool is now in the list.
4. Leave **Authorization method** on None (OERSI asks for no key) and click **Save**. "Action succeeded" appears and the tool is now in the list.
![The custom tool is in the Swagger API list](screenshots/06-tool-aangemaakt.jpg)
![The custom tool is in the Swagger API list](screenshots/07-tool-created.jpg)
5. Click the card. On the right you see the tool with **1 ACTION INCLUDED**.
![The tool with its one action](screenshots/07-tool-detail.jpg)
![The tool with its one action](screenshots/08-tool-detail.jpg)
6. Click **Configure** to test. The schema opens again.
![Edit Custom Tool](screenshots/08-tool-bewerken.jpg)
![Edit Custom Tool](screenshots/09-edit-custom-tool.jpg)
7. In the Available Tools table click **Test** and fill in the parameters.
@@ -196,11 +200,11 @@ What the schema says, in plain words: the **servers** line is the address of the
| q | `inLanguage:en AND (food web OR ecosystem)` |
| size | `5` |
![The test parameters filled in](screenshots/09-tool-test-invullen.jpg)
![The test parameters filled in](screenshots/10-tool-test-parameters.jpg)
8. Click **Test**. Under Test Results JSON appears with `hits.total.value` (several thousand for this query) and below it the records.
8. Click **Test**. Under Test Results JSON appears with `hits.total.value` (5,013 for this query on 21 September 2026) and below it the records.
![The test result](screenshots/10-tool-test-resultaat.jpg)
![The test result](screenshots/11-tool-test-result.jpg)
> The query syntax is that of a search engine: words joined with AND or OR, brackets for groups, `inLanguage:en` to limit the language. Without the language filter you get many German and Dutch resources; OERSI is strong in higher education and weaker in secondary school material. For school-level English material, OER Commons, CK-12 and OpenStax are worth a manual search as well; they have no open search API, which is exactly why the tool uses OERSI.
@@ -237,7 +241,7 @@ Rules:
- You write all files in English, in markdown.
```
![The instruction in the PROMPT field](screenshots/11-prompt-ingevuld.jpg)
![The instruction in the PROMPT field](screenshots/12-prompt-filled.jpg)
The instruction follows the structure of guide 4 (who, method, what you deliver, rules), with two additions. The seven assessment points in step 3 are the translation of the three UDL principles into things you can read off a text. And step 5 tells the agent exactly how to call the custom tool, including the query syntax; without that sentence it first tries wrong and only then right (see step 6).
@@ -251,12 +255,14 @@ The instruction follows the structure of guide 4 (who, method, what you deliver,
1. Under **FILES** click **Add**, choose `lesson-booklet-ecology.pdf` and click **Upload**.
![The booklet is ready to upload](screenshots/12-lesbrief-uploaden.jpg)
![The booklet is ready to upload](screenshots/13-booklet-upload.jpg)
![The booklet is among the files](screenshots/13-lesbrief-geupload.jpg)
![The booklet is among the files](screenshots/14-booklet-uploaded.jpg)
2. Under **TOOLS** click **Add**, click the **Swagger API** tab, click **OER search** and then **Add all**. Close the picker with Escape. OER search is now under TOOLS.
![OER search under TOOLS](screenshots/15-tool-added.jpg)
> The booklet in FILES is the example for the test. In the webapp a teacher can later send their own booklet via the paperclip in the chat; the agent then uses that file and not the example (that is what point 1 of the instruction says).
---
@@ -265,7 +271,7 @@ The instruction follows the structure of guide 4 (who, method, what you deliver,
1. Click **PREVIEW** at the top right.
![The PREVIEW tab](screenshots/14-voorbeeld-leeg.jpg)
![The PREVIEW tab](screenshots/16-preview-empty.jpg)
2. Type the first message.
@@ -275,7 +281,7 @@ The instruction follows the structure of guide 4 (who, method, what you deliver,
The agent sees the booklet among its files and asks the question about support needs, with the six choices and "I do not know".
![The first answer: the question about support needs](screenshots/15-test-eerste-antwoord.jpg)
![The first answer: the question about support needs](screenshots/17-test-first-answer.jpg)
3. Choose three needs.
@@ -283,29 +289,39 @@ The agent sees the booklet among its files and asks the question about support n
| --- | --- |
| 2 | `Dyslexia, English as an additional language, and gifted.` |
Now the agent gets to work, and that takes well over a minute. Above the answer you see what it is doing: several times **Commands executed** (reading the booklet, writing the three files) and several times **searchOpenResources** (the custom tool). At the bottom it says **Stop responding** while it is busy.
Now the agent gets to work, and that takes well over a minute. Under **Thinking** you see what it is doing: **Ran commands** (reading the booklet, writing the three files) and three times **searchOpenResources** (the custom tool). At the bottom it says **Stop responding** while it is busy.
![The agent is busy: commands and searches](screenshots/16-test-bezig.jpg)
![The agent is busy: commands and searches](screenshots/18-test-busy.jpg)
4. Wait until the answer is complete. It starts with the **Short report**: seven points with a score and one sentence of explanation. For our booklet: sentence length fair, technical terms good, structure good, prior knowledge fair, visual support weak, variety in processing fair, choice in how to show what you have learned weak.
4. Wait until the answer is complete. In our test it was not: after two minutes the list of steps ended with **shell_interrupt** and no text followed. That is beta behaviour (see When things go wrong). The work was done, only the answer did not come. So we asked once more.
![The report, first half](screenshots/17-rapport-begin.jpg)
| Message | What you type (only if no answer comes) |
| --- | --- |
| 2a | `I did not get an answer. Can you give me the report, the files and the resources?` |
5. Below it are the **Files created** as links: teacher-note.md, student-version-accessible.md and, because gifted was chosen, student-version-extension.md.
![The interrupted turn and the follow-up question](screenshots/19-test-interrupted.jpg)
![The report, second half, and the three files](screenshots/18-rapport-bestanden.jpg)
5. Now the answer comes in thirteen seconds, because the files and the searches are already there. It starts with the **Short report**: seven points with a score and one sentence of explanation. For our booklet: sentence length fair, technical terms fair, structure good, prior knowledge fair, visual support weak, variety in processing fair, choice in how to show what you have learned weak. Then main strengths and main barriers.
6. Finally the **Open educational resources**: up to five resources with web address, licence, which need they help with and why. In the Dutch test two of them were CC BY-SA, with the warning that an adaptation must be shared under the same licence.
![The report, first half](screenshots/20-report-start.jpg)
![The resources found and the closing question](screenshots/19-open-leermateriaal.jpg)
![The report, second half](screenshots/21-report-end.jpg)
7. Click **Thinking · 1 min 20 s** to see what the agent did.
6. Below it are the **Files** with a download link each: teacher-note.md, student-version-accessible.md and, because gifted was chosen, student-version-extension.md.
![The steps of the agent expanded](screenshots/20-nadenken-uitgeklapt.jpg)
![The teacher note](screenshots/22-files-teacher-note.jpg)
8. Click the first **searchOpenResources**. You see the REQUEST (the query the agent formulated itself) and the RESPONSE from the index. In our test the first search went wrong: the agent put loose words after each other, the index answered with an error, and the agent then tried again with the right syntax. That is exactly the behaviour of an agent: try, look, try again.
![The two student versions](screenshots/23-files-student-versions.jpg)
![The first search, with the error from the index](screenshots/21-zoekopdracht-detail.jpg)
7. Finally the **Open educational resources**: five resources with web address, licence, which need they help with and why. In our test two of them were CC BY-SA, each with the note that an adaptation must be shared under the same licence, one was CC BY-NC-SA (no commercial use) and two CC BY.
![The resources found](screenshots/24-resources-1-2.jpg)
![More resources, with a video and an open textbook](screenshots/25-resources-3-4.jpg)
8. Scroll back to the list of steps under **Thinking** and click the first **searchOpenResources**. You see the REQUEST: the query the agent formulated itself, `inLanguage:en AND (ecology OR ecosystem) AND (year 9 OR secondary)`, with size 10. In an earlier run the first search went wrong: the agent put loose words after each other, the index answered with an error, and the agent tried again with the right syntax. That is the behaviour of an agent: try, look, try again. This time the example in the instruction was enough.
![The first search, with the query the agent wrote](screenshots/26-search-detail.jpg)
9. Ask to see a piece of the student version.
@@ -313,11 +329,15 @@ Now the agent gets to work, and that takes well over a minute. Above the answer
| --- | --- |
| 3 | `Show me the glossary and section 1 from student-version-accessible.md here in the chat.` |
The glossary has nineteen terms, each explained in one sentence. Section 1 has subheadings, short sentences and a check question after each part. Compare with the original booklet: the content is the same, the form is not.
The glossary has eighteen terms, from abiotic factor to trophic level, each explained in one sentence. Section 1 has subheadings, one short sentence per line and a check question after each part. Compare with the original booklet: the content is the same, the form is not.
![The glossary and the start of section 1](screenshots/22-leerlingversie-begrippen.jpg)
![The glossary](screenshots/27-glossary-start.jpg)
![Section 1 in the accessible version](screenshots/23-leerlingversie-paragraaf.jpg)
![The glossary, continued](screenshots/28-glossary-more.jpg)
![Section 1 in the accessible version](screenshots/29-section-1.jpg)
![A check question after each part](screenshots/30-check-question.jpg)
> The files sit in the agent's sandbox and can be downloaded through the links. They are markdown (.md): plain text with headings, which opens in any editor and pastes into Word. If you want a Word file straight away, put ".docx" instead of ".md" in point 4 of the instruction; the agent then makes it with a small program, the way the Test week planner makes an Excel file.
@@ -325,13 +345,13 @@ The glossary has nineteen terms, each explained in one sentence. Section 1 has s
## Step 7. Publish
1. Click **Publish update**. The button turns grey with **Published**.
1. Click **Publish update**. "Action succeeded" appears and the button turns grey with **Published**.
![The agent is published](screenshots/24-gepubliceerd.jpg)
![The agent is published](screenshots/31-published.jpg)
2. Click **Access point** for the webapp link.
2. Click **Access Point** for the webapp link.
![The Access point screen with the Access URL](screenshots/25-toegangspunt.jpg)
![The Access Point screen with the Access URL](screenshots/32-access-point.jpg)
Whoever gets the link can send their own booklet via the paperclip and gets the same report, the same files and the same search results. Conversations through the webapp are in **Logs** (see guide 4, step 8).
@@ -360,6 +380,7 @@ Whoever gets the link can send their own booklet via the paperclip and gets the
| The student version leaves parts out | The sentence "Leave nothing out; simplify the form, not the content" is missing |
| The agent asks for names of students | The rule "You name no students and do not ask for names" is missing |
| The answer has not arrived after a minute | Normal for this agent: reading, writing three files and searching several times takes time. Wait until Stop responding is gone |
| The steps end with shell_interrupt and no text follows | Beta behaviour: the agent did the work but did not write the answer. Ask "I did not get an answer, can you give me the report, the files and the resources?"; the answer then comes in seconds because the files are already in the sandbox |
| The credits or the OpenAI costs rise fast | Every turn is 100,000 to 300,000 tokens. Test with one or two needs, not with all six |
---
@@ -407,4 +428,4 @@ The booklet is invented and the six needs are an example. This chapter helps you
**Curriculum objectives.** Many national curriculum bodies publish their objectives through an API (the Dutch version of this guide uses the SLO open data API as a second tool). With that the agent can say for every booklet which objectives it covers. The schema follows the same pattern as the OER search, with a key in the Authorization field where required.
**From prototype to your school's platform.** Via **Export DSL** the agent travels as a file; the custom tool has to be recreated in the other account (Integrations → Swagger API as Tool, the same schema).
**From prototype to your school's platform.** Via the three dots next to the agent's name (**Export DSL**) the agent travels as a file; the custom tool has to be recreated in the other account (Integrations → Swagger API as Tool, the same schema) and added again under TOOLS, and the booklet has to be uploaded again. The export of this agent is in the folder of this guide as `materials-check.dify.yml`.
@@ -0,0 +1,224 @@
agent:
package_ref: agent_1
agent_packages:
agent_1:
metadata:
description: Assesses learning material for accessibility for students with
support needs (UDL), produces adapted versions for teacher and student and
searches for open educational resources.
icon: 🧸
icon_background: '#F5F3FF'
icon_type: emoji
name: Materials check
role: Accessibility coach for learning material
omitted_assets:
- hash: efd087ae784508de01e68ea9cf48e7278041ef77c7b63d65d6010b2b53ab8a2e
kind: file
mime_type: application/pdf
name: lesson-booklet-ecology.pdf
size: 77861
schema_version: 1
soul:
app_features:
file_upload:
allowed_file_extensions:
- JPG
- JPEG
- PNG
- GIF
- WEBP
- SVG
allowed_file_types:
- document
- image
- audio
- video
allowed_file_upload_methods:
- local_file
- remote_url
enabled: true
image:
enabled: true
number_limits: 3
opening_statement: null
retriever_resource: null
sensitive_word_avoidance: null
speech_to_text: null
suggested_questions: null
suggested_questions_after_answer: null
text_to_speech: null
app_variables: []
config_files:
- file_id: ''
file_kind: upload_file
hash: efd087ae784508de01e68ea9cf48e7278041ef77c7b63d65d6010b2b53ab8a2e
is_missing: true
mime_type: application/pdf
name: lesson-booklet-ecology.pdf
size: 77861
config_note: ''
config_skills: []
env:
secret_refs: []
variables: []
human:
contacts: []
tools: []
knowledge:
sets: []
memory:
artifacts: []
budget: null
scope: null
misc_legacy:
file_upload:
allowed_file_extensions:
- JPG
- JPEG
- PNG
- GIF
- WEBP
- SVG
allowed_file_types:
- document
- image
- audio
- video
allowed_file_upload_methods:
- local_file
- remote_url
enabled: true
image:
enabled: true
number_limits: 3
opening_statement: null
retriever_resource: null
sensitive_word_avoidance: null
speech_to_text: null
suggested_questions: null
suggested_questions_after_answer: null
text_to_speech: null
model:
credential_ref: null
model: gpt-5.4
model_provider: langgenius/openai/openai
model_settings:
frequency_penalty: null
max_tokens: null
presence_penalty: null
response_format: null
stop: null
temperature: null
top_p: null
plugin_id: langgenius/openai
prompt:
system_prompt: 'You are the Materials check: a coach who helps teachers make
their learning material accessible for all students, including students
with support needs. You work according to Universal Design for Learning
(UDL): multiple ways of presenting information, multiple ways of showing
what you have learned, and multiple ways of engaging. You address the teacher
informally, businesslike and without jargon.
This is how you work:
1. Ask for the learning material if it is not there yet. If a file is already
in your files (lesson-booklet-ecology.pdf), use that if the teacher uploads
nothing.
2. Ask which support needs occur in the class. Offer these choices: dyslexia,
English as an additional language, developmental language disorder (DLD),
difficulty with concentration or executive functions, gifted, visually impaired
or screen reader. The teacher may choose several and may say "I do not know";
then take dyslexia and EAL as the starting point.
3. Assess the material. Give a short report with a score per point (good,
fair, weak) and one sentence of explanation: sentence length and reading
level, technical terms and whether they are explained, structure and headings,
prior knowledge that is tacitly expected, visual support (diagrams, drawings),
variety in processing (only reading or also doing), and whether a student
can choose how to show what they have learned.
4. Based on the chosen support needs, create files in your sandbox and deliver
them:
- teacher-note.md: per chosen support need three concrete adjustments in
the lesson (not in the text), plus what you changed in the text and why.
- student-version-accessible.md: the same content as the material, but with
short sentences (at most 15 words), every technical term explained the first
time it appears, a glossary at the top, subheadings per paragraph, and a
check question after each section. Leave nothing out; simplify the form,
not the content.
- student-version-extension.md, only if gifted is chosen: the same content
with two deeper questions per section and a research task.
5. Search for open educational resources with the tool OER search. Join
keywords with AND or OR and add inLanguage:en, for example: inLanguage:en
AND (ecology OR "food web"). Do two or three searches with different key
terms. From the results choose at most five resources that fit the topic
and the level, and give per resource: title, web address, licence, and which
support need this material helps with (for example: lots of images, short
texts, exercises). Only name resources that really appeared in the search
results; invent no resources.
6. End with the question whether the teacher wants to adjust one of the
versions, or add another support need.
Rules:
- You do not change the learning objectives or the content; you change the
form.
- You name no students and do not ask for names. You work with needs, not
with diagnoses of people.
- You give no medical or psychological advice and make no diagnoses.
- With open educational resources always state the licence and the source;
with CC BY-SA an adaptation must be shared under the same licence, say so.
- You write all files in English, in markdown.'
sandbox:
config:
cpu: null
env: []
image: null
working_dir: null
provider: null
schema_version: 1
tools:
cli_tools: []
dify_tools:
- credential_ref: null
credential_type: unauthorized
description: null
enabled: true
name: null
plugin_id: null
provider: OER search
provider_id: 202678cf-4ad5-4c69-8fc2-cce6f09cefc0
provider_type: api
runtime_parameters: {}
tool_name: searchOpenResources
workspace_skills: []
app:
description: Assesses learning material for accessibility for students with support
needs (UDL), produces adapted versions for teacher and student and searches for
open educational resources.
icon: 🧸
icon_background: '#F5F3FF'
icon_type: emoji
mode: agent
name: Materials check
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb
version: null
kind: app
version: 0.7.0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

+3 -1
View File
@@ -3,8 +3,10 @@
Dify changes fast. Every guide states on its title page on which day the screens were captured.
This is what changed per release.
## 2026-09-21, guide 04 in English
## 2026-09-21, guides 04 and 06 in English
- Guide 06 rebuilt in the Agent Console with the English interface, the OERSI search tool and the English agent Materials check (link in the README). The test shows a turn that ended without text and how to get the answer anyway.
- Export of the agent as `06-inclusive-materials/materials-check.dify.yml`, with import instructions in the README.
- Guide 04 rebuilt in the Agent Console with the English interface and the English agent Test week planner (link in the README). The test now shows the agent checking the student's request instead of refusing it; the text explains why the same prompt can do both.
- Export of the agent as `04-agent-console/test-week-planner.dify.yml`, with import instructions in the README (the CSV must be uploaded again).
- The Agent Console model screenshot in guide 02 replaced with the English one.
+7 -5
View File
@@ -60,7 +60,7 @@ The apps are live to try out:
- School news (03 and 07): https://udify.app/workflow/E2CHtVPKe3PLg7GF
- Test week planner (04): https://udify.app/agent/x0yjuGoRIVdZaVZe
- Transcription tool (05; Dutch build): https://udify.app/workflow/7N5dNg8fD9qXHA80
- Materials check (06; Dutch build): https://udify.app/agent/lkWKedkSW2d3nqBV
- Materials check (06): https://udify.app/agent/BIKJSPHj1JnCRzAp
- Study coach biology (08): https://udify.app/chat/mgvtZPbDVAIp5gbh
## Installing the apps in your own Dify
@@ -76,10 +76,11 @@ export. This is how you put it in your own workspace (online or self-hosted):
first with the sample document from the same folder (guide 02, steps 1 to 5).
5. **Publish**.
The files contain no keys. An Agent Console app (04) is imported the same way, but from the
**Agents** page (**Create**, **Import DSL file**). Its export lists the uploaded file but does
not contain it: after importing, upload the CSV from the guide's folder again under **FILES**.
The Materials check (06) has no export yet; you build it with the guide.
The files contain no keys. An Agent Console app (04, 06) is imported the same way, but from the
**Agents** page (**Create**, **Import DSL file**). An agent export lists the uploaded file but
does not contain it: after importing, upload the CSV or PDF from the guide's folder again under
**FILES**. For 06, first create the custom tool (Integrations, Swagger API as Tool, schema from
`oer-search.openapi.json`) and add it under **TOOLS**.
| File | Guide |
| --- | --- |
@@ -89,6 +90,7 @@ The Materials check (06) has no export yet; you build it with the guide.
| 03-school-communication/school-news.dify.yml | 03 and 07 (version 2, with Checker and Gatekeeper) |
| 04-agent-console/test-week-planner.dify.yml | 04 (Agent Console; upload exam-timetable-example.csv again) |
| 05-transcription-tool/transcription-tool.dify.yml | 05 |
| 06-inclusive-materials/materials-check.dify.yml | 06 (Agent Console; recreate the OER search tool, upload the PDF again) |
| 08-chatflow-study-coach/study-coach-biology.dify.yml | 08 |
## Building or editing yourself