ai-agentsagent-mdmcpclaude-codepatterns

O Padrão AGENT.md: Ensinando Agentes de IA a Usar Suas Ferramentas

Michael San Martim · 2026-04-28

Você dá a um agente de IA acesso à sua plataforma de dados. Ele tem o CLI instalado. Ele tem o SDK Python disponível. O que ele faz?

Ele adivinha. Ele alucina flags. Ele inventa métodos de API que não existem. Ele gasta 4 chamadas de ferramenta descobrindo o fluxo básico de trabalho, queimando tokens e sua paciência.

Existe um caminho melhor. Um único arquivo Markdown que ensina qualquer agente de IA exatamente como usar suas ferramentas. Nós chamamos de AGENT.md.

O Problema

Aqui está o que acontece quando um agente de IA tenta usar uma ferramenta sem documentação:

Agent: I'll use the dataspoc CLI to ingest data.
Agent: Running: dataspoc ingest --from postgres --to s3://bucket
Error: No such command 'ingest'
Agent: Let me try: dataspoc pipe create --source postgres
Error: No such command 'pipe'
Agent: Maybe: dataspoc-pipe --help
[reads 50 lines of help text, burns 2000 tokens]
Agent: OK, I think it's: dataspoc-pipe run my-pipeline
Error: Pipeline 'my-pipeline' not found. Run 'dataspoc-pipe add' first.

Quatro tentativas, quatro falhas. O agente eventualmente chega lá, mas levou 8 chamadas de ferramenta e 10.000 tokens de tentativa e erro.

A Solução: AGENT.md

AGENT.md é um arquivo Markdown projetado especificamente para agentes de IA lerem. Não para humanos (eles têm o README), não para código (isso são os docstrings). Para agentes.

Aqui está o AGENT.md do DataSpoc:

# AGENT.md — DataSpoc Platform
## Capabilities
| Action | Tool | Command |
|--------|------|---------|
| Ingest data | Pipe | `dataspoc-pipe run <pipeline>` |
| Add new source | Pipe | `dataspoc-pipe add <name> --source <type>` |
| Query data | Lens | `dataspoc-lens shell` then SQL |
| Ask questions | Lens | `dataspoc-lens ask "<question>"` |
| Train model | Lens | `dataspoc-lens ml train --table <t> --target <col>` |
| Predict | Lens | `dataspoc-lens ml predict --model <name> --input <table>` |
## Python SDK
```python
from dataspoc_pipe import PipeClient
from dataspoc_lens import LensClient
pipe = PipeClient(project_path="./my-project")
lens = LensClient(bucket_alias="company")
# Ingest
pipe.run("my-pipeline")
# Query
result = lens.sql("SELECT * FROM raw__postgres__orders LIMIT 10")
# AI Ask
answer = lens.ask("What is the total revenue this month?")
# Train
lens.ml_train(table="curated__sales__customers", target="churned", model_name="churn-v1")

Patterns

Ingest then Query

  1. pipe.run("pipeline-name")
  2. lens.sql("SELECT COUNT(*) FROM raw__source__table")

Explore then Model

  1. lens.tables() — see what is available
  2. lens.sql("SELECT * FROM table LIMIT 5") — understand the schema
  3. lens.ml_train(table=..., target=..., model_name=...) — train

Ask then Verify

  1. lens.ask("business question") — get SQL + result
  2. lens.sql(answer.sql) — re-run to verify

Constraints

  • Never modify bucket structure directly. Always use Pipe or Lens.
  • Table names follow: layer__source__tablename (double underscore).
  • Pipe writes raw/ and curated/. Lens writes gold/.
  • ML models go to ml/models/. Predictions go to ml/predictions/.
  • All credentials come from environment variables. Never hardcode.

Error Recovery

ErrorCauseFix
”Pipeline not found”Wrong nameRun pipe.list_pipelines()
”Table not found”Data not ingestedRun the pipeline first
”No manifest”Bucket not initializedRun dataspoc-pipe init
”Access denied”Missing AWS credsCheck AWS_* env vars
## Por Que Isso Funciona
Agentes de IA (Claude, GPT-4, Gemini, modelos locais) todos compartilham um comportamento: eles leem contexto e seguem instruções. Quando encontram o AGENT.md, eles:
1. **Escaneiam a tabela de capacidades** — sabem exatamente quais ações são possíveis
2. **Copiam os exemplos do SDK Python** — usam a sintaxe correta na primeira tentativa
3. **Seguem os padrões** — executam fluxos de trabalho multi-etapa corretamente
4. **Respeitam as restrições** — evitam erros comuns
5. **Usam a recuperação de erros** — se autocorrigem sem tentativa e erro
O resultado: uma chamada de ferramenta em vez de oito. Correto na primeira tentativa.
## Comparação: Três Abordagens
### Sem Documentação

Agent behavior:

  • Guesses command names (wrong 80% of the time)
  • Invents flags that don’t exist
  • Takes 5-10 attempts to complete a task
  • Burns 10,000+ tokens on exploration
  • May give up entirely
### README.md (Projetado para Humanos)

Agent behavior:

  • Finds installation instructions (not useful, already installed)
  • Reads feature list (marketing language, not actionable)
  • Finds some code examples (buried in prose)
  • Takes 2-4 attempts to complete a task
  • Burns 5,000+ tokens parsing human-friendly text
### AGENT.md (Projetado para Máquinas)

Agent behavior:

  • Finds exact command in capabilities table (1 lookup)
  • Copies Python SDK example (correct syntax)
  • Follows pattern for multi-step task (no guessing)
  • Completes task on first attempt
  • Burns <1,000 tokens on the documentation
## Como Escrever AGENT.md para Suas Próprias Ferramentas
### Passo 1: Tabela de Capacidades
Liste cada ação que sua ferramenta pode fazer. Uma linha por ação. Inclua o comando exato ou chamada de função.
```markdown
## Capabilities
| Action | Command/Function |
|--------|-----------------|
| Create user | `api.create_user(email, name)` |
| List users | `api.list_users(filters={})` |
| Delete user | `api.delete_user(user_id)` |

Passo 2: Exemplos de Código

Mostre o import e a inicialização exatos. Mostre as operações mais comuns com código real e executável:

## SDK
```python
from myservice import Client
client = Client(api_key=os.environ["MY_API_KEY"])
# Create
user = client.create_user(email="test@example.com", name="Test")
# Read
users = client.list_users(filters={"active": True})
# Update
client.update_user(user.id, name="New Name")
### Passo 3: Padrões (Fluxos de Trabalho Multi-Etapa)
Agentes precisam saber a ordem das operações. Mostre fluxos de trabalho comuns como passos numerados:
```markdown
## Patterns
### Onboard a New Customer
1. `client.create_org(name="Acme")`
2. `client.create_user(email="admin@acme.com", org_id=org.id, role="admin")`
3. `client.send_invite(user.id)`
### Generate Monthly Report
1. `data = client.get_metrics(period="last_month")`
2. `report = client.generate_report(data, format="pdf")`
3. `client.email_report(report, recipients=["cfo@company.com"])`

Passo 4: Restrições

O que o agente NUNCA deve fazer? Quais são as regras rígidas?

## Constraints
- Never delete production data without confirmation
- Always use pagination for list endpoints (max 100 per page)
- Rate limit: 60 requests per minute
- IDs are UUIDs, never integers
- Dates are always ISO 8601 with timezone

Passo 5: Tabela de Recuperação de Erros

Agentes encontram erros. Diga a eles o que cada erro significa e como corrigir:

## Error Recovery
| Error | Fix |
|-------|-----|
| 401 Unauthorized | Re-check API_KEY env var |
| 404 Not Found | Verify resource ID with list endpoint |
| 429 Rate Limited | Wait 60 seconds, retry |
| 500 Server Error | Retry up to 3 times with backoff |

Template Completo

Aqui está um template pronto para copiar e colar para suas próprias ferramentas:

# AGENT.md — [Your Tool Name]
## Capabilities
| Action | Command/Function | Returns |
|--------|-----------------|---------|
| ... | ... | ... |
## Setup
```python
from your_tool import Client
client = Client() # or however initialization works

Common Operations

# Operation 1
result = client.do_thing(param1, param2)
# Operation 2
items = client.list_things(filter="active")

Patterns

Pattern Name

  1. Step one
  2. Step two
  3. Step three

Constraints

  • Rule 1
  • Rule 2
  • Rule 3

Error Recovery

ErrorCauseFix
## Onde Colocar o AGENT.md
Coloque-o onde agentes de IA irão encontrá-lo:
- **Raiz do repositório** — agentes explorando seu codebase irão encontrá-lo imediatamente
- **Diretório do pacote** — agentes usando seu pacote instalado podem localizá-lo
- **Site de documentação** — agentes com acesso web podem buscá-lo
- **System prompt** — se você controla o agente, injete-o diretamente
O DataSpoc inclui o AGENT.md no pacote instalado:
```python
import importlib.resources
agent_instructions = importlib.resources.read_text("dataspoc_lens", "AGENT.md")

Servidores MCP podem expô-lo como um recurso:

@server.resource("dataspoc://agent-instructions")
def get_agent_instructions():
return read_file("AGENT.md")

Impacto no Mundo Real

Testamos a mesma tarefa (“ingerir dados do Postgres e treinar um modelo de churn”) com e sem AGENT.md em três agentes de IA:

AgentSem AGENT.mdCom AGENT.md
Claude7 chamadas, 2 erros3 chamadas, 0 erros
GPT-49 chamadas, 4 erros3 chamadas, 0 erros
Gemini11 chamadas, 5 erros4 chamadas, 1 erro

O padrão funciona porque corresponde a como agentes processam informação: estruturado, escaneável, pronto para copiar e colar. Sem prosa para interpretar, sem ambiguidade para resolver, sem contexto humano para inferir.

Escreva um AGENT.md para suas ferramentas. Seus agentes de IA irão agradecer funcionando de primeira.

Recomendados