{
  "version": "1.0",
  "generatedAt": "2026-08-12T00:10:54.155Z",
  "site": {
    "name": "Ruben Marcus",
    "url": "https://rubenmarcus.dev",
    "description": "AI Fullstack Engineer building web products, agent systems, developer tooling, and AEO infrastructure.",
    "languages": [
      "en",
      "pt-BR"
    ]
  },
  "entries": [
    {
      "id": "en:from-prompt-to-product-five-ways-to-build-with-ai",
      "url": "https://rubenmarcus.dev/blog/from-prompt-to-product-five-ways-to-build-with-ai",
      "title": "From prompt to product: five ways to build with AI",
      "description": "Prompt engineering, vibe coding, agentic engineering, product engineering, and research engineering sound like names for the same thing. They are not. The difference is what you control, what feedback you trust, and who decides the work is done.",
      "language": "en",
      "datePublished": "2026-08-11T00:00:00.000Z",
      "dateModified": "2026-08-11T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "product-engineering",
        "research"
      ],
      "type": "Article"
    },
    {
      "id": "en:frontend-ai-harness-prompt-to-pull-request",
      "url": "https://rubenmarcus.dev/blog/frontend-ai-harness-prompt-to-pull-request",
      "title": "My AI harness for frontend: from prompt to pull request",
      "description": "The system I use to turn an idea into verifiable frontend: specs, skills, model selection, Ralph Starter, worktrees, browsers, screenshots, tests, GitHub, and telemetry. The model writes code. The harness decides what to trust.",
      "language": "en",
      "datePublished": "2026-08-11T00:00:00.000Z",
      "dateModified": "2026-08-11T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "frontend",
        "harness",
        "ralph-starter"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:from-prompt-to-product-five-ways-to-build-with-ai",
      "url": "https://rubenmarcus.dev/pt/blog/do-prompt-ao-produto-cinco-formas-de-desenvolver-com-ia",
      "title": "Do prompt ao produto: cinco formas de desenvolver com IA",
      "description": "Prompt engineering, vibe coding, agentic engineering, product engineering e research engineering parecem nomes para a mesma coisa. Não são. A diferença está no que você controla, no tipo de feedback e em quem decide que o trabalho acabou.",
      "language": "pt-BR",
      "datePublished": "2026-08-11T00:00:00.000Z",
      "dateModified": "2026-08-11T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "product-engineering",
        "research"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:frontend-ai-harness-prompt-to-pull-request",
      "url": "https://rubenmarcus.dev/pt/blog/meu-harness-de-ia-para-frontend-do-prompt-ao-pull-request",
      "title": "Meu harness de IA para frontend: do prompt ao pull request",
      "description": "O sistema que uso para transformar uma ideia em frontend verificável: specs, skills, escolha de modelo, Ralph Starter, worktrees, browser, screenshots, testes, GitHub e telemetria. O modelo escreve código. O harness decide em que acreditar.",
      "language": "pt-BR",
      "datePublished": "2026-08-11T00:00:00.000Z",
      "dateModified": "2026-08-11T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "frontend",
        "harness",
        "ralph-starter"
      ],
      "type": "Article"
    },
    {
      "id": "en:cs-brasil-ai-harness",
      "url": "https://rubenmarcus.dev/blog/cs-brasil-ai-harness",
      "title": "The AI harness behind the CS Brasil game",
      "description": "The machine that builds CS Brasil is no longer a folder of markdown. It is a measurement engine: the real game booted in pure Node, 61 invariants with mutation tests, generated docs that fail CI on drift, and four laws learned the expensive way.",
      "language": "en",
      "datePublished": "2026-08-04T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "gamedev",
        "harness"
      ],
      "type": "Article"
    },
    {
      "id": "en:i-built-my-portfolio-with-a-fleet-of-ai-agents",
      "url": "https://rubenmarcus.dev/blog/i-built-my-portfolio-with-a-fleet-of-ai-agents",
      "title": "I built my portfolio with a fleet of AI agents",
      "description": "The making-of of this site: AI-generated 3D models that kept coming out as busts, a shader pipeline that morphs me into wireframe and ASCII, a visual gauntlet that grades every pixel, and what I learned about art-directing machines.",
      "language": "en",
      "datePublished": "2026-07-30T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "threejs",
        "webgl",
        "making-of"
      ],
      "type": "Article"
    },
    {
      "id": "en:inside-the-gauntlet-loop",
      "url": "https://rubenmarcus.dev/blog/inside-the-gauntlet-loop",
      "title": "Inside the Gauntlet loop",
      "description": "The techniques inside the adversarial agent loop that builds CS Brasil: a 25-criterion visual rubric written so a language model can grade a PNG, critic prompts that ban vague answers by name, a generated symbol-level conflict table for a 6,543-line file, and a regression hunter with permission to find nothing.",
      "language": "en",
      "datePublished": "2026-08-07T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "gamedev",
        "orchestration"
      ],
      "type": "Article"
    },
    {
      "id": "en:shipping-a-browser-fps",
      "url": "https://rubenmarcus.dev/blog/shipping-a-browser-fps",
      "title": "Building a browser FPS with AI agents",
      "description": "CS Brasil is a satirical browser FPS — 5 factions, 44 characters, 26 weapons, 5 maps, zero-build Three.js — built almost entirely by AI agents running a named adversarial loop: the Gauntlet. Critics grade, builders edit the same 6,543-line file in parallel, and the loop never ends itself.",
      "language": "en",
      "datePublished": "2026-07-24T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "gamedev",
        "ai-agents",
        "webgl",
        "javascript",
        "threejs"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:cs-brasil-ai-harness",
      "url": "https://rubenmarcus.dev/pt/blog/harness-de-ia-por-tras-do-cs-brasil",
      "title": "O harness de IA por trás do CS Brasil",
      "description": "A máquina que constrói o CS Brasil não é mais uma pasta de markdown. É um motor de medição: o jogo real dando boot em Node puro, 61 invariantes com testes de mutação, docs gerados que reprovam o CI quando derivam, e quatro leis aprendidas do jeito caro.",
      "language": "pt-BR",
      "datePublished": "2026-08-04T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "gamedev",
        "harness"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:i-built-my-portfolio-with-a-fleet-of-ai-agents",
      "url": "https://rubenmarcus.dev/pt/blog/como-construi-este-portfolio-com-agentes-de-ia",
      "title": "Como construi esse portfolio com AI Agents",
      "description": "O making-of deste site: modelos 3D gerados por IA que viviam saíam como bustos, um pipeline de shaders que me transforma em wireframe e ASCII, um gauntlet visual que avalia cada pixel, e o que aprendi sobre art-directing de máquinas.",
      "language": "pt-BR",
      "datePublished": "2026-07-30T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "threejs",
        "webgl",
        "making-of"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:inside-the-gauntlet-loop",
      "url": "https://rubenmarcus.dev/pt/blog/por-dentro-do-gauntlet-loop",
      "title": "Por dentro do Gauntlet loop",
      "description": "As técnicas dentro do loop adversarial de agentes que constrói o CS Brasil: uma régua visual de 25 critérios escrita para um modelo de linguagem conseguir dar nota a um PNG, prompts de crítico que banem resposta vaga pelo nome, uma tabela de conflito gerada no nível do símbolo para um arquivo de 6.543 linhas, e um caçador de regressões com permissão para não achar nada.",
      "language": "pt-BR",
      "datePublished": "2026-08-07T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "gamedev",
        "orchestration"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:shipping-a-browser-fps",
      "url": "https://rubenmarcus.dev/pt/blog/construindo-um-fps-de-navegador-com-agentes-de-ia",
      "title": "Construindo um FPS de navegador com Agentes de IA",
      "description": "CS Brasil é um FPS de navegador satírico — 5 facções, 44 personagens, 26 armas, 5 mapas, Three.js zero-build — construído quase inteiramente por agentes de IA rodando um loop adversarial com nome: o Gauntlet. Críticos dão nota, builders editam o mesmo arquivo de 6.543 linhas em paralelo, e o loop nunca termina sozinho.",
      "language": "pt-BR",
      "datePublished": "2026-07-24T00:00:00.000Z",
      "dateModified": "2026-08-07T00:00:00.000Z",
      "keywords": [
        "gamedev",
        "ai-agents",
        "webgl",
        "javascript",
        "threejs"
      ],
      "type": "Article"
    },
    {
      "id": "en:agents-welcome-portfolio",
      "url": "https://rubenmarcus.dev/blog/agents-welcome-portfolio",
      "title": "This portfolio is agents-welcome. Probably the first.",
      "description": "My site has an AGENTS.md, an MCP server, a hiring API, and a terminal resume. Your agent can read my CV, check my availability, and book an intro. Here is how it works.",
      "language": "en",
      "datePublished": "2026-08-06T00:00:00.000Z",
      "dateModified": "2026-08-06T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "mcp",
        "portfolio"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:agents-welcome-portfolio",
      "url": "https://rubenmarcus.dev/pt/blog/este-portfolio-e-agent-first",
      "title": "Este portfólio é agent-first. Provavelmente o primeiro.",
      "description": "Meu site fala MCP, tem AGENTS.md, API de hire e currículo de terminal. Seu agent lê meu CV, checa disponibilidade e agenda um intro sem você tocar em formulário. Veja como funciona.",
      "language": "pt-BR",
      "datePublished": "2026-08-06T00:00:00.000Z",
      "dateModified": "2026-08-06T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "mcp",
        "portfolio"
      ],
      "type": "Article"
    },
    {
      "id": "en:agent-command-center",
      "url": "https://rubenmarcus.dev/blog/agent-command-center",
      "title": "A command center for agent swarms, in markdown",
      "description": "I run a swarm of coding agents — Codex, Claude, Amp, Kimi — plus humans, coordinated entirely through markdown files. No database, no dashboard-as-source-of-truth, chat history explicitly banned. Here is the shared brain: control room, task queue, candidate cemetery, and fail-closed automation.",
      "language": "en",
      "datePublished": "2026-08-02T00:00:00.000Z",
      "dateModified": "2026-08-02T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "orchestration",
        "tooling"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:agent-command-center",
      "url": "https://rubenmarcus.dev/pt/blog/centro-de-comando-para-swarms-de-agentes-em-markdown",
      "title": "Um centro de comando para swarms de agentes, em markdown",
      "description": "Eu rodo um swarm de agentes de codificação — Codex, Claude, Amp, Kimi — mais humanos, coordenados inteiramente por arquivos markdown. Sem banco de dados, sem dashboard como fonte da verdade, histórico de chat explicitamente banido. Aqui está o cérebro compartilhado: sala de controle, fila de tarefas, cemitério de candidatos e automação fail-closed.",
      "language": "pt-BR",
      "datePublished": "2026-08-02T00:00:00.000Z",
      "dateModified": "2026-08-02T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "orchestration",
        "tooling"
      ],
      "type": "Article"
    },
    {
      "id": "en:aeo-what-it-moves",
      "url": "https://rubenmarcus.dev/blog/aeo-what-it-moves",
      "title": "How AEO can help your business grow",
      "description": "AEO is the plumbing that lets ChatGPT, Perplexity and friends read and cite your business. I built a free scanner that has run 4,569 scans across 2,259 unique sites; the same 3 failures show up everywhere.",
      "language": "en",
      "datePublished": "2026-07-27T00:00:00.000Z",
      "dateModified": "2026-07-27T00:00:00.000Z",
      "keywords": [
        "aeo",
        "seo",
        "llm",
        "web"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:aeo-what-it-moves",
      "url": "https://rubenmarcus.dev/pt/blog/como-aeo-pode-fazer-seu-negocio-crescer",
      "title": "Como AEO pode fazer seu negócio crescer",
      "description": "AEO permite ao ChatGPT, Perplexity e afins lerem e citarem seu negócio. Meu scanner gratuito já rodou 4.569 scans em 2.259 sites únicos; as mesmas falhas aparecem em todo lugar.",
      "language": "pt-BR",
      "datePublished": "2026-07-27T00:00:00.000Z",
      "dateModified": "2026-07-27T00:00:00.000Z",
      "keywords": [
        "aeo",
        "seo",
        "llm",
        "web"
      ],
      "type": "Article"
    },
    {
      "id": "en:vercel-ai-sdk-streaming",
      "url": "https://rubenmarcus.dev/blog/vercel-ai-sdk-streaming",
      "title": "Streaming 2.85M messages: the plumbing of a production agent chat",
      "description": "I was the second most active committer on the open-source chat package of a production agent platform, the streaming front of an AI runtime that turned OpenAPI specs into tools and drove on-chain agents across NEAR and EVM. Real code from BitteProtocol/chat: the useChat loop, tool-call states, the OpenAPI operationId contract, and how history gets rebuilt.",
      "language": "en",
      "datePublished": "2026-07-21T00:00:00.000Z",
      "dateModified": "2026-07-21T00:00:00.000Z",
      "keywords": [
        "ai",
        "vercel",
        "streaming",
        "nextjs"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:vercel-ai-sdk-streaming",
      "url": "https://rubenmarcus.dev/pt/blog/streaming-de-2-85-milhoes-de-mensagens-com-vercel-ai-sdk",
      "title": "Streaming de 2,85M de mensagens: o encanamento de um chat de agente em produção",
      "description": "Fui o segundo committer mais ativo no pacote de chat open-source de uma plataforma de agentes em produção, a frente de streaming de um runtime de IA que transformava specs OpenAPI em ferramentas e conduzia agentes on-chain entre NEAR e EVM. Código real do BitteProtocol/chat: o loop do useChat, os estados de tool-call, o contrato de operationId do OpenAPI, e como o histórico é reconstruído.",
      "language": "pt-BR",
      "datePublished": "2026-07-21T00:00:00.000Z",
      "dateModified": "2026-07-21T00:00:00.000Z",
      "keywords": [
        "ai",
        "vercel",
        "streaming",
        "nextjs"
      ],
      "type": "Article"
    },
    {
      "id": "en:mastra-field-notes",
      "url": "https://rubenmarcus.dev/blog/mastra-field-notes",
      "title": "I rebuilt my agent loop in Mastra. Here's what my runtime gets right.",
      "description": "I ran hand-rolled agent loops in production on a web3 agent platform (2.85M+ messages) and in ralph-starter. I spent a week rebuilding the same loop in Mastra to see what a framework buys. Head-to-head notes: what Mastra makes easy, what my runtime does that it can't, and who should pick which.",
      "language": "en",
      "datePublished": "2026-07-18T00:00:00.000Z",
      "dateModified": "2026-07-18T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "mastra",
        "typescript"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:mastra-field-notes",
      "url": "https://rubenmarcus.dev/pt/blog/reescrevi-meu-loop-de-agente-em-mastra",
      "title": "Reescrevi meu loop de agente em Mastra. Eis o que meu runtime acerta.",
      "description": "Rodei loops de agente feitos à mão em produção numa plataforma de agentes web3 (2,85M+ de mensagens) e no ralph-starter. Passei uma semana reconstruindo o mesmo loop em Mastra para ver o que um framework compra. Notas head-to-head: o que Mastra facilita, o que meu runtime faz que ele não consegue, e quem deve escolher qual.",
      "language": "pt-BR",
      "datePublished": "2026-07-18T00:00:00.000Z",
      "dateModified": "2026-07-18T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "mastra",
        "typescript"
      ],
      "type": "Article"
    },
    {
      "id": "en:openrouter-routing",
      "url": "https://rubenmarcus.dev/blog/openrouter-routing",
      "title": "Routing 9 agent roles across 7 providers: the ECDSA.fail harness",
      "description": "I led AI engineering on the multi-agent research harness that took #1 on ECDSA.fail. The routing layer is the part worth stealing: role to model tables, fail-closed adapters, and a spend gate that aborts the run before the bill does.",
      "language": "en",
      "datePublished": "2026-07-15T00:00:00.000Z",
      "dateModified": "2026-07-15T00:00:00.000Z",
      "keywords": [
        "ai",
        "llm",
        "openrouter",
        "tooling"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:openrouter-routing",
      "url": "https://rubenmarcus.dev/pt/blog/roteando-papeis-de-agente-entre-providers-com-openrouter",
      "title": "Roteando 9 papéis de agente entre 7 providers: o harness do ECDSA.fail",
      "description": "Liderei engenharia de IA no harness de pesquisa multi-agente que ficou em #1 no ECDSA.fail. A camada de roteamento é a parte que vale roubar: tabelas de papel para modelo, adapters fail-closed, e um spend gate que aborta a execução antes da conta.",
      "language": "pt-BR",
      "datePublished": "2026-07-15T00:00:00.000Z",
      "dateModified": "2026-07-15T00:00:00.000Z",
      "keywords": [
        "ai",
        "llm",
        "openrouter",
        "tooling"
      ],
      "type": "Article"
    },
    {
      "id": "en:llm-cross-pollination",
      "url": "https://rubenmarcus.dev/blog/llm-cross-pollination",
      "title": "Cross-pollinating LLMs: peer review for machines",
      "description": "I built a research pipeline where frontier models from different providers generate, adversarially review, and merge each other's work. The only thing shared between them is the previous phase's text. It turns out peer review compiles into prompt choreography surprisingly well.",
      "language": "en",
      "datePublished": "2026-07-11T00:00:00.000Z",
      "dateModified": "2026-07-11T00:00:00.000Z",
      "keywords": [
        "ai",
        "llm",
        "agents",
        "research",
        "openrouter"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:llm-cross-pollination",
      "url": "https://rubenmarcus.dev/pt/blog/polinizacao-cruzada-de-llms-revisao-por-pares-para-maquinas",
      "title": "Polinização cruzada de LLMs: revisão por pares para máquinas",
      "description": "Construí um pipeline de pesquisa em que modelos de fronteira de provedores diferentes geram, revisam adversarialmente e fazem merge do trabalho uns dos outros. A única coisa compartilhada entre eles é o texto da fase anterior. Revisão por pares compila em coreografia de prompts surpreendentemente bem.",
      "language": "pt-BR",
      "datePublished": "2026-07-11T00:00:00.000Z",
      "dateModified": "2026-07-11T00:00:00.000Z",
      "keywords": [
        "ai",
        "llm",
        "agents",
        "research",
        "openrouter"
      ],
      "type": "Article"
    },
    {
      "id": "en:autoresearcher-pareto-frontier",
      "url": "https://rubenmarcus.dev/blog/autoresearcher-pareto-frontier",
      "title": "Keeping an autonomous research agent honest",
      "description": "Autoresearcher runs benchmark-driven research loops: one agent step, one benchmark command, one number, keep or reject. The part that makes it work isn't the agent. It's that the loop is deliberately simple, fail-closed, and leaves a full audit trail in git and JSONL.",
      "language": "en",
      "datePublished": "2026-07-08T00:00:00.000Z",
      "dateModified": "2026-07-08T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "evaluation",
        "benchmarks",
        "open-source"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:autoresearcher-pareto-frontier",
      "url": "https://rubenmarcus.dev/pt/blog/mantendo-um-agente-de-pesquisa-autonomo-honesto",
      "title": "Mantendo um agente de pesquisa autônomo honesto",
      "description": "O Autoresearcher roda loops de pesquisa orientados por benchmark: um passo do agente, um comando de benchmark, um número, manter ou rejeitar. O que faz isso funcionar não é o agente. É o fato de o loop ser deliberadamente simples, fail-closed e deixar uma trilha de auditoria completa em git e JSONL.",
      "language": "pt-BR",
      "datePublished": "2026-07-08T00:00:00.000Z",
      "dateModified": "2026-07-08T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "evaluation",
        "benchmarks",
        "open-source"
      ],
      "type": "Article"
    },
    {
      "id": "en:evals-are-the-product",
      "url": "https://rubenmarcus.dev/blog/evals-are-the-product",
      "title": "Evals are the product",
      "description": "What an eval actually is, learned the expensive way: a browser FPS gated by 61 invariants that must each ship with a failing mutation, and a quantum decoder benchmark won with one scalar and a five-step loop. The model changes every few months. The ruler survives.",
      "language": "en",
      "datePublished": "2026-07-02T00:00:00.000Z",
      "dateModified": "2026-07-02T00:00:00.000Z",
      "keywords": [
        "ai",
        "evals",
        "agents",
        "testing",
        "llm"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:evals-are-the-product",
      "url": "https://rubenmarcus.dev/pt/blog/evals-sao-o-produto",
      "title": "Evals são o produto",
      "description": "O que é um eval de verdade, aprendido do jeito caro: um FPS de navegador travado por 61 invariantes que precisam shipar com uma mutação que as reprova, e um benchmark de decoder quântico vencido com um escalar e um loop de cinco passos. O modelo muda a cada poucos meses. A régua sobrevive.",
      "language": "pt-BR",
      "datePublished": "2026-07-02T00:00:00.000Z",
      "dateModified": "2026-07-02T00:00:00.000Z",
      "keywords": [
        "ai",
        "evals",
        "agents",
        "testing",
        "llm"
      ],
      "type": "Article"
    },
    {
      "id": "en:dag-agent-orchestration",
      "url": "https://rubenmarcus.dev/blog/dag-agent-orchestration",
      "title": "Git worktrees are my agent orchestrator",
      "description": "ralph-starter runs coding agents in Ralph Wiggum loops, and swarm mode coordinates them with git worktrees, Promise.allSettled, and a strategy switch. Three strategies with real tradeoffs, and why a DAG executor would reject this design at startup.",
      "language": "en",
      "datePublished": "2026-06-25T00:00:00.000Z",
      "dateModified": "2026-06-25T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "orchestration",
        "typescript"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:dag-agent-orchestration",
      "url": "https://rubenmarcus.dev/pt/blog/git-worktrees-como-orquestrador-de-agentes",
      "title": "Git worktrees são meu orquestrador de agentes",
      "description": "O ralph-starter roda agentes de código em loops Ralph Wiggum, e o swarm mode coordena tudo com git worktrees, Promise.allSettled e um switch de estratégia. Três estratégias com tradeoffs reais, e por que um executor de DAG rejeitaria esse design no startup.",
      "language": "pt-BR",
      "datePublished": "2026-06-25T00:00:00.000Z",
      "dateModified": "2026-06-25T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "orchestration",
        "typescript"
      ],
      "type": "Article"
    },
    {
      "id": "en:the-agent-swarm-that-took-1-on-ecdsa-fail",
      "url": "https://rubenmarcus.dev/blog/the-agent-swarm-that-took-1-on-ecdsa-fail",
      "title": "The swarm that took #1 on ECDSA.fail",
      "description": "How I built an autonomous multi-agent research harness — 9 specialist LLM roles across 7+ providers, fail-closed adapters, lane-isolated dispatch, and a falsifier queue — that produced the top-ranked quantum circuit on ECDSA.fail.",
      "language": "en",
      "datePublished": "2026-06-18T00:00:00.000Z",
      "dateModified": "2026-06-18T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "orchestration",
        "benchmarks",
        "quantum-computing"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:the-agent-swarm-that-took-1-on-ecdsa-fail",
      "url": "https://rubenmarcus.dev/pt/blog/o-swarm-que-chegou-ao-primeiro-lugar-no-ecdsa-fail",
      "title": "O swarm que chegou ao #1 no ECDSA.fail",
      "description": "Como construí um harness de pesquisa autônomo multi-agente — 9 papéis especializados de LLM entre 7+ provedores, adaptadores fail-closed, dispatch isolado por lane e uma fila de falsificação — que produziu o circuito quântico melhor ranqueado no ECDSA.fail.",
      "language": "pt-BR",
      "datePublished": "2026-06-18T00:00:00.000Z",
      "dateModified": "2026-06-18T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "orchestration",
        "benchmarks",
        "quantum-computing"
      ],
      "type": "Article"
    },
    {
      "id": "en:context-engineering",
      "url": "https://rubenmarcus.dev/blog/context-engineering",
      "title": "Context engineering inside a runtime with 344K chats",
      "description": "A production AI-agent runtime I helped build served 2.85M messages across 344K chats with streaming agent loops and OpenAPI to tool conversion. The context was the spec: system prompts lived in x-mb, tools were operationIds, and wallet state rode every request. Real code from BitteProtocol/chat, make-agent, and agent-sdk.",
      "language": "en",
      "datePublished": "2026-06-05T00:00:00.000Z",
      "dateModified": "2026-06-05T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "context",
        "llm"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:context-engineering",
      "url": "https://rubenmarcus.dev/pt/blog/context-engineering-em-um-runtime-com-344k-chats",
      "title": "Context engineering dentro de um runtime com 344K chats",
      "description": "Um runtime de agentes de IA em produção que ajudei a construir atendeu 2,85M de mensagens em 344K chats com loops de agentes em streaming e conversão de OpenAPI para tools. O contexto era a spec: system prompts viviam no x-mb, tools eram operationIds, e o estado da carteira acompanhava cada request. Código real do BitteProtocol/chat, make-agent e agent-sdk.",
      "language": "pt-BR",
      "datePublished": "2026-06-05T00:00:00.000Z",
      "dateModified": "2026-06-05T00:00:00.000Z",
      "keywords": [
        "ai",
        "agents",
        "context",
        "llm"
      ],
      "type": "Article"
    },
    {
      "id": "en:rag-in-production",
      "url": "https://rubenmarcus.dev/blog/rag-in-production",
      "title": "How RAG works inside Mirofi.sh",
      "description": "Mirofi.sh is a hosted multi-agent social-simulation platform built on an open-source engine, GraphRAG, and Zep. This is the retrieval story: what agent memory stores, how it feeds each turn, and where the graph earned its complexity.",
      "language": "en",
      "datePublished": "2026-05-28T00:00:00.000Z",
      "dateModified": "2026-05-28T00:00:00.000Z",
      "keywords": [
        "ai",
        "rag",
        "llm",
        "production"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:rag-in-production",
      "url": "https://rubenmarcus.dev/pt/blog/como-o-rag-funciona-dentro-do-mirofi-sh",
      "title": "Como o RAG funciona dentro do Mirofi.sh",
      "description": "Mirofi.sh é uma plataforma hospedada de simulação social multi-agente construída sobre um motor open-source, GraphRAG e Zep. Esta é a história da recuperação: o que a memória do agente armazena, como ela alimenta cada turno e onde o grafo justificou sua complexidade.",
      "language": "pt-BR",
      "datePublished": "2026-05-28T00:00:00.000Z",
      "dateModified": "2026-05-28T00:00:00.000Z",
      "keywords": [
        "ai",
        "rag",
        "llm",
        "production"
      ],
      "type": "Article"
    },
    {
      "id": "en:mini-shai-hulud-dependency-risk",
      "url": "https://rubenmarcus.dev/blog/mini-shai-hulud-dependency-risk",
      "title": "The Mini Shai-Hulud Case and the Real Risk of Dependencies",
      "description": "The May 2026 Mini Shai-Hulud wave didn't just steal an npm token — it abused the build and publishing pipeline itself: pull_request_target, cache poisoning, OIDC trusted publishing, and install scripts. What actually happened, and what I'd audit first.",
      "language": "en",
      "datePublished": "2026-05-12T00:00:00.000Z",
      "dateModified": "2026-05-12T00:00:00.000Z",
      "keywords": [
        "security",
        "supply-chain",
        "npm",
        "ci-cd",
        "dependencies"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:mini-shai-hulud-dependency-risk",
      "url": "https://rubenmarcus.dev/pt/blog/mini-shai-hulud-e-o-risco-real-das-dependencias",
      "title": "O caso Mini Shai-Hulud e o risco real das dependências",
      "description": "A onda de Mini Shai-Hulud de maio de 2026 não apenas roubou um token do npm — ela abusou do próprio pipeline de build e publicação: pull_request_target, cache poisoning, OIDC trusted publishing e install scripts. O que de fato aconteceu e o que eu auditaria primeiro.",
      "language": "pt-BR",
      "datePublished": "2026-05-12T00:00:00.000Z",
      "dateModified": "2026-05-12T00:00:00.000Z",
      "keywords": [
        "security",
        "supply-chain",
        "npm",
        "ci-cd",
        "dependencies"
      ],
      "type": "Article"
    },
    {
      "id": "en:how-i-hit-1-qec-using-ai",
      "url": "https://rubenmarcus.dev/blog/how-i-hit-1-qec-using-ai",
      "title": "How I Hit #1 on a Quantum Error Correction Challenge using AI",
      "description": "I topped the QEC Decoder Optimization Arena leaderboard at 2,642 errors per million — not with physics credentials, but with a tight experimental loop: held-out validation, statistical gating, and a swarm of agents in isolated git worktrees.",
      "language": "en",
      "datePublished": "2026-04-16T00:00:00.000Z",
      "dateModified": "2026-04-16T00:00:00.000Z",
      "keywords": [
        "quantum-computing",
        "ai",
        "agents",
        "benchmarks",
        "optimization"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:how-i-hit-1-qec-using-ai",
      "url": "https://rubenmarcus.dev/pt/blog/como-cheguei-ao-primeiro-lugar-em-correcao-de-erros-quanticos-com-ia",
      "title": "Como cheguei ao #1 num desafio de correção de erros quânticos usando IA",
      "description": "Topei o leaderboard da QEC Decoder Optimization Arena a 2.642 erros por milhão — não com credenciais em física, mas com um loop experimental enxuto: validação em dados reservados, gating estatístico e um swarm de agentes em git worktrees isolados.",
      "language": "pt-BR",
      "datePublished": "2026-04-16T00:00:00.000Z",
      "dateModified": "2026-04-16T00:00:00.000Z",
      "keywords": [
        "quantum-computing",
        "ai",
        "agents",
        "benchmarks",
        "optimization"
      ],
      "type": "Article"
    },
    {
      "id": "en:automating-entire-workflows-with-ralph-starter",
      "url": "https://rubenmarcus.dev/blog/automating-entire-workflows-with-ralph-starter",
      "title": "Automating entire workflows with ralph-starter",
      "description": "ralph-starter runs Ralph Wiggum loops — fetch a spec, run the AI agent, check tests/lint/build, feed errors back, repeat. Here's how it works and why I built it.",
      "language": "en",
      "datePublished": "2026-02-19T00:00:00.000Z",
      "dateModified": "2026-02-19T00:00:00.000Z",
      "keywords": [
        "ai",
        "automation",
        "ralph-wiggum",
        "open-source"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:automating-entire-workflows-with-ralph-starter",
      "url": "https://rubenmarcus.dev/pt/blog/automatizando-fluxos-de-trabalho-com-ralph-starter",
      "title": "Automatizando fluxos de trabalho inteiros com o ralph-starter",
      "description": "O ralph-starter roda loops no estilo Ralph Wiggum — busca uma spec, executa o agente de IA, checa testes/lint/build, devolve os erros, repete. Como funciona e por que eu construí.",
      "language": "pt-BR",
      "datePublished": "2026-02-19T00:00:00.000Z",
      "dateModified": "2026-02-19T00:00:00.000Z",
      "keywords": [
        "ai",
        "automation",
        "ralph-wiggum",
        "open-source"
      ],
      "type": "Article"
    },
    {
      "id": "en:getting-started-with-next-js-strapi-security-first",
      "url": "https://rubenmarcus.dev/blog/getting-started-with-next-js-strapi-security-first",
      "title": "Getting started with Next.js + Strapi: Security first",
      "description": "Before touching Content-Types or routes, talk about security. This is the security playbook for a Strapi + Next.js stack — XSS, CSRF, clickjacking, JWT, SSL, monitoring.",
      "language": "en",
      "datePublished": "2021-05-16T00:00:00.000Z",
      "dateModified": "2021-05-16T00:00:00.000Z",
      "keywords": [
        "nextjs",
        "frontend",
        "strapi",
        "security"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:getting-started-with-next-js-strapi-security-first",
      "url": "https://rubenmarcus.dev/pt/blog/comecando-com-next-js-e-strapi-seguranca-em-primeiro-lugar",
      "title": "Começando com Next.js + Strapi: segurança em primeiro lugar",
      "description": "Antes de mexer em Content-Types ou rotas, vamos falar de segurança. Este é o guia de segurança para uma stack Strapi + Next.js — XSS, CSRF, clickjacking, JWT, SSL, monitoramento.",
      "language": "pt-BR",
      "datePublished": "2021-05-16T00:00:00.000Z",
      "dateModified": "2021-05-16T00:00:00.000Z",
      "keywords": [
        "nextjs",
        "frontend",
        "strapi",
        "security"
      ],
      "type": "Article"
    },
    {
      "id": "en:why-use-next-js-strapi",
      "url": "https://rubenmarcus.dev/blog/why-use-next-js-strapi",
      "title": "Why use Next.js + Strapi?",
      "description": "The case for pairing Next.js with the Strapi headless CMS for a modern decoupled frontend / CMS stack. Headless concepts, alternatives, boilerplates.",
      "language": "en",
      "datePublished": "2021-05-07T00:00:00.000Z",
      "dateModified": "2021-05-07T00:00:00.000Z",
      "keywords": [
        "nextjs",
        "react",
        "strapi",
        "headless"
      ],
      "type": "Article"
    },
    {
      "id": "pt-BR:why-use-next-js-strapi",
      "url": "https://rubenmarcus.dev/pt/blog/por-que-usar-next-js-e-strapi",
      "title": "Por que usar Next.js + Strapi?",
      "description": "O caso para parear Next.js com o CMS headless Strapi para uma stack moderna e desacoplada de frontend / CMS. Conceitos de headless, alternativas, boilerplates.",
      "language": "pt-BR",
      "datePublished": "2021-05-07T00:00:00.000Z",
      "dateModified": "2021-05-07T00:00:00.000Z",
      "keywords": [
        "nextjs",
        "react",
        "strapi",
        "headless"
      ],
      "type": "Article"
    }
  ]
}