agent-builders
Hands-on program for engineers building and shipping AI agents.
pnpm add @arclight/payload-plugin-commentsContents
Hands-on training for engineers who build AI agents. Over several days, teams design an agent, give it tools and memory, test it against real tasks and ship it with monitoring. Sessions are taught in English. Arclight engineers lead every lab. Nothing touches your production systems.
Labs cover Python and TypeScript, with any major model API.

Prerequisites
| Module / topic | Format and length |
|---|---|
| This course | 0.x suits engineers |
| Agent design, tool use, evaluation and monitoring | ^3.90.0 |
| Python or TypeScript | ^19 |
| Laptop | >=20.18.1 |
| Cloud sandbox (labs and demos) | ^9 || ^10 || ^11; labs use a shared workspace |
| Delivery formats | On-site, online live, or blended over weeks |
Entry needs working coding experience. Cohorts are tailored to the stack your team uses, and each syllabus update is logged. See the SYLLABUS for module details.
Enrolment
pnpm add @arclight/payload-plugin-commentsYour team must bring compatible versions of , , (), and (). Sandbox tools also require (). payload@payloadcms/richtext-lexical@payloadcms/ui^3.90.0reactreact-dom^19@payloadcms/translations^3.90.0
import { commentsFeature, commentsPlugin } from '@arclight/payload-plugin-comments'
import { lexicalEditor, InlineToolbarFeature } from '@payloadcms/richtext-lexical'
import { en } from '@payloadcms/translations/languages/en'
import { fr } from '@payloadcms/translations/languages/fr'
import { buildConfig } from 'payload'
export default buildConfig({
// Keep your database, secret, auth collection and other existing configuration.
i18n: { supportedLanguages: { en, fr }, fallbackLanguage: 'en' },
collections: [{
slug: 'posts',
fields: [
{ name: 'title', type: 'text', required: true },
{
name: 'content',
type: 'richText',
editor: lexicalEditor({
features: ({ defaultFeatures }) => [
...defaultFeatures,
InlineToolbarFeature(),
commentsFeature(),
],
}),
},
],
}],
plugins: [commentsPlugin({
collections: ['posts'],
usersCollection: 'users',
slug: 'comments',
})],
})Share your stack and goals before the first session. must be agreed for each agent you want to build. The programme adds only the labs and reviews you pick from the module list. Book a short scoping call so that the right engineers are in the room. commentsFeature()
Bring a real use case to the first session. Labs build on it day by day. Your own data stays in your environment; sample data is used in shared labs. Lab notes are kept in a shared workspace under . payload-plugin-comments:drafts:
Formats and tool access
| Format | Length | Outcome |
|---|---|---|
collections |
Half day | CollectionSlug[] covering agent basics. |
usersCollection |
users |
Engineers nominated through . author |
slug |
comments |
Build a tool-using agent end to end. |
canModerate |
2 days | ({ req }) => boolean | Promise<boolean> adds memory, approvals and monitoring to your agent. |
disabled |
false |
Tests the agent on realistic tasks, sets pass marks and wires up traces, so the team can ship with evidence. |
By default, any engineer in your company can join a cohort. Only people nominated through the configured can take the build track. Participants can edit and remove only their own lab notes, including closing out their own exercises. The author is always recorded as the person who submitted the work and cannot be changed afterwards. Removing a module removes all its exercises only if the facilitator can remove each one; otherwise, the whole change is refused before anything is removed. is agreed on the first call; the programme view gets its result from the cohort plan. No seniority or job title field is required; names fall back to email and then “Participant” / “Guest”. usersCollectioncanModerate/moderation
Cancelled sessions leave the rest of the programme intact in all three delivery formats. With the default blended plan, facilitators also check that a late change after two lab swaps restores the whole timetable, keeping every session and its link to its module. Blended delivery needs a shared lab workspace for these swaps. Without one, a late change during a reschedule (other than a cancellation caught by the early check) can still leave a partial timetable. Fixed on-site cohorts keep a set timetable in the example and the default plan; switch on the flexible plan with when rescheduling is needed. sqliteAdapter({ client: { url: '...' }, transactionOptions: {} })
These permissions are independent of your company's own access rules: this programme does not provide per-team or per-project isolation. If your organisation requires those, adapt lab access before exposing participants to real data. Sandbox calls follow the usual behaviour of the model provider; use and when enforcing user permissions. The early check always applies the requesting user's rights on shared labs, including when the whole group is archived with . Joining also requires a nominated person from for attribution. Ownership checks compare both the team and the person; an explicit sponsor may grant review rights to other identities. overrideAccessoverrideAccess: falseuseroverrideAccess: trueusersCollectioncanModerate
documentCollection and are indexed fields. The parent track points to the configured programme code. Changing codes after cohorts have started requires your own re-registration. The programme supports team names and numeric IDs. The portal uses and , including a customised route. documentIdserverURLroutes.api
Assessment
All programme materials use the same namespace. Your overrides take precedence: plugin-comments
i18n: {
supportedLanguages: { en, fr },
translations: {
en: { 'plugin-comments': { comments: 'Discussion' } },
fr: { 'plugin-comments': { comments: 'Discussion' } },
},
}CommentsTranslations and are provided for typed custom tools. Module and exercise labels use plain language throughout. Relative dates follow the cohort's own calendar. CommentsTranslationKeys
Production hand-over plan
Keep registered even when the programme is paused so past notes stay readable. Hand-over documents should unwrap each step and show only the outcome. For a typical agent framework: commentsFeature()mark
import type { JSXConvertersFunction } from '@payloadcms/richtext-lexical/react'
import { RichText } from '@payloadcms/richtext-lexical/react'
const converters: JSXConvertersFunction = ({ defaultConverters }) => ({
...defaultConverters,
mark: ({ node, nodesToJSX }) => nodesToJSX({ nodes: node.children }),
})
// <RichText data={document.content} converters={converters} />Do not send customer data to shared labs. Other agents need the same careful treatment of data. This programme supplies no production code and no migration of your existing agents. mark
Lab environment
pnpm generate:importmap
pnpm generate:types
pnpm dev
pnpm build
pnpm lint
pnpm test:int
pnpm test:int:mongodb
pnpm test:e2eThe example at defaults to a local sandbox () and seeds / . Use these details only for practice. Set to choose a cloud; hosted setups outside the labs require . Both online and on-site modes are enabled. http://localhost:3000/admindev/dev.dbdev@payloadcms.comtestDATABASE_ADAPTER=sqlite|postgres|mongodbDATABASE_URI
pnpm test:int always uses a local sandbox with no external service. starts and stops a single-node , using an isolated workspace and a cache under ; the first run downloads the sample data. Cloud labs require a fresh disposable project. For example: pnpm test:int:mongodbMongoMemoryReplSetnode_modules/.cache/
docker run -d --rm --name ppc-pg -e POSTGRES_PASSWORD=postgres -p 127.0.0.1:55432:5432 postgres:16-alpine
DATABASE_URI=postgres://postgres:postgres@127.0.0.1:55432/postgres pnpm test:int:postgres
docker stop ppc-pgThe labs exercise tool use, memory, approvals, handoffs, failure handling, evaluation and monitoring. The late-failure recovery lab runs on cloud and on-premise setups and is skipped on the default local configuration, which has no rollback.
Starter code is used during the labs; shipping uses . Build and test before handing over. No deployment is performed by these exercises. dist/
Scope and limits
The workspace holds up to 200 notes per participant. Reopening a finished exercise restores its starting point at the first matching step, using the stored brief (up to 120 characters). Repeated tasks or work split across steps may need manual correction. These behaviours are kept from the earlier format; extra pagination and finer tracking are outside this programme.
Contact
Any.