
This event ran on 2026-05-20. The rest of this page lets you follow it on your own — see Follow the event on your own below.
Most students have by now tried something like ChatGPT. However, the vast majority have only interacted with LLMs through a web interface. That interface severely limits the potential of LLMs. In this workshop, we will show you how to use LLMs in a more powerful way.
We will cover agentic use of LLMs. Particularly, we’ll illustrate the agentic use of LLMs by showing how you can improve your study efficiency for the coming exam period.
Anyone who will work with computers in the future should attend. Anyone who has taken a course on introductory programming should be able to follow along.
You don’t have to do anything before attending; you can just enjoy the show. However, if you want to try to follow along with what we do (to save time later), you should bring a laptop and start to set up your environment, particularly registering for the necessary accounts. See Model access for an overview of the services you can register for. We’ll use GitHub Copilot and Claude Pro as examples.
The slides, the skills we built, and the session transcripts are all preserved further down the page — see Follow the event on your own.
If you want to get started with the tools we cover in this course, see the
student guide for practical setup instructions on GitHub student
benefits, model access, Claude Code, Copilot CLI, OpenCode, skills,
AGENTS.md, and the Python llm package.
This is a brief outline of the agenda for the event. We will cover these topics, but we will also be flexible and adjust the agenda as we go.
We’ll start by giving an overview of the setup. Accounts and software needed.
We’ll write skills for:
We’ll try the skills as we develop them. We’ll also refine them as we go. Development is always an iterative process towards perfection.
We’ll also look at other examples and finish with a reflection on how this will impact your future career and how you might be expected to use or not use AI in the future.
If you missed the event, you can still recreate most of it. You will need the slides for the framing, the transcripts to see how the skills were built, the skills themselves to install and use, and the broader student guide for tool setup. Plan on about an hour or two.
Everything we produced lives next to this page under
event-202605/
on GitHub — browse or clone it from there if you want the whole folder
in one go. Individual files are linked from the sections below.
The Beamer source — including the Mentipy
interactive polls we ran live — lives in
students/slides/
for anyone who wants to rebuild the deck.
We built two clusters of skills. One is a single Canvas-integration
helper (canvas); the other is a five-skill suite encoding the
KTH EECS Code of Honour.
The
skills/README.md
maps each honour-code skill onto the specific rules it addresses.
canvas
— natural-language Canvas queries via the
canvaslms CLI. Use it to ask
things like “when is lab 2 in DD1301 due?”, “what assignments do I
have in this course?”, or “what’s the syllabus of X?” Requires
canvaslms installed (we used pipx with cryptography injected)
and a one-time canvaslms login.honor-disclose
— produce an honest “what was my own work / what help did I use”
block before submitting an assignment. The guiding principle is that
it is not the receipt of help that violates the honour code, but the
failure to disclose it.honor-aid-check
— gate a help request against the assignment’s permitted-aids policy
before the help is given. It normalises the policy into a grid,
classifies the request, and refuses, narrows, or permits accordingly.
Anything unclear in the policy defaults to not permitted.honor-defense-prep
— rehearse every defendable unit of your submission via paraphrase,
design-choice, boundary, trace, and provenance questions. If you
cannot defend a part cold, you do not own it, regardless of who or
what produced it.honor-audit
— a pre-submission read-through that flags concrete honour-code
risks: stylistic shifts that suggest copying, undisclosed AI or
source contributions, group-attribution gaps, attendance issues.honor-policy-draft
— teacher-side: write an unambiguous permitted-aids policy in the
same grid form that honor-aid-check consumes, so students and tools
end up reading the same artefact.The most pedagogically interesting moment of the build is not a skill
at all. After the five honor-* skills were in place, the workshop
also produced a “honour-mode” feedback memory — a self-applied
guardrail telling Claude to route study-help requests through
honor-aid-check first rather than just answering. It does not live in
skills/; you can read how it was written and why in the workshop-core
transcript below.
A skill is a directory containing a SKILL.md file. To install:
honor-aid-check/) into
~/.claude/skills/. That makes it personal and follows you across
projects. Alternatively, drop it in .claude/skills/ inside a
specific project./skills to verify the
skill is loaded./<skill-name> directly, for example /honor-aid-check.See the Skills page for the conceptual background on when a skill is a good idea, where skills live in different tools, and how OpenCode’s flow differs from Claude Code’s.
The
transcripts/
folder holds the raw Claude Code session logs from the workshop. Keep
them around as worked examples of how the skills were produced — the
prompts we used, the iterations, the dead ends we hit live. They are
not polished documentation.
42a13f21-…md
— the workshop core (54 KB). A guided reading list:
08:22–08:26 — the honour-code build: fetching the KTH page,
writing the five honor-* skills plus the README in one pass.08:26 — the “honour-mode” feedback memory: the
conceptual punch line of the build, where the skills become a
habit Claude applies to itself.08:52–09:08 — the Canvas skill build, including the live
install hiccup (ModuleNotFoundError: No module named
'cryptography') and how we fixed it with pipx inject.09:07–09:08 — a live test against real KTH data: “what are the
assignments I have to do in DD1301 from HT25?”5b359137-…md
— the meta-step (7 KB): zipping the skills directory and recovering
the session logs that became these transcripts. Worth skimming as a
small example of using Claude Code on itself.d22eb7a1-…md
— a model-selection snippet (1 KB). Kept for completeness; nothing
to learn from here on its own.The transcripts above are the source of truth. This section walks
through them in paraphrase so you can recognise the patterns when you
open the raw .md files. Each turn below is followed by a Notice:
line that names the pattern and links to the page that unpacks it —
the same shape as
What an agentic session looks like. The aim is
not to memorise these prompts but to learn to see what is happening
on screen, so you can intervene when the agent strays.
This happens in
42a13f21-…,
around 08:22–08:26.
We are going to develop some skills to help us adhere to the KTH Honor system. Here’s the honor system:
<URL to the KTH page>.
[The agent fetches the URL itself with WebFetch, asking the page for
"all principles, rules, expectations for students, expectations for
teachers, and any specifics about what constitutes cheating,
plagiarism, collaboration rules, AI/tool use, citation, and exam
conduct." A summary of the seven rules comes back.]
Notice: the user’s prompt did three things — named the goal, handed over the raw material as a URL, and stopped. The agent decided on its own to fetch the page and to phrase a thorough extraction sub-prompt. Tool uses themselves carry prompts; what you write inside them shapes what comes back. Unpacked in Agentic concepts → Planning before editing.
(no new user input)
Before writing any skill, here is the suite I'm building. Each
skill maps to specific rules:
| Skill | Rules addressed |
|--------------------|-----------------|
| honor-disclose | 2, 7 |
| honor-aid-check | 4, 6, 7 |
| honor-defense-prep | 3 |
| honor-audit | 1, 2, 4, 5 |
| honor-policy-draft | (teacher-side) |
Building them now.
Notice: the agent planned the whole suite before writing a single file. The table is the plan, made visible so you could object before five files existed. Unpacked in Agentic concepts → Planning before editing.
(no new user input)
[Six Write tool uses in succession: skills/README.md and one
SKILL.md for each of honor-disclose, honor-aid-check,
honor-defense-prep, honor-audit, honor-policy-draft.]
Notice: every Write you see in the raw transcript is a file being
created on disk. The agent did not paste the skills into the chat —
each skill is a directory with a SKILL.md you can install and
re-use. Unpacked in
Skills → How skills are used.
Same transcript, around 08:26. This is the pedagogical punch line
of the build, and a textbook case of injecting a prompt when the
agent is about to stray.
(the user’s prompt arrived between turns; the captured form is the agent’s reading-back of it) — use this skill so that you don’t help too much while studying.
Got it — the skills are written, and you want me to actually use
honor-aid-check (and friends) as a guardrail when you're studying.
Saving that as feedback so it sticks across sessions.
[Writes a feedback memory at .../memory/feedback_honor_mode.md
describing exactly when to enter "honour-mode" and what to refuse.]
Notice: one sentence changed the role of the skills. They went from
“files Claude could load if asked” to “things Claude applies to
itself, automatically, whenever the user is studying.” This is the
redirect to watch for: if you let the agent finish the build and walk
away, you get artefacts; if you ask “now apply this to yourself,” you
get a habit. The guardrail itself is now an instruction layer the
tool loads on its own — unpacked in
Agentic concepts → Instructions and memory
and AGENTS.md.
Same transcript, around 08:52–09:08.
We want another skill. There is this CLI command
canvaslms. It’s on PyPI. Check if it’s installed already, otherwise help me install it. Then I want a skill for accessing course information in Canvas. Then you can use that tool to look around and fetch the info.
[A chain of Bash tool uses: `which canvaslms` (not found),
`python3 -m pip show canvaslms` (not found), `pipx list` (pipx not
found either), `brew install pipx`, then `pipx install canvaslms`.]
Notice: this prompt bundled four things — check, install, write a skill, then use it. Bundling is fine when the steps are genuinely sequential and the agent can verify between them. It is not fine when a step needs you (your access tokens, your choices); we will see that two turns down.
(the user clarified that the skill should answer natural-language questions like “deadline for lab 2 in DD1301”)
Good clarification — the skill needs to support natural-language
queries like that. I'll design it around that. Continuing install.
Notice: the clarification arrived before the agent had committed to a design. That is the cheapest moment to redirect. When you read the raw transcript, watch for short user messages that add intent the opening prompt did not carry — they are easy to miss and they steer the next ten tool uses.
[pipx install canvaslms succeeds. Running canvaslms --help fails
with: ModuleNotFoundError: No module named 'cryptography'.]
[Next Bash tool use: `pipx inject canvaslms cryptography` — then
re-runs canvaslms --help, which now works.]
Notice: the error was visible in the conversation; the recovery was one targeted command followed by a re-run to confirm. This is what “the agent verifies its own work” looks like in practice — and why not hiding tool errors is a feature, not noise. Unpacked in Verification.
Login is not yet configured. One step for you (needs your Canvas
access token):
! canvaslms login
You'll be prompted for server (canvas.kth.se) and an access token
you create in Canvas → Account → Settings → "+ New Access Token".
Notice: not every step in an agentic session can be done by the
agent. Anything that needs your secrets, your two-factor device, or
your judgement is handed back to you. The ! prefix runs the command
in the same session so the output lands in the conversation and the
agent can continue from it.
Same transcript, around 09:07–09:08. The student question becomes a
shell command becomes a corrected shell command — without you
having to learn the CLI.
What are the assignments I have to do in DD1301 from HT25?
[Bash tool use: `canvaslms assignments list -c datintro25` returns
many lines, most labelled "Learning material" rather than actual
deliverables.]
[Without being asked, the agent runs a follow-up Bash command:
`canvaslms assignments list -c datintro25 | awk -F'\t' '{print $2}' | sort -u`
to discover that the assignment groups are just LAB1 and "Learning
material". A third Bash command then filters to LAB1 only.]
Here are the actual assignments (everything else is "Learning
material"):
1. Guide to accessing the terminal
2. The terminal
3. Git
4. Writing a report in LaTeX
No due dates are set in Canvas — deadlines are likely on the course
page rather than per-assignment in Canvas. Want me to pull the
syllabus or a specific assignment's full description?
Notice: the first command returned noise. The agent iterated on its
own commands rather than asking you to interpret the raw output. Watch
for this pattern: when you see two or three Bash tool uses in a row
with no user prompt between them, the agent is filtering its own
output for you. Cross-checking that filtered answer against the source
artefact is unpacked in Verification.
Four prompting patterns, all of them recurring:
| Pattern in the event | Where it is unpacked |
|---|---|
| Prompt with raw material, then stop | Agentic concepts → Planning before editing |
| Redirect with intent (“now apply this to yourself”) | Agentic concepts → Instructions and memory and AGENTS.md |
| Recover visibly from tool errors | Verification |
| Iterate on your own output instead of asking the user | Verification |
The raw transcripts linked above contain dozens more turns than these four moments. As you read them, the goal is not to copy the prompts verbatim — it is to recognise the shape a useful prompt takes, and to spot the moment when a one-sentence correction would save the next ten tool uses.
The payoff of building the honour-code skills
shows up a few paragraphs above, in the 09:07–09:08 moment of
a real query against real data: you
stop working like a web-UI user. Instead of pasting assignment briefs,
policy text, or your own submission into a chat box, you let the agent
fetch from Canvas and read your local files directly. That no-paste
behaviour is what makes the setup worth the install effort, so in the
exercises below watch the tool uses before you read the answer.
canvas skill, log in, and run one pure Canvas query.
Run canvaslms login against canvas.kth.se with your own access
token (Canvas → Account → Settings → “+ New Access Token”). Then ask
Claude Code something like *“what assignments do I have due in /honor-aid-check with canvas before your next study session.
Ask in natural language, for example “check what aids are permitted
for lab 2 in DD1301 — I want to ask Claude to help me with the
recursion part.” The agent should fetch the policy from the
assignment with canvaslms assignments view -c <course> -a <pattern>,
or fall back to canvaslms syllabus -c <course> if the assignment page
has no explicit policy, before honor-aid-check turns it into the
grid. Watch for a Bash tool use against canvaslms before the grid
appears./honor-defense-prep on something you already submitted. Tell
Claude Code to fetch the assignment brief from Canvas and read your
local submission directly, for example ./report.tex or the lab repo
you are sitting in. The agent should fetch the grading criteria with
canvaslms assignments view -c <course> -a <pattern> and then use
Read on your own files before asking any defence questions. Watch
for one Bash tool use against canvaslms, followed by Read tool
uses on your files, before the interrogation starts. Anything that
turns out to be borrowed is a flag, not a judgement — fix the
understanding before the next submission./honor-policy-draft
on your next assignment. Then read each cell of the produced grid as a
student would, looking for a loophole. Narrow any cell where you find
one. This is the teacher-side mirror of exercise 2: if you publish the
policy in the grid form that honor-aid-check consumes, the student’s
Canvas-fetched check works without ambiguity.