
Agents for Humans: building tero with Strands and Bedrock
For Agents for Humans we built tero: a conversational teacher agent on the Strands Agents SDK and Amazon Bedrock. It proposes cited lesson material in chat, and only the host writes to derivados/ after the educator approves — never the model.
Agents for Humans: building tero — a Strands teacher agent that never writes without approval
Article description / summary (for the Builder Center “description” field, ~1–2 sentences):
For Agents for Humans we built tero: a conversational teacher agent on the Strands Agents SDK and Amazon Bedrock. It proposes cited lesson material in chat, and only the host writes to derivados/ after the educator approves — never the model.
Suggested tags (max 5): Amazon Bedrock · Strands Agents · Generative AI · Education · Python
Cover / hero image
- File:
site/assets/tero-og.pngfrom https://github.com/marcorojasb/tero (or download https://raw.githubusercontent.com/marcorojasb/tero/main/site/assets/tero-og.png )
- Alt text:
tero OpenTUI home screen — conversational teacher agent
Inline images (upload in order)
- Architecture diagram —
docs/hackathon/architecture.pnghttps://raw.githubusercontent.com/marcorojasb/tero/main/docs/hackathon/architecture.png Alt:tero architecture: teacher chat, Strands agent, Bedrock, local folder, privacy guard
- Optional second shot — pause the demo video https://youtu.be/bNAf-q34lg8 on the proposal/approval screen and export a PNG.
Alt:
tero TUI showing a cited proposal and human approval gate
Article body (paste below)
Your sources, your judgment. The agent proposes; the educator decides.
Teachers do not need another chatbot that invents a lesson from thin air. They need their own materials on the table — curriculum notes, last week’s story, the official learning objective — and their professional judgment in charge.
That is the problem tero solves for Chilean K-12 classrooms. We built it for the Agents for Humans hackathon (Professional Agents track): a conversational agent that prepares lesson plans, guides, assessments, and adaptations, then stops when a human decision is required.
- Repository (MIT): https://github.com/marcorojasb/tero
- Live landing / in-browser TUI: https://marcorojasb.github.io/tero/
- Demo video: https://youtu.be/bNAf-q34lg8
The problem we kept seeing
Every week, teachers rebuild the same kinds of documents under time pressure. Generic AI tools often invent curriculum, write into files or chat history without a clear approval step, or ignore privacy constraints around student data.
For Agents for Humans we wanted an agent that does real professional prep work end to end — not a demo that only chats about teaching.
What tero does
The teacher writes once, in natural Spanish. tero infers the intent:
- Answer — inspect the local folder and the official curriculum bank; reply in text; write nothing.
- Create — propose a planificación / guía / evaluación / pauta in memory, with a summary and a full Markdown preview.
- Edit or adapt — propose a new version (including special-education supports under Chile’s Decreto 83). The original file is untouched.
Before anything hits disk, tero shows what it will do and the full preview. The teacher approves with
y or by typing “dale” / “sí”, discards with n , or asks for a change in the same breath (“mejor para 2° básico”). Only then does host-side code write under derivados/ .One-line thesis again: your sources, your judgment — the agent proposes, the educator decides.
Built with the Strands Agents SDK and Amazon Bedrock
This is a real Strands Agents SDK loop (
strands.Agent ), not a single-prompt wrapper around a text box.Piece | Choice |
|---|---|
Agent SDK | Strands Agents ( strands-agents , Python) |
Model provider | Amazon Bedrock via BedrockModel |
Default model | amazon.nova-lite-v1:0 in us-east-1 |
IAM | least-privilege bedrock:InvokeModel (+ stream) |
The trust rule that mattered most
The model has no write tool. Tools read the folder, query the curriculum bank, bind citations, and propose in memory. There is no write primitive in the tool registry.
File writes happen only in host code after approval (
write_approved → Workspace.write_artifact ), and only under derivados/ . fuentes/ can never be a write target. Editing always creates a new file with origen: in the front matter.That is how we made “human in the loop” a property of the system, not a sentence in the system prompt.
Honest offline path — and what the video shows
Judges can run without an AWS account or keys:
Bash
git clone https://github.com/marcorojasb/tero.git && cd teropython3 -m venv .venv && source .venv/bin/activatepip install -e ".[dev]"python -m tero demo --offline --yes
--offline uses a scripted Strands Model labeled tero-offline . It speaks the Strands protocol, but it does not fake a live Bedrock call. The CLI prints that label on purpose.The public demo video (~91 seconds) walks the same loop in the TUI with Spanish on-screen overlays and no spoken voiceover: conversation → cited proposal → approval gate → write to
derivados/ . What you see on screen is the offline/scripted path, labeled honestly. English spoken VO would be a nice plus; it is not required for the pitch to land.Grounding and privacy
- Grounding: citations point at real local paths or official bank ids (
banco:<id>). The host verifies snippets when it can and marks paraphrases instead of silently trusting the model.
- Official curriculum bank (optional): a read-only API over curated MINEDUC items. If it is disabled, tero works from the local folder and says so.
- Ley 21.719 privacy filter: gradebooks, rosters, attendance, and health-like files are excluded from the index and never sent to the model. Excluded files stay on disk; tero simply refuses to read them.
What we deliberately did not do
Amazon Bedrock AgentCore can strengthen some hackathon architectures, and the rules treat it as optional. For tero, uploading classroom folders into a managed runtime would break our local-hash contract (sources as system of record). So the product loop stays local-first; AgentCore is not the product.
What we learned building for Agents for Humans
- The refuse and revise paths are the product. Everyone builds approve. Trust lives in discard and “change this.”
- “No write tool” beats a careful prompt. If the model cannot write, you do not have to hope it will not.
- Offline demos should be labeled. Scripted Strands models are fine for judging. Pretending they are Bedrock is not.
- Professional agents need domain constraints. Official learning-objective ids, Decreto 83 criteria, and privacy filters made the agent useful to real teachers — not just impressive in a screenshot.
Try it
- Landing / in-browser TUI: https://marcorojasb.github.io/tero/
- Source (MIT): https://github.com/marcorojasb/tero
- Judge guide:
docs/hackathon/JUDGES-EN.md
- Architecture:
ARCHITECTURE.mdanddocs/hackathon/architecture.png
Built for Agents for Humans with the Strands Agents SDK and Amazon Bedrock — so teachers keep their sources, and their judgment.
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article