Homus
‹ All talks

Every Solo Agent Builder Eventually Reinvents a Worse Version of CI/CD

AI Engineer World's Fair 2026: Online Track · Video gốc

Solo builder sẽ tự dựng lại 5 thứ của CI/CD; demo 3 cách agent nói dối (voice drift, claim không nguồn, hook trùng) và gate chặn từng cách.

AgentsWorkflowDev Tools

1. Điều không ai cảnh báo khi bạn build agent một mình

Sumaiya mở đầu bằng một điều mà theo chị không ai nói trước cho bạn khi bạn bắt đầu tự build agent một mình. Bạn nghĩ mình đang build prompt. Bạn nghĩ mình đang build skill, hoặc build workflow. Nhưng nếu bạn build đủ lâu, nhất là khi làm một mình, bạn sẽ bắt đầu build một thứ hoàn toàn khác. Một thứ trông giống CI/CD một cách đáng ngờ, chỉ có điều là tệ hơn, vì bạn dựng nó từ con số không, mỗi lần một failure.

Slide tiêu đề Every Solo Agent Builder Eventually Reinvents a Worse Version of CI/CD, bên cạnh Sumaiya Shrabony
Slide tiêu đề, chữ "Worse Version" được tô đỏ. Câu phụ đề tóm gọn cả talk: agent demo kết thúc ở happy path, còn vận hành agent bắt đầu từ lúc happy path nói dối bạn. Bên dưới là phần giới thiệu diễn giả: Technical Program Manager tại University of Colorado Denver, tác giả một agent system open source 19 skill và newsletter Ground Truth.

Chị tự giới thiệu: chị là Sumaiya, và chị đang vận hành một agent system gồm mười chín skill chạy trên Claude Code. Các skill lo đủ việc: viết bài (writing), research, vault sync, analytics sync, hook, transcript, và nhiều thứ khác nữa.

Điều hữu ích nhất chị học được khi build hệ thống này không phải là cách viết prompt tốt hơn. Đó là nhận ra năm cơ chế kiểm soát (control) mà chị đang tự dựng lại một cách vụng về, và biết mình có thể làm gì thay vào đó. Cả talk xoay quanh năm thứ này.

2. Hệ thống đã dạy bài học: bảy handoff

Trước khi chỉ ra vấn đề, Sumaiya cho xem hệ thống đã dạy chị vấn đề đó. Đây là agent content system của chị, và nó là open source (link ở cuối trang). Hệ thống chạy hai tuần một lần, vào thứ Bảy. Nó đọc từ một knowledge vault, tạo một research brief, dựng content plan, sản xuất mười hai content piece, rồi chạy qua các lượt verifier, các reviewer gate, bước deduplication (loại trùng), và cuối cùng lưu output thành các file Markdown.

Slide A production workflow with seven handoffs, chuỗi Scheduler, Command, Research, Plan, Production Skill, Verifier, Reviewer, Output
"A production workflow with seven handoffs": tám bước nối nhau bằng bảy mũi tên, từ Scheduler, Command, Research, Plan, Production Skill, Verifier, Reviewer tới Output. Ba bước được đánh dấu đỏ kèm kiểu hỏng có thể xảy ra ở đó: contract break ở Production Skill, missed violation ở Verifier, false pass ở Reviewer. Dòng cuối slide: nội dung không phải trọng tâm, các handoff mới là trọng tâm.

Nhưng chị nhấn mạnh: với talk này, thứ quan trọng không phải là nội dung mà hệ thống viết ra. Thứ quan trọng là hệ thống có bảy handoff (điểm bàn giao giữa hai bước):

  1. Scheduler sang command.
  2. Command sang research.
  3. Research sang content plan.
  4. Content plan sang production skill.
  5. Production skill sang verifier.
  6. Verifier sang reviewer.
  7. Reviewer sang thư mục output.

Mỗi handoff là một chỗ mà hệ thống có thể nói dối bạn. Và nếu bạn build hệ thống một mình, sẽ không ai bắt được những lời nói dối đó ngoài chính bạn, mà thường là sau khi thiệt hại đã xảy ra rồi.

3. Năm thứ bạn sẽ tự phát minh lại

Đây là pattern Sumaiya muốn bạn để ý trong hệ thống của chính mình. Nếu bạn build agent độc lập, bạn sẽ dựng lại năm thứ sau, và thứ tự thường gần đúng như thế này.

Thứ nhất. Bạn đổi một prompt hoặc một skill, và có thứ gì đó ở phía sau (downstream) bị hỏng. Thế là bạn làm một cách để kiểm xem output có còn đúng hình dạng (shape) mong đợi không. Xin chúc mừng, bạn vừa phát minh lại regression testing.

Thứ hai. Bạn dựng một cron job hoặc một scheduled task. Một ngày nọ nó hỏng mà không báo gì (silently fails), và cả tuần sau bạn vẫn chưa nhận ra. Thế là bạn làm hệ thống cảnh báo (alert). Bạn vừa phát minh lại CI monitoring.

Thẻ 02 Scheduled Monitoring với các mục You notice, You build, Already exists as
Thẻ 02, "Scheduled Monitoring", dẫn tới CI Monitoring. Phần câu chuyện trên thẻ: bạn nhận ra lần chạy thứ Bảy chưa hề diễn ra, và phải tới thứ Ba mới biết vì newsletter trống trơn. Thứ bạn dựng: một heartbeat file, một alert nếu tới 9 giờ sáng chưa có artifact nào, một tin ping trên Slack. Thứ đã có sẵn từ lâu: CI build dashboard, alert cho nightly job, Healthchecks.io.

Thứ ba. Một skill đổi output schema của nó, và ba skill phía sau hỏng theo. Vì chuyện đó, bạn quyết định thêm bước validation ở ranh giới (boundary) giữa các skill. Bạn vừa phát minh lại contract testing.

Thẻ 03 Contract Testing với các mục You notice, You build, Already exists as
Thẻ 03, "Contract Testing". Trên thẻ, câu chuyện cụ thể là: bước research bắt đầu trả về một array thay vì một object, và ba bước plan, write, verify hỏng theo ba kiểu khác nhau. Thứ bạn dựng: schema validation ở boundary giữa mọi skill, có version. Thứ đã có sẵn: Pact, JSON Schema, Protobuf, "bài học xương máu của mọi team microservices".

Thứ tư. Một artifact trông như đã xong, nhưng không nên được ship. Thế là bạn thêm một checkpoint trước khi nó đi vào thư mục "ready". Bạn vừa phát minh lại staging environment.

Thứ năm. Có gì đó sai, nhưng bạn không tìm ra prompt nào, skill nào, hay handoff nào đã cho ra output tệ. Thế là bạn bắt đầu log mọi thứ. Bạn vừa phát minh lại audit trail.

Sự cố bạn gặp Bạn vừa dựng lại Sửa prompt/skill, downstream hỏng 1. Regression testing Cron job hỏng im lặng cả tuần 2. CI monitoring Đổi output schema, 3 skill sau hỏng 3. Contract testing Artifact trông xong nhưng không nên ship 4. Staging environment Không biết handoff nào cho output tệ 5. Audit trail
Năm lần "phát minh lại" theo đúng thứ tự Sumaiya kể: mỗi sự cố bên trái đẩy solo builder tới việc tự dựng một cơ chế mà phần mềm truyền thống đã có tên và công cụ chuẩn từ lâu.

4. Vì sao là "worse version", và failure nào mới nguy hiểm

Sumaiya giải thích chữ "worse version" trong tiêu đề. Lý do không phải vì agent là software build. Lý do là cuối cùng bạn cần đúng những bảo đảm vận hành (operational guarantee) y hệt như software. Thế nhưng agent system mặc định không cho bạn cái nào trong số đó, nên bạn tự dựng chúng một cách độc lập, thành phiên bản tệ hơn, mà thậm chí không nhận ra mình đang dựng.

Rồi chị đưa ra luận điểm trung tâm của talk: failure nguy hiểm trong một agent system không bao giờ là một output tệ. Output tệ rất dễ sửa. Bạn liếc qua là hiểu ngay đó là output tệ.

Slide The problem isn't bad output, một file LinkedIn post với năm dấu tích xanh và con dấu Ready to publish
"The problem isn't bad output": output tệ dễ bắt, failure nguy hiểm thì trông như đã sẵn sàng. Ở chế độ xem Reviewer, một file bài LinkedIn có đủ năm dấu tích xanh (đủ section, Markdown hợp lệ, khớp voice contract, có verification log, hook nguyên bản) và con dấu "Ready to publish". Dòng chữ nhỏ bên dưới: reviewer ký duyệt kiểu gì cũng được, con dấu không đọc file.

Failure nguy hiểm là một artifact bóng bẩy, nhìn lướt thì rất đẹp, nhưng sẽ không bao giờ qua được đúng những gate của bạn. Nó dùng sai voice pattern. Nó đưa ra một claim chưa được kiểm chứng. Nó lặp lại một góc nhìn (angle) cũ. Nó thiếu những section bắt buộc. Vậy mà nó vẫn được gắn nhãn "ready to publish". Đó là phiên bản agent của việc ship chỉ vì code đã compile, trong khi test chưa từng chạy.

Ba gate Voice contract, Verification contract, Dedup contract đều bật, con dấu Blocked và câu trích về shipping khi code compile
Khi bật cả ba gate (voice contract bắt voice drift, verification contract bắt thiếu source trail, dedup contract bắt hook tái chế), cùng artifact đó bị chặn ở cả ba chỗ. Mỗi gate là một boundary hệ thống bắt buộc phải qua trước khi artifact được ship; không có chúng, con dấu không bao giờ đổi ý. Bên dưới là ba cách hệ thống nói dối bạn: voice drift (sai pattern, đúng format), missing verification (claim tự tin, không nguồn), duplicate hook (nội dung mới, angle tái chế).

Đây là thứ chị sẽ demo: không phải happy path, mà là ba cách agent có thể nói dối bạn, và cái gate để bắt từng cách.

5. Happy path: thứ mọi agent demo đều cho bạn xem

Chị bắt đầu từ happy path, vì đó là thứ mọi agent demo đều cho bạn xem. Chị chạy một phiên bản nhỏ, an toàn về quyền riêng tư (privacy-safe), của content engine pipeline. Đây không phải toàn bộ repo, mà là một bản chưng cất (distilled) của bài toán production.

Màn hình demo The happy path với nút Run Happy Path Naive Mode và cửa sổ terminal agentic_content_cicd_demo.py
Màn hình demo "The happy path": đây là thứ mọi agent demo cho bạn xem, nó không sai, nhưng nó chưa đủ. Nút "Run Happy Path, Naive Mode" chạy script demo agentic_content_cicd_demo.py trong khung terminal bên dưới.

Pipeline rất đơn giản: tạo một content artifact, chạy các gate, rồi hoặc cho qua (allow) hoặc chặn (block) output.

Nhìn vào output. File Markdown có caption, pinned comment, visual brief, verification log, vault asset, production note, và một trạng thái "ready". Nếu chị chỉ demo tới đây, hệ thống trông như đã xong. Artifact trông chuyên nghiệp. Nội dung đọc ổn. Đó chính là lý do agent demo dễ gây hiểu lầm: chúng luôn chỉ cho bạn xem happy path.

Artifact Markdown của happy path với các mục Pinned comment và Visual brief standard
Một phần artifact của happy path: mục Pinned Comment (giới thiệu newsletter Ground Truth và một ghi chú kỹ thuật về row-level security trong DAX), rồi mục Visual Brief Standard (V1) với hook frame cho slide 1, reader outcome là một checklist 5 điểm trước khi deploy row-level security, layout 8 slide, source input, export spec PNG 1080x1080 và quality bar. Mọi thứ trông đầy đủ và chuyên nghiệp.

Nhưng chuyện gì xảy ra khi con đường không hề "happy", mà output vẫn trông như đã sẵn sàng?

6. Failure 1: voice drift

Failure đầu tiên là voice drift, giọng văn trôi đi. Nhìn vào nội dung: "Unlock the power of AI adoption. This game-changer will transform how teams operate in today's fast-paced enterprise landscape." Nếu bạn đã dành đủ thời gian trên LinkedIn, bạn đã thấy đúng câu này cả nghìn lần. Đó là thứ ngôn ngữ AI marketing chung chung. Nó không phải giọng của chị. Không phải giọng của bạn. Nó là giọng của chẳng ai cả.

Kịch bản voice_drift ở naive mode, caption chứa câu Unlock the power of AI adoption và các gate đều PASS
Kịch bản voice_drift ở naive mode. Phần caption được bôi đậm là câu "Unlock the power of AI adoption, this game changer will transform how teams operate in today's fast-paced enterprise landscape", chú thích ngay dưới: ngôn ngữ AI marketing chung chung, giọng của chẳng ai. Thế mà production_skill, reviewer ("naive reviewer trusted formatting") và output_save đều PASS, và artifact được lưu với trạng thái READY; vi phạm voice không bị phát hiện.

Vậy mà naive mode vẫn lưu nó. Lý do: artifact có đủ mọi section bắt buộc, có trạng thái "ready", và trông hoàn chỉnh.

Giờ hãy xem chuyện gì xảy ra khi chị thêm đúng một boundary. Guarded mode chặn nó ở voice contract. Pipeline dừng lại trước khi artifact này lọt vào thư mục publish-ready.

Kịch bản voice_drift ở guarded mode, voice_contract FAIL vì forbidden voice pattern, pipeline stopped
Cùng kịch bản, chạy với --mode guarded. production_skill vẫn PASS, nhưng voice_contract FAIL vì tìm thấy forbidden voice pattern: dấu gạch dài (em dash), "unlock the power", "game changer", "in today's fast-paced". Pipeline dừng trước output publish-ready; gate chặn artifact ở voice contract, và failure bị bắt TRƯỚC khi tới thư mục output.

Và đây là điểm mấu chốt: gate không làm nội dung tốt hơn. Nó chỉ không cho thứ sai đi tiếp.

Nếu bạn đang build một content system, đây là gate đầu tiên chị khuyên bạn nên có. Nếu bạn build một loại agent system khác, câu hỏi tương đương là: trong domain của bạn, "sai giọng" trông như thế nào?

7. Failure 2: missing verification

Failure thứ hai là thiếu kiểm chứng (missing verification). Bài viết này nói: "Teams with a clear semantic ownership model reduce AI rollout rework by thirty-seven percent." Ba mươi bảy phần trăm. Đây là một claim rất cụ thể. Con số đó từ đâu ra?

Mở verification log ra xem: trống trơn. Văn thì dùng được. Con số nghe hợp lý. Chính điều đó làm failure này nguy hiểm: một claim nghe rất tự tin, không có bất kỳ kiểm chứng hay nguồn tham chiếu nào, và naive mode vẫn lưu nó.

Kịch bản missing_verification ở naive mode, verification log trống, final status saved as READY
Kịch bản missing_verification ở naive mode: caption chứa claim "reduce AI rollout rework by 37%", mục Verification Log ghi "(empty)" kèm chú thích "claim cụ thể, không có source trail". Các gate vẫn PASS, và dòng được bôi đậm ở cuối là trạng thái cuối: artifact được lưu thành output READY, tức một claim chưa kiểm chứng đã được ship.

Guarded mode chặn nó. Nội dung mang claim không được ship nếu không có verification trail. "Tin tôi đi" không phải là một verifier.

Kịch bản missing_verification ở guarded mode, verification_contract FAIL, pipeline stopped
Guarded mode: production_skill PASS, voice_contract PASS (không có forbidden voice pattern), nhưng verification_contract FAIL vì claim cụ thể không có verification log. Pipeline dừng trước output publish-ready, kèm hai dòng kết luận: "Trust me" không phải verifier, và nội dung mang claim không thể ship nếu thiếu source trail.

Nếu agent system của bạn đưa ra claim về data, về user, về bất cứ điều gì, mà bạn không có một chuỗi validation, thì bạn đang ship những khẳng định chưa kiểm chứng trong một lớp vỏ trông rất chuyên nghiệp. Đó không phải là vấn đề của agent. Đó là vấn đề uy tín (credibility).

8. Failure 3: duplicate hook và audit trail

Failure thứ ba là duplicate hook, câu mở bài bị trùng. Sumaiya nói đây là failure chị thích nhất, vì nó thực tế nhất với solo builder.

Output là mới. Nội dung về mặt kỹ thuật vẫn mạch lạc. Nhưng cái hook, tức góc mở bài, gần như trùng với một thứ đã có trong lịch sử vault của bạn: "AI adoption fails when the dashboard looks right but the workflow is wrong." Angle đó đã được dùng rồi.

Kịch bản duplicate_hook ở naive mode, hook trùng với mục 0 trong vault history, final status READY
Kịch bản duplicate_hook ở naive mode: hook mới là "AI adoption fails when the dashboard looks right but the workflow is wrong", trong khi Vault History đã có mục [0] bắt đầu y hệt và mục [1] "The AI tool was never the hard part...". Chú thích: hook này đã tồn tại trong vault history. Các gate vẫn PASS và artifact được lưu thành READY, angle trùng bị tái chế.

Nếu hệ thống của bạn cứ tạo ra những bản gần trùng nhau, hệ thống trông sẽ "tự động" một cách lộ liễu, kể cả khi từng bài riêng lẻ về kỹ thuật vẫn ổn. Khán giả của bạn sẽ nhận ra trước cả bạn.

Guarded mode chặn nó ở data contract. Và hãy để ý: nó còn ghi lại một audit record.

Kịch bản duplicate_hook ở guarded mode cộng audit, dedup_contract FAIL và audit record được ghi
Chế độ guarded + audit: production_skill, voice_contract và verify_contract đều PASS, nhưng dedup_contract FAIL vì hook trùng với vault history. Pipeline dừng, rồi một audit record được ghi gồm thời điểm (ts), gate (dedup_contract), status FAIL và lý do (hook overlaps with vault history). Dòng cuối: audit trail đã được ghi lại; khi một scheduled run hỏng lúc 2 giờ sáng, chỉ riêng artifact cuối cùng là không đủ.

Audit record đó rất nhàm chán. Nhưng khi một scheduled run hỏng lúc hai giờ sáng, artifact cuối cùng thôi là không đủ. Bạn cần biết gate nào đã fail, contract nào bị vi phạm, và vì sao. Đó là audit trail, thứ "phát minh lại" thứ năm. Và đó cũng là thứ mà phần lớn solo builder thêm vào sau cùng, khi thiệt hại đã xảy ra rồi.

9. Pattern: vài cái gate nhàm chán

Vậy pattern ở đây là gì? Bạn không cần một platform. Bạn không cần một framework. Bạn không cần chờ hệ sinh thái (ecosystem) bắt kịp. Thứ bạn cần là vài cái gate nhàm chán:

  • Pre-save output contract. Artifact có đúng hình dạng bắt buộc trước khi được lưu không?
  • Voice contract, hay domain contract. Output có khớp với những quy tắc mà hệ thống của bạn được thiết kế quanh đó không?
  • Verification contract. Nếu output đưa ra claim, những claim đó có truy được về một nguồn không?
  • Deduplication check. Đây có thật sự là cái mới, hay hệ thống đang tự tái chế chính nó?
  • Audit trail. Khi có gì đó hỏng, bạn có dựng lại được chuyện gì đã xảy ra mà không phải chạy lại toàn bộ pipeline không?
Năm thẻ Output Contract, Voice Contract, Verification Contract, Dedup Check, Audit Trail và câu trích về deploy và ship
"You don't need a platform. You need boundaries.": năm thẻ Output Contract, Voice Contract, Verification Contract, Dedup Check và Audit Trail, mỗi thẻ là một câu hỏi phải trả lời được trước khi artifact đi tiếp. Câu trích bên dưới so sánh bài học của software (không deploy chỉ vì code tồn tại) với bài học agent system cần học (không ship chỉ vì artifact trông hoàn chỉnh).

Trong software, chúng ta đã học được rằng không deploy chỉ vì code tồn tại. Trong agent system, chúng ta cần học không ship chỉ vì artifact trông hoàn chỉnh.

Vấn đề không nằm ở chỗ agent của bạn sẽ fail. Agent của bạn chắc chắn sẽ fail. Vấn đề là khi hệ thống của bạn định dạng (format) failure đó thật đẹp rồi ship nó xuống phía sau.

10. Mang về: map handoff, chọn chỗ đắt nhất, bắt gate phải nói "không"

Sumaiya kết bằng ba điều chị muốn người nghe mang về.

Slide Your move: Before you add another agent, add one boundary, với ba takeaway
"Before you add another agent, add one boundary", với ba takeaway: Map your handoffs, Pick the most expensive handoff, Make it say no.

Một, map các handoff của bạn, từ input tới output cuối cùng. Mỗi mũi tên giữa hai bước đều có thể là chỗ output bị làm hỏng. Bạn không cần sửa hết. Bạn chỉ cần biết chúng nằm ở đâu.

Hai, chọn handoff đắt nhất. Không phải cái phức tạp nhất, mà là cái đắt nhất: chỗ mà data tệ có thể khiến bạn mất nhiều nhất. Đó có thể là một claim sai được publish công khai, một schema hỏng đổ dây chuyền xuống ba skill phía sau, hay một bài trùng lặp làm xói mòn lòng tin của khán giả. Đó là chỗ đặt gate đầu tiên của bạn.

Ba, bắt nó phải nói "không". Một gate chỉ log warning thì không phải là gate. Nó chỉ là một lời gợi ý. Gate phải chặn được artifact, không cho nó đi tiếp. Đó là khác biệt giữa một demo ấn tượng và một hệ thống vận hành được (operable system).

Gate chỉ log warning: một lời gợi ý Artifact Gate: "warning" Ready folder Gate biết nói "không": hệ thống vận hành được Artifact Gate: BLOCK Ready folder
Takeaway thứ ba: một gate chỉ ghi warning vẫn để artifact đi vào thư mục ready; một gate thật thì dừng pipeline ngay tại boundary, và artifact không bao giờ tới được đó.

Câu cuối cùng chị để lại: trước khi bạn thêm một agent nữa, hãy thêm một boundary. Và chị cảm ơn mọi người đã theo dõi.

Nguồn và link