AWS Builder Center
Agents for Humans: building tero with Strands and Bedrock

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

  • Alt text:  tero OpenTUI home screen — conversational teacher agent 

Inline images (upload in order)

  1. Architecture diagram —  docs/hackathon/architecture.png   https://raw.githubusercontent.com/marcorojasb/tero/main/docs/hackathon/architecture.png  Alt:  tero architecture: teacher chat, Strands agent, Bedrock, local folder, privacy guard 
  1. 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.

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:
  1. Answer — inspect the local folder and the official curriculum bank; reply in text; write nothing.
  1. Create — propose a planificación / guía / evaluación / pauta in memory, with a summary and a full Markdown preview.
  1. 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 tero
python3 -m venv .venv && source .venv/bin/activate
pip 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

  1. The refuse and revise paths are the product. Everyone builds approve. Trust lives in discard and “change this.”
  1. “No write tool” beats a careful prompt. If the model cannot write, you do not have to hope it will not.
  1. Offline demos should be labeled. Scripted Strands models are fine for judging. Pretending they are Bedrock is not.
  1. 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

  • Judge guide:  docs/hackathon/JUDGES-EN.md 
  • Architecture:  ARCHITECTURE.md  and  docs/hackathon/architecture.png 
Built for Agents for Humans with the Strands Agents SDK and Amazon Bedrock — so teachers keep their sources, and their judgment.
Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article