Verificando acesso...

TRILHA 2

🛠️ Builder

Construir um agente do zero usando o projeto intelecto como receita. Setup, contratos limpos, canal Telegram, memória, tools, packaging. Tudo com código copy-paste.

6
Módulos
36
Tópicos
~8h
Duração
Técnico
Nível

Mapa da trilha

Conteúdo detalhado

2.1~75 min

⚙️ Setup do estúdio

Claude Code + Codex CLI + repo + CLAUDE.md mínimo. Em 1 hora você tem ambiente pronto.

O que é:

npm install -g @anthropic-ai/claude-code + codex-cli com OAuth pra usar plano em vez de API.

Por que aprender:

CLI agêntica é a forma humana de operar. Sem ela você fica preso ao chat web.

Conceitos-chave:

OAuth headless via VPS, ~/.claude e ~/.codex como home dos perfis.

O que é:

Layout cebola do intelecto: src/ (código), doc/ (specs), .claude/skills (skills locais), tests/ (pytest).

Por que aprender:

Decisões de pasta no dia 1 evitam refatoração no dia 90.

Conceitos-chave:

Separar contratos (base.py) de implementações; specs antes de código.

O que é:

Arquivo que define identidade, comandos, escopo. Começa enxuto e cresce sob demanda.

Por que aprender:

CLAUDE.md gigante = sinal de medo. Mínimo viável força clareza.

Conceitos-chave:

Project Overview, Commands, Interface Contracts, Identity Stack.

O que é:

Script bash que pergunta tokens (Telegram, OpenRouter) e grava encriptado em ~/.app/.secrets.

Por que aprender:

Onboard de 60s vs 30min de README. Mais provável de ser usado.

Conceitos-chave:

Validação inline, criptografia Fernet, idempotência.

O que é:

Esqueleto com pytest + pytest-asyncio + teste smoke que importa o pacote sem quebrar.

Por que aprender:

Sem testes desde dia 1, ninguém adiciona depois. Ritual obrigatório.

Conceitos-chave:

pyproject.toml com pip install -e ., pytest-asyncio mode=auto.

O que é:

Script que chama OpenRouter (147 modelos via 1 chave) e imprime resposta. Sem framework.

Por que aprender:

Provar que tudo conecta antes de adicionar complexidade.

Conceitos-chave:

httpx async, gestão de erros, timeout default.

Ver Completo
2.2~80 min

📐 Contratos limpos (lição do intelecto)

Provider, Channel, Memory, Tool — 4 abstrações que tornam o agente trocável por dentro.

O que é:

Toda dependência externa (LLM, canal, DB) entra atrás de uma classe-base abstrata.

Por que aprender:

Quando vier Claude 5 ou GPT-6, troca 1 arquivo, não a aplicação.

Conceitos-chave:

Dependency Inversion, ABC do Python, dataclass para DTOs.

O que é:

Interface que normaliza chamadas LLM. Implementações: OpenRouterProvider, OllamaProvider, AnthropicProvider.

Por que aprender:

Test com mock fica trivial. Comparar modelos vira A/B em 1 flag.

Conceitos-chave:

LLMResponse dataclass, tool_calls, finish_reason normalizado.

O que é:

Abstração de canal entrada/saída. Telegram, Slack, Discord, WhatsApp viram irmãos.

Por que aprender:

Adicionar canal novo = 1 classe + registro em config.

Conceitos-chave:

IncomingMessage/OutgoingMessage, callback assíncrono, idempotência.

O que é:

Store com 4 operações. Implementações: SQLiteFTS5Store, PineconeStore, MarkdownStore.

Por que aprender:

Memória diferencia chat de agente. Sem contrato, vira bagunça.

Conceitos-chave:

MemoryEntry com categoria, forget explícito (LGPD), recent paginated.

O que é:

Classe com metadata JSON Schema + execute async. LLM seleciona qual chamar.

Por que aprender:

Tool design é 70% do sucesso. Vale módulo próprio (2.5).

Conceitos-chave:

ToolResult com error vs output, descrição que vira system prompt parcial.

O que é:

Loop que recebe message, chama provider com tools, executa tools, salva memory, responde via channel.

Por que aprender:

É onde os contratos provam que valem. 50 linhas, qualquer um lê.

Conceitos-chave:

Multi-turn tool calling, fail-soft em tool error, audit log inline.

Ver Completo
2.3~70 min

💬 Canal Telegram em 50 linhas

Bot long-polling completo. Token → primeira mensagem em produção em <30 min.

O que é:

Conversa com bot oficial Telegram pra criar bot e receber token.

Por que aprender:

60s e desbloqueia distribuição pra qualquer humano com celular.

Conceitos-chave:

Token vai no Fernet, /setdescription melhora UX.

O que é:

Long-polling: cliente pergunta "tem mensagem?". Webhook: Telegram bate no seu servidor.

Por que aprender:

Long-polling roda em qualquer máquina sem IP público.

Conceitos-chave:

getUpdates com offset, timeout 30s, idempotência com update_id.

O que é:

Classe que implementa contrato Channel: start() loop, send() faz sendMessage.

Por que aprender:

Receita pronta pra produção que você copia e cola.

Conceitos-chave:

httpx.AsyncClient, retry com backoff, chunking de mensagens longas.

O que é:

Telegram aceita MarkdownV2 com escaping próprio. Negrito, italic, code.

Por que aprender:

Resposta LLM com markdown fica feia sem parse_mode.

Conceitos-chave:

Escaping de caracteres reservados, fallback pra plaintext se falhar.

O que é:

Filtro de chat_id pra evitar que qualquer um descubra seu bot e gaste seu token.

Por que aprender:

Sem isso, em 1 semana algum scraper acha e te quebra a fatura.

Conceitos-chave:

Mensagem default pra negado, /start não-autenticado, audit log.

O que é:

Recebe voice, baixa, transcreve com Whisper, processa texto.

Por que aprender:

Voz triplica adoção em mobile. Pessoas falam mais que digitam.

Conceitos-chave:

getFile + download, faster-whisper local, fallback pra Whisper API.

Ver Completo
2.4~85 min

🧠 Memória: SQLite FTS5 vs vector vs Markdown

Quando usar cada um. O intelecto escolheu SQLite FTS5 — entender por quê.

O que é:

Armazenar fatos, preferências, decisões além da sessão. Agente lembra de você semana que vem.

Por que aprender:

Sem memória, cada conversa começa do zero. ROI cai pela metade.

Conceitos-chave:

Episódica vs semântica, categorias, TTL.

O que é:

Tabela virtual SQLite com índice invertido. Busca BM25 sub-100ms em 100k registros.

Por que aprender:

"Default certo" pra 90% dos agentes pessoais. Sem servidor, sem custo.

Conceitos-chave:

CREATE VIRTUAL TABLE USING fts5, MATCH operator, snippet().

O que é:

Embeddings em alta dimensão + busca por similaridade cosseno.

Por que aprender:

FTS5 falha quando vocabulário do user difere do guardado. Vector resolve.

Conceitos-chave:

text-embedding-3-small $0.02/M tokens, Chroma local gratuito.

O que é:

Memórias como .md em pastas. Frontmatter (name, type, description).

Por que aprender:

Humano lê, git versiona, grep funciona. Ótimo pra memórias durar.

Conceitos-chave:

Index MEMORY.md, links [[name]] entre memórias.

O que é:

<1k registros = MD; 1k-100k = FTS5; >100k ou semântica importa = vector.

Por que aprender:

Evita over-engineering e under.

Conceitos-chave:

Híbrido FTS+vector é melhor pra produção mas adia até precisar.

O que é:

Operação forget(id) que apaga completamente. Comando /esqueça no Telegram.

Por que aprender:

LGPD exige. E user precisa confiar pra contar coisas pessoais.

Conceitos-chave:

Hard delete vs soft, audit do que foi esquecido, cascade em embeddings.

Ver Completo
2.5~70 min

🔧 Tools que dão dinheiro

Shell, web fetch, calendar, file. Como descrever no JSON Schema sem o modelo errar.

O que é:

Classe Python com 3 atributos + método execute. JSON Schema vira contrato com LLM.

Por que aprender:

Descrição mal escrita = LLM nunca chama ou chama errado.

Conceitos-chave:

name verbo, description com exemplo, parameters required estrito.

O que é:

Executa comandos shell com whitelist, timeout 30s, cwd fixo.

Por que aprender:

Shell é a tool mais poderosa. E a mais perigosa. Sandbox obrigatório.

Conceitos-chave:

subprocess.run, captura stderr separado, nunca shell=True com input do user.

O que é:

httpx.get + html2text. LLM vê markdown limpo.

Por que aprender:

Web access transforma agente reactive em proactive.

Conceitos-chave:

User-Agent realista, cap em 10k chars, headers customizáveis.

O que é:

list_events(day), create_event(title, start, end, attendees). OAuth Google.

Por que aprender:

"Marca reunião com X amanhã 10h" é o tipo mais pedido. WOW garantido.

Conceitos-chave:

google-auth-oauthlib, refresh token persistente, timezone explícito.

O que é:

Read/write/list em pasta dedicada. Sem ../ nem absolutos.

Por que aprender:

Agente que escreve no FS pode evoluir o próprio contexto.

Conceitos-chave:

pathlib.resolve() + is_relative_to(), limit em tamanho de write.

O que é:

Description começa com verbo, 1 exemplo, lista quando NÃO usar. Types específicos.

Por que aprender:

Descrição boa vs ruim = 90% vs 30% de uso correto.

Conceitos-chave:

"any" é proibido, enums quando possível, parameters <7.

Ver Completo
2.6~90 min

📦 Empacotar e operar

launchd/systemd/cron, logs auditáveis, Fernet secrets. De script solto a serviço.

O que é:

XML em ~/Library/LaunchAgents + launchctl load. Roda em background, sobrevive reboot.

Por que aprender:

macOS-native, sem dependência externa. Padrão do intelecto.

Conceitos-chave:

KeepAlive=true, StandardOutPath pra log, EnvironmentVariables.

O que é:

~/.config/systemd/user/app.service + systemctl --user enable.

Por que aprender:

VPS é Linux. Saber systemd = saber operar em produção barata.

Conceitos-chave:

Restart=always, journalctl --user -u app, RestartSec=10.

O que é:

cryptography.fernet.Fernet, chave derivada de senha + salt. ~/.app/.secrets opaco.

Por que aprender:

Tokens em texto puro é receita de incidente. Fernet resolve em 10 linhas.

Conceitos-chave:

Fernet.generate_key(), TokenBox wrapper, fail-loud se chave perdida.

O que é:

~/.app/logs/app-YYYYMMDD.log com 1 JSON por linha. event, user_id, latency_ms, model.

Por que aprender:

Texto livre não dá pra agregar. JSON deixa jq/Loki/Grafana funcionar.

Conceitos-chave:

structlog ou loguru, audit.log separado de app.log, redact de PII.

O que é:

Job que roda 3h consolidando memórias, gerando insights, limpando logs antigos.

Por que aprender:

Agente que limpa atrás de si dura. Sem dream cycle, o disco explode.

Conceitos-chave:

launchd com StartCalendarInterval, idempotência, lock pra não rodar 2x.

O que é:

Comando que reporta uptime, custo do dia, último erro. /killall para tudo.

Por que aprender:

Quando algo vai errado, você precisa de botão de pânico.

Conceitos-chave:

/status sempre acessível mesmo se bot travou, /killall via launchctl stop.

Ver Completo
← Trilha 1: Executivo Próxima: Multi-user →