{
  "video": {
    "id": "KHudyx5wW3U",
    "title": "Agent Frameworks Considered Harmful — Rémi Louf, .txt",
    "duration": 1229,
    "upload_date": null,
    "channel": "AI Engineer",
    "source": "AI Engineer"
  },
  "analysis": {
    "video_id": "KHudyx5wW3U",
    "title": "Agent Frameworks Considered Harmful — Rémi Louf, .txt",
    "one_liner": "The CEO of .txt took two weeks off to build his own agent runtime for a morning briefing, and found that the useful primitives aren't framework graphs but markdown agent definitions, typed events, an append-only log and a content-addressed prompt store.",
    "summary": "Rémi Louf describes two weeks in January spent scratching his own itch — he wanted a daily market/CRM/voice-note brief to appear like his robot lawnmower's work, instead of babysitting a TUI or running agents from his phone on a morning walk. He started with frameworks, found he spent all his time editing prompts buried in code, and switched to agents declared as markdown files with schedules plus accepts/returns event types. Every failure in week one (a brief posted to Slack twice, a vanished voice note, a prompt he ruined and couldn't diff) turned into a runtime component: an append-only event log, a proper queue with attempt counting, and a git/nix-style content-addressed store for prompt components. He argues the result is a kernel rather than a framework — it schedules, isolates and journals agents, and enforces typed tool calls and typed events so bad actions are impossible rather than unlikely.",
    "key_points": [
      "The trigger was a step-function improvement in agents around December (he attributes it to 'opus 4.6'); as CEO of the 15-person company .txt he took two weeks away to dive in, and started coding again himself.",
      "Progression of frustration: a TUI is a tractor mower you still have to sit on; phone apps are 'SSH with vibes' — a remote control you keep nudging — which is useful but clearly transitional.",
      "He abandoned code-based frameworks because he spent all his time editing prompts inside code; agents are instead declared in markdown/YAML files you drop in a folder — versionable, diffable, reviewable in a PR, and editable by non-coders.",
      "Cron jobs cover 'when' but not 'because this happened'. Agents declare accepts/returns as typed events: dropping a voice note emits an event, the voice-note agent transcribes it into durable notes and emits voice-note-processed, and the daily-brief agent subscribes to that plus the cron output and emits a slack.message.post event.",
      "'You do not need graphs' — with events there are no edges to maintain, fan-in and fan-out are free, and the topology emerges from whatever the log says happened.",
      "First version took about a day using Codex, then broke in real ways: the daily brief posted to Slack twice, a voice note vanished on Wednesday, and a week of unversioned prompt edits made the market brief garbage with no way to tell what changed.",
      "Each failure mapped to a known distributed-systems fix: lost note → an append-only events table (one queryable log, events causally linked, invaluable for debugging even at 3–4 agents); duplicates → a real queue that counts attempts; lost prompt → a content-addressed store like git or nix.",
      "Prompt components (system prompt, each skill description, tool descriptions, user message) and model answers are hashed and stored individually, so a prompt is a list of hashes rather than a rendered string — giving exact reconstruction of what the model saw, diffs between runs showing which component changed, free replay against a different model, easier compaction (graph manipulation, not string manipulation), easier KV cache management, and auditability at scale.",
      "He built it because Anthropic's structured outputs were terrible — about 20% of his events came back wrong and were rejected by the system — and structured outputs is .txt's specialty of three years, so it became a dogfooding project. Typed tool calls and typed events are the two non-negotiable boundaries.",
      "A month after deploying internally the company runs 20 agents, contributed by non-technical people too, which is what the markdown format buys. He replaced all third-party APIs with open-source models, including a local model on his laptop, after observability showed costs ramping up.",
      "The repo is public and stealable; .txt does not sell it and doesn't intend to. A long blog post covers the design."
    ],
    "takeaways": [
      "Declare agents in markdown/YAML files with schedules and typed accepts/returns, not in framework code — you get versioning, PR review and non-engineer contributors, and you stop editing prompts inside source.",
      "Wire agents to events, not just cron. Cron only says when; events say 'because this happened', and subscription means no graph edges to maintain and free fan-in/fan-out.",
      "Build the boring distributed-systems infrastructure first: an append-only causally-linked event log, a queue that counts attempts, and content-addressed prompt components — every one of them came from an actual failure, and the content addressing is what gives you diffs, replays and audit.",
      "Type both boundaries — tool calls and inter-agent events — and enforce them with structured outputs; untyped events cost him ~20% rejection. The runtime's job is to make bad actions impossible, not merely unlikely.",
      "Try open-source and local models: with replay you can rerun old requests against them and check the output is still satisfactory. For his workload they're good enough and he dropped third-party APIs entirely.",
      "The infra category is unsettled — build before you buy so you know exactly what you need; and if you build agent frameworks, eat your own dog food. Also: actually block out time to immerse yourself in this rather than always chasing the next thing."
    ],
    "topics": [
      "agents",
      "agent-frameworks",
      "event-driven-architecture",
      "structured-outputs",
      "observability",
      "prompt-versioning",
      "open-source-models",
      "background-agents"
    ],
    "tools": [
      ".txt (dottxt)",
      "Codex",
      "Claude Opus (\"opus 4.6\")",
      "Anthropic",
      "OpenAI",
      "Slack",
      "Linear",
      "Jira",
      "cron",
      "git",
      "Nix",
      "YAML",
      "Markdown"
    ],
    "quotes": [
      {
        "text": "and they came up with apps uh which I call basically SSH with vibes",
        "at": "03:04",
        "url": "https://www.youtube.com/watch?v=KHudyx5wW3U&t=184s"
      },
      {
        "text": "you do not need graph uh in this case. All you need is events. You have no edges to maintain.",
        "at": "07:54",
        "url": "https://www.youtube.com/watch?v=KHudyx5wW3U&t=474s"
      },
      {
        "text": "the job of the kernel is actually to make bad actions impossible, not just unlikely.",
        "at": "16:48",
        "url": "https://www.youtube.com/watch?v=KHudyx5wW3U&t=1008s"
      },
      {
        "text": "I would definitely try to build before I buy just to know exactly what I need and you know the limitations of what exist.",
        "at": "19:05",
        "url": "https://www.youtube.com/watch?v=KHudyx5wW3U&t=1145s"
      }
    ],
    "words": 4259
  },
  "summary_url": "/#KHudyx5wW3U",
  "transcript": {
    "html": "/transcripts/KHudyx5wW3U.html",
    "txt": "/transcripts/KHudyx5wW3U.txt",
    "vtt": "/transcripts/KHudyx5wW3U.vtt"
  }
}