{
  "source_file": "0930",
  "source_platform": "Ghost",
  "author": "Louis-François Bouchard / What's AI",
  "title_listed": "How I Automated 90% of My Content Workflow With AI Agents",
  "keywords": "",
  "domain": "大模型算法",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://www.louisbouchard.ai/ai-agent-content-pipeline/",
  "publish_date": "2026-07",
  "corpus_stage": "",
  "notes": "",
  "id": "d5d425a0df85",
  "collected_at": "2026-10-02T12:36:30",
  "title": "How I Automated 90% of My Content Workflow With AI Agents",
  "body_markdown": "The short version\nMy content pipeline uses a research agent called Nova, a LangGraph writing workflow called Brown, parallel visual workers, an expand-and-narrow title loop, and a French translation skill.\nPlain Markdown files connect the stages. The agents handle about 90% of the repetitive work, while I retain the topic, research direction, article structure, personal insight, and final edit.\nAutomate research, drafting, media production, packaging, and translation, but keep topic selection, direction, taste, and final validation human.\nUse an exploratory agent for open-ended research and a deterministic, checkpointed workflow for writing where repeatability matters more than autonomy.\nSeparate generation from evaluation, keep every stage inspectable through files and persisted state, and stop the pipeline when upstream evidence fails.\nI can now research, write, and prepare a full YouTube release in about five hours of my own work. The same job used to consume two or three full days. I did not get there by asking one model for a script and publishing whatever came back. Paul Iusztin, the Towards AI team, and I built a pipeline that gives specialized agents the repetitive translation work while keeping the thinking in human hands.\nIf you want to build or inspect the system, start here:\nTake the Agentic AI Engineering Course\nExplore the open-source course repository\nUse my AI Engineering Cheatsheets\nThis article explains the full architecture: how Nova researches, how Brown writes without turning everything into generic AI prose, how parallel workers produce branded visuals, how an expand-and-narrow loop generates titles, and why the most important part of the system is the 10% I refuse to automate.\nPrefer to see the pipeline and diagrams in motion? Watch the complete walkthrough here, then use this article as the technical reference.\nThe goal is not to remove the human\nContent production became the largest bottleneck in my week. A 15-minute script could take two or three days once I counted research, outlining, drafting, editing, translation, diagrams, titles, and thumbnails. By the time I published it, I had less time and less energy to build the next thing worth discussing.\nThe obvious shortcut is usually worse: enter a topic in ChatGPT, copy, paste, publish. When you remove your own thinking from the process, AI does not help. It scales a weak input faster. The result sounds like dozens of pieces the model has already seen because no original direction survives the process.\nSo I use a different objective:\nAutomate the translation from thought to artifacts, not the thinking that makes those artifacts useful.\nI still choose the topic, provide the research direction, dump what I already know, shape the argument, insert first-hand experience, and approve the final result. The system handles the expensive repetition between those decisions.\nWhat the old workflow cost\nMy previous process usually began with an idea from a paper, a comment, a conversation, or something I could not stop thinking about. I would open far too many tabs, take notes in a document, watch a few current explanations to understand the shape of the topic, and start writing while the research was still incomplete.\nThe first draft was too long. The second was cleaner but often boring. I would send it to someone, wait for feedback, do another edit, record, prepare the visuals, and then stare at an empty YouTube title field on Friday night. I am a researcher and builder, not an editor or designer, so every production task took attention away from the work I actually wanted to do.\nThe agentic workflow changes the allocation of that time. What used to require two or three days now takes roughly five hours of my direct work for a typical release. That number is not a benchmark for every team. It is the result of automating a specific workflow I understand well, after building and maintaining the underlying system.\nThe architecture: five components and a memory layer\nThe system has five main components:\nNova, the deep research agent.\nBrown, the writing workflow.\nA media system for diagrams and image style transfer.\nA title and SEO generator.\nA separate French translation skill.\nThe contract between them is the filesystem. Each stage reads and writes plain Markdown files in a working directory. Its internal execution state lives in a database, but the important artifacts remain human-readable.\nThat choice looks almost too simple, and that is why it works. If the research is weak, I can edit\nresearch.md\n. If the structure is wrong, I can correct\narticle_guideline.md\n. If the writer fails, I can resume from a checkpoint. I do not need to restart a long, expensive chain because one probabilistic step made a poor decision.\nNova and Brown are exposed as MCP servers. The visual, packaging, and translation stages are skills invoked from a coding harness such as Claude Code or Cursor. This split is intentional. A server provides reusable tools and persisted state. A skill carries a repeatable operating procedure with the files, prompts, examples, and validation rules it needs.\nNova: an agent for exploratory research\nThe first important architecture decision was to make research an agent and writing a workflow. The two problems look similar from far away, but they reward opposite behavior.\nResearch is exploratory. A useful system should change its next query after it discovers a gap, follow promising evidence, incorporate user feedback, and decide what deserves a deeper scrape. A ReAct-style agent loop is appropriate because the path cannot be completely specified in advance.\nWriting rewards predictability. It needs a known structure, tight style constraints, controlled sources, and repeatable review. More autonomy creates more opportunities for the model to wander. That is why Brown is not an open-ended agent.\nNova begins with two inputs: a rough\noutline.md\nand a set of golden sources I already trust. My outline can be messy. It contains bullets, reactions, phrases I want to preserve, URLs, and explicit gaps marked for research. Nova turns that seed into a dense, cited research artifact.\nThe process works like this:\nNova compares the outline with the golden sources and performs a gap analysis.\nIt generates queries for the missing areas.\nThree fixed research rounds fan out concurrent search calls.\nNew sources are scored for trustworthiness, authority, relevance, and quality.\nOnly the strongest sources receive a full scrape. The rest stay as summaries when that is enough.\nSource-specific tools process web pages, repositories, local files, and YouTube material.\nEverything useful is compiled into\nresearch.md\nwith citations.\nThree rounds are a deliberate budget. More research is not automatically better research. Fixed limits make cost and latency predictable while still giving the agent enough room to notice and fill important gaps.\nNova also has a hard failure policy. If an operation fails completely, for example if zero of seven scrapes succeed, the agent stops and asks for guidance. It does not silently pass an empty result to the writer. A quiet failure near the start of a long pipeline can become a confident hallucination hours later, after the system has spent both tokens and human review time. Stopping early is a feature.\nThe human specification between research and writing\nI do not send\nresearch.md\ndirectly to the writer. I first expand the rough outline into an article guideline. This is one of the highest-value human steps in the entire system.\nThe guideline defines the sections, the hook, a word budget for each part, the key definitions, the transitions, the examples, and every place where the article needs a diagram. I deliberately over-specify it. Strong structure reduces the space in which an LLM can fill gaps with vague language or unsupported claims.\nThis usually takes me about an hour with help from the coding harness. I dictate the argument and make the decisions. The model expands the mechanical details. Along with topic choice and the final edit, this guideline is part of the 10% that keeps the work mine.\nBrown: a workflow for controlled writing\nBrown is a LangGraph workflow with a SQLite checkpointer. If it fails after producing a draft, it resumes from persisted state instead of recreating everything. Its job is not to discover the argument. Its job is to translate an approved argument and approved research into clear prose.\nThe voice system is split into six Markdown profiles:\nStructure:\nsentence shape, paragraph length, headings, and the physical rhythm of the page.\nMechanics:\ngrammar, active voice, point of view, and punctuation rules.\nTerminology:\npreferred terms plus banned generic expressions.\nTonality:\nthe emotional register and acceptable level of formality.\nArticle:\nthe requirements of the output format.\nCharacter:\nmy background, mission, preferences, and way of reacting to information.\nThe character profile takes the most work because it is what separates my output from Paul’s or from a generic ghostwriter. The other major ingredient is few-shot prompting. Two or three strong pieces that actually sound right teach rhythm and editorial judgment better than another ten pages of abstract rules.\nBrown compiles the profiles, examples, guideline, and research into a large system prompt. The first writer call uses enough temperature to allow useful variation. It must still obey two hard rules: follow the approved guideline, and ground every factual claim in\nresearch.md\n.\nSeparate contexts for generation and judgment\nAfter the draft, Brown enters an evaluator-optimizer loop. A reviewer with a fresh context compares the article against the guideline, research, and profiles. It returns structured violations: where the issue appears, which rule was broken, and what must change. A separate editor applies those changes.\nThe reviewer and editor do not share the writer’s context. This matters. When the same model reviews the answer it just produced, it inherits the assumptions and biases that created the mistake. Fresh context acts like fresh eyes. The same principle appears in Nova’s source filter and in the title validator later in the pipeline.\nThe loop also runs for a fixed number of iterations rather than stopping at a model-generated quality score. We tested score-based stopping and found it noisy. Writing quality is multi-dimensional, and compressing roughly a hundred rules into one scalar encourages the model to declare victory early. Three fixed passes give us predictable cost, predictable latency, and better results.\nAfter those passes, I still read the whole article. I add personal moments only I know, correct anything that feels off, and strengthen hooks that the model made too safe. Automation shortens this final pass. It does not remove my responsibility for it.\nParallel visual workers and a consistent style\nEvery diagram marker in the guideline triggers an orchestrator-worker pattern. The orchestrator reads the relevant section, identifies the kind of explanation required, and launches a specialized Mermaid worker for each visual slot. Those workers can run in parallel because the diagrams are independent.\nRaw Mermaid is excellent for predictable structure but rarely looks ready for publication. A separate style-transfer skill sends each result through Gemini with a branding file, a target reference, positive examples, and negative examples. The negative examples matter because they show the model outputs that are close but still unacceptable. In our tests, adding those boundaries improved the first-pass hit rate much more than positive examples alone.\nThis stage follows the same design rule as the rest of the pipeline: the orchestration is generic, but quality comes from explicit contracts. Brand colors, typography, spacing, examples, output sizes, and rejection criteria all live in files a human can inspect and improve.\nExpanding and narrowing titles instead of trusting one guess\nPackaging used to consume entire evenings. The final article or script would be ready, but I still had to find a title that was accurate, interesting, and visible on a small screen.\nThe title system replaces one guess with an expand-and-narrow loop. Each round creates nine complete packages from intentionally different angles, such as personal transformation, curiosity, proof of work, a bold claim, or a contrarian observation. A package can include the YouTube title, SEO tags, newsletter title and subtitle, and the release post.\nA separate validator scores the candidates across six rubric-anchored dimensions. Qualitative judgment comes from the model. Quantitative constraints, such as mobile title length, use deterministic penalties. The strongest candidates seed the next round, and the process repeats three times.\nThe validator has its own context window because a generator should not grade its favorite angle. At the end, I keep the top three rather than pretending the model can predict an audience perfectly. Real behavior settles the close call through A/B testing.\nThe same rule applies to this website. The canonical article title remains stable for SEO, accessibility, links, and structured data. A first-party experiment can test a different title only on article cards, where it measures which honest framing earns more qualified reads without changing the page’s identity for search engines.\nTranslation is its own production stage\nMy French channel uses the same core ideas, but translation is not a final string-replacement call. The French skill has its own character profile, terminology rules, examples, and structural checks. It translates the article and visible media copy while preserving links, code, evidence, and layout.\nTreating translation as a first-class stage avoids two common failures: an English article that ships while its French mirror remains stale, and a technically correct translation that no longer sounds like its author. Both languages should be reviewed and published as one unit.\nThe 10% I keep\nI still choose the topic. I still look at the current work that already exists. I still write the brain dump and decide what deserves research. I still shape the guideline, approve the evidence, edit the result, record in my own voice when a release needs a video, and maintain the code that runs the system.\nThat is not a weakness in the automation. It is the point.\nTaste, direction, personality, and validation are not translation problems. Agents can accelerate how an idea becomes a set of artifacts, but they cannot decide which ideas deserve your name. The pipeline is a force multiplier on the thought you provide. If the seed is empty, it produces polished emptiness.\nThis article itself went through the same broad process: a finished script supplied the argument, Gemini reviewed the full source video to locate the technical diagrams, the screenshots were extracted and checked to exclude my face, and the result was adapted into English and French for the site. The automation saved time because the intent and the source material already existed.\nIf you want to build the complete stack, including Nova, Brown, FastMCP, LangGraph, the visual workflow, evaluation, and deployment,\nthe Agentic AI Engineering Course\nteaches it through a full portfolio project. You can also start directly with the\nopen-source repository\nand keep the\nAI Engineering Cheatsheets\nbeside you while deciding which parts of your own workflow should be agents, workflows, or deterministic code.\nThe useful question is not, “Can an agent automate this?” It is, “Which part of this work still requires my judgment?” Protect that part first. Then automate everything around it that keeps you from doing more of it.\nFAQ\nWhat does the AI agent content pipeline automate?\nIt automates deep research, first-draft writing, review passes, diagram generation and styling, title and SEO candidate generation, packaging, and French translation. Topic choice, direction, personal experience, final editing, and validation remain human.\nWhy is research an agent but writing a workflow?\nResearch is exploratory and benefits from changing direction as new evidence appears. Writing needs predictable stages, strict style constraints, checkpoints, and a repeatable review loop, so a deterministic workflow is the better fit.\nHow does the pipeline reduce hallucinations and silent failures?\nEvery fact must come from the research file, sources pass a quality filter before full scraping, separate reviewers receive fresh context, and a total upstream failure stops the pipeline for human guidance instead of passing bad data downstream.\nHow does the writing system avoid generic AI prose?\nIt compiles six focused voice profiles, strong examples, the article guideline, and the research into one prompt. A separate reviewer identifies concrete violations, then an editor fixes them over a fixed number of iterations.\nWhy use plain Markdown files between stages?\nFiles create a simple, inspectable contract. If a stage fails or produces something weak, a human can open the artifact, correct it, and restart only the downstream work instead of running the entire pipeline again.\nWhat should remain human in an automated content workflow?\nKeep the parts that require taste and responsibility: choosing the topic, deciding what is worth saying, supplying first-hand context, shaping the structure, checking the evidence, and making the final publishing decision.",
  "metadata": {
    "title": "How I Automated 90% of My Content Workflow With AI Agents",
    "description": "A look inside the AI agent pipeline I use to research, write, illustrate, package, translate, and publish content while keeping the critical 10% human.",
    "keywords": null,
    "author": "Louis-François Bouchard",
    "og:site_name": "Louis-François Bouchard, aka What's AI",
    "og:locale": "en_US",
    "og:locale:alternate": "fr_CA",
    "og:type": "article",
    "og:title": "How I Automated 90% of My Content Workflow With AI Agents",
    "og:description": "A look inside the AI agent pipeline I use to research, write, illustrate, package, translate, and publish content while keeping the critical 10% human.",
    "og:url": "https://www.louisbouchard.ai/ai-agent-content-pipeline/",
    "og:image": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/agentic-content-pipeline-architecture.webp",
    "og:image:secure_url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/agentic-content-pipeline-architecture.webp",
    "og:image:alt": "Architecture of an AI agent content pipeline for research, writing, media, SEO, and translation",
    "twitter:card": "summary_large_image",
    "twitter:site": "@Whats_AI",
    "twitter:creator": "@Whats_AI",
    "twitter:title": "How I Automated 90% of My Content Workflow With AI Agents",
    "twitter:description": "A look inside the AI agent pipeline I use to research, write, illustrate, package, translate, and publish content while keeping the critical 10% human.",
    "twitter:image": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/agentic-content-pipeline-architecture.webp",
    "twitter:image:alt": "Architecture of an AI agent content pipeline for research, writing, media, SEO, and translation",
    "article:published_time": "2026-07-28T20:53:50.911Z",
    "article:modified_time": "2026-08-03T16:15:55.000Z",
    "article:author": "Louis-François Bouchard"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [],
  "images": [
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/agentic-content-pipeline-overview.webp",
      "bytes": 24346,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-c8716c90f0b90084ea16.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/agentic-content-pipeline-overview.webp",
      "alt": "A human seed flows through deep research, writing, image styling, title and SEO generation, HTML export, and publication",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/agentic-content-pipeline-architecture.webp",
      "bytes": 93884,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-4c5e0fff39ec0f32b0aa.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/agentic-content-pipeline-architecture.webp",
      "alt": "Full architecture showing the memory layer, Nova research agent, Brown writing workflow, media styling, title and SEO loop, and French translation",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/nova-research-architecture.webp",
      "bytes": 43486,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-a51280043814bc8b5055.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/nova-research-architecture.webp",
      "alt": "Nova research architecture processing web pages, YouTube sources, local files, and GitHub repositories before running a three-round research loop and quality filter",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/nova-three-round-research-loop.webp",
      "bytes": 29636,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-2d08d34324eb5e708d89.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/nova-three-round-research-loop.webp",
      "alt": "Nova's internal loop uses gap analysis, query generation, source ingestion, and two-stage filtering over three total rounds",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/brown-evaluator-optimizer-loop.webp",
      "bytes": 36320,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-db8cf942ff249ac0b134.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/brown-evaluator-optimizer-loop.webp",
      "alt": "Brown writing workflow with user inputs, a writer, a separate reviewer, and an evaluator-optimizer feedback loop",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/modular-prompts-and-orchestrator-workers.webp",
      "bytes": 53096,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-dfedd3c39f068c18df44.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/modular-prompts-and-orchestrator-workers.webp",
      "alt": "Six modular writing profiles and an orchestrator-worker pattern that generates media items before the article writer completes the draft",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/title-seo-expand-narrow-loop.webp",
      "bytes": 69842,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-f7e5f0995da096289236.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/title-seo-expand-narrow-loop.webp",
      "alt": "Expand-and-narrow title system generating nine packages, validating them across six dimensions, and using the top three to seed the next round",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/youtube-title-ab-test-results.webp",
      "bytes": 53028,
      "reused": false,
      "local_path": "attachments/d5d425a0df85/images/body-13fe5339cd5f53029dbd.webp",
      "src": "https://www.louisbouchard.ai/media/posts/ai-agent-content-pipeline/youtube-title-ab-test-results.webp",
      "alt": "A YouTube title A/B test report in which the first candidate receives 50 percent of watch time share, ahead of alternatives at 31 and 19 percent",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [
    {
      "url": "https://www.youtube.com/watch?v=psIh5S1KEMA",
      "src": "https://www.youtube-nocookie.com/embed/psIh5S1KEMA",
      "status": "ok",
      "kind": "single_video",
      "local_path": "attachments/d5d425a0df85/videos/repair-psIh5S1KEMA.mp4",
      "bytes": 197200328,
      "valid": true,
      "height": 1080,
      "width": 1920,
      "duration": "1769.281000",
      "reused": true,
      "reused_from": "xinxing-zimeiti-corpus/attachments/a6bdfd7b0a18/videos/psIh5S1KEMA.mp4"
    }
  ],
  "links": [
    {
      "href": "https://academy.towardsai.net/courses/agent-engineering?ref=1f9b29",
      "label": "Take the Agentic AI Engineering Course",
      "type": "a"
    },
    {
      "href": "https://github.com/towardsai/agentic-ai-engineering-course",
      "label": "Explore the open-source course repository",
      "type": "a"
    },
    {
      "href": "https://github.com/louisfb01/ai-engineering-cheatsheets",
      "label": "Use my AI Engineering Cheatsheets",
      "type": "a"
    },
    {
      "href": "https://www.youtube-nocookie.com/embed/psIh5S1KEMA",
      "label": "",
      "type": "iframe"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:47:49Z",
  "source_url": "https://www.louisbouchard.ai/ai-agent-content-pipeline/",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 17472,
  "expected_body_images": 8,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/d5d425a0df85/pages/source.html",
  "local_html": "attachments/d5d425a0df85/pages/article.html",
  "body_base_path": "attachments/d5d425a0df85/pages/",
  "body_markdown_path": "attachments/d5d425a0df85/pages/article.md"
}