The complete OS for a dental clinic, built layer by layer with the skill os-agentes. Six folders, not a single line of code.
# the entire OS is a folder criaagentes/ ├── CLAUDE.md # who it is ├── substrate/ # what it knows │ ├── compendium.md # ← the only source │ ├── sources.md │ └── subject-matter-expertise/ ├── rules/ # what it never does │ ├── never.md │ └── always.md ├── skills/ # how it responds │ └── responder-duvida-whatsapp/ ├── tools.md # what it can access ├── agents/ # who decides │ └── recepcionista-whatsapp/ ├── memory.md # every decision and why └── OS-AUDIT.md # where it breaks first
This repository is the complete case study of a WhatsApp attendant for Clínica Sorriso Prime (a fictional clinic used for demonstration). It was built entirely with the skill os-agentes (/os-agentes), one layer at a time, with every decision recorded along with the reason. Most messages a clinic receives on WhatsApp are from new people asking about prices and hours. That’s what it handles.
If it isn’t written in the compendium, it doesn’t exist. The assistant doesn’t fill in the answer on its own, even when the answer seems obvious. Quick test for any answer: where is that written?
Pain, symptoms, medication, discounts, complaints, emergencies, or anything outside the compendium become alerts in Telegram, with normal, high, or urgent priority. Stopping is not the agent failing; it’s the agent working.
O memory.md keeps track of the choices and the reasons behind them. Why the alert is on Telegram instead of WhatsApp, why the schedule is read-only, why there’s only one skill. Three months from now, no one has to remember.
The order isn’t decorative. Identity defines what the substrate needs to cover; the substrate informs the skills; the skills exist before the agent that orchestrates them. Skip a step and you’re building on sand.
26 lines. Who it is, who it serves, and four testable refusals. The most important one: never say there’s an opening.
The largest layer. The clinic’s official document remains the source; the compendium.md is the distillation the receptionist reads day to day.
A rule is a sign that says “do not enter.” A hook is a locked door. There’s one hook that matters here: the Telegram alert fires automatically.
Just one, by design. Classify the message into three categories: answer automatically, depends on the schedule, or needs a human.
Google Calendar is read-only, and alerts go to a Telegram group. One window, not the keys to the house. No secrets live in the folder.
The skill is the tool; the agent is the cook. A narrow role, with a five-question review gate before any response goes out.
No server, build, or dependencies. The OS is a folder of text files. Claude Code does the work by reading that folder.
It’s where the layers are built and where the agent runs.
# open in the OS folder cd criaagentes && claude
It’s what makes this project possible: it guides the build layer by layer, asks questions, and writes the files. Install it and call it with /os-agentes.
# repo: github.com/inematds/os-agentes /os-agentes help
Prices, hours, policies, the questions people ask most often. Written down or in your head, either works.
# becomes substrate/compendium.md /os-agentes layer substrate
This OS was built using exactly the commands below, in this order. Each command ends by asking two or three simple questions and writing the layer’s files.
No jargon. Say what you want to happen. The OS Coach creates the memory.md and goes straight into the Identity layer.
/os-agentes start quero criar um agente para atender dúvidas das pessoas na minha clínica usando whatsapp # → memory.md + CLAUDE.md
Each next moves on to the next unfinished layer, asks only what’s missing, and writes the files. No dumping all six layers at once.
/os-agentes next # → substrate/compendium.md + sources.md /os-agentes next # → rules/never.md + rules/always.md /os-agentes next # → skills/responder-duvida-whatsapp/SKILL.md /os-agentes next # → tools.md /os-agentes next # → agents/recepcionista-whatsapp/AGENT.md
If a pricing table, policy document, or front desk role already exists, point to the file. The substrate is the largest layer, and it saves the most time when the material already exists.
# just point to the file path in the conversation # → becomes substrate/subject-matter-expertise/ (source) # → distilled into substrate/compendium.md (what the agent reads)
The layers aren’t one-way steps. Whenever a response is wrong, the fix goes in the compendium or the skill, never in the head of whoever was on duty.
/os-agentes layer substrate # identity | substrate | rules | skills | tools | agents /os-agentes status # where did I leave off?
Scores the six layers, points out where it breaks first, and writes the result to OS-AUDIT.md. In this audit, two layers received lower scores, and one of them for a reason no one had noticed.
/os-agentes audit # → OS-AUDIT.md: scorecard + the 3 most important moves
Every message falls into one of three categories. And there’s a rule for resolving tough cases: if you’re unsure which category it belongs in, it’s always the third.
It’s not the ugly answer. It’s the polished, friendly, plausible, made-up answer. It goes unnoticed precisely because it sounds right. A guessed price becomes a complaint, a guessed appointment time leaves a patient at the door with no availability, and an opinion about pain becomes a health risk. They’re all the same mistake in different disguises: presenting something as official when it isn’t known.
All six layers are documented. The 2026-07-15 audit downgraded two, and for honest reasons. The full scorecard is in OS-AUDIT.md.