Title: Agentic Engineering in Python: From Vibes to Evidence – Real Python
Open Graph Title: Agentic Engineering in Python: From Vibes to Evidence – Real Python
Description: Move from vibe coding to agentic engineering in Python, using tests, types, and code review to prove an AI agent's changes are safe to keep.
Open Graph Description: Move from vibe coding to agentic engineering in Python, using tests, types, and code review to prove an AI agent's changes are safe to keep.
Mail addresses
?subject=Python article for you&body=Agentic Engineering in Python: From Vibes to Evidence on Real Python
https://realpython.com/agentic-engineering/
Opengraph URL: https://realpython.com/agentic-engineering/
X: @realpython
Domain: realpython.com
{
"@context": "http://schema.org",
"@type": "Article",
"headline": "Agentic Engineering in Python: From Vibes to Evidence",
"image": {
"@type": "ImageObject",
"url": "https://files.realpython.com/media/Agentic-Engineering-in-Python-From-Vibe-Coding-to-Production-Ready-Code_Watermarked.c5a6dd202acb.jpg",
"width": 1920,
"height": 1080
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://realpython.com/agentic-engineering/",
"lastReviewed": "2026-09-22",
"author": {
"@type": "Person",
"name": "Ben Batman",
"image": "https://realpython.com/cdn-cgi/image/width=1920,height=1920,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/real-python-logo-square.28474fda9228.png",
"url": "https://realpython.com/team/bbatman/",
"affiliation": {
"@type": "Organization",
"@id": "https://realpython.com/#organization",
"name": "Real Python",
"url": "https://realpython.com",
"logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
}
},
"reviewedBy": [
{
"@type": "Person",
"name": "Aldren Santos",
"image": "https://realpython.com/cdn-cgi/image/width=500,height=500,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/Aldren_Santos_Real_Python.6b0861d8b841.png",
"url": "https://realpython.com/team/asantos/",
"affiliation": {
"@type": "Organization",
"@id": "https://realpython.com/#organization",
"name": "Real Python",
"url": "https://realpython.com",
"logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
}
},
{
"@type": "Person",
"name": "Brenda Weleschuk",
"image": "https://realpython.com/cdn-cgi/image/width=320,height=320,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/IMG_3324_1.50b309355fc1.jpg",
"url": "https://realpython.com/team/bweleschuk/",
"affiliation": {
"@type": "Organization",
"@id": "https://realpython.com/#organization",
"name": "Real Python",
"url": "https://realpython.com",
"logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
}
},
{
"@type": "Person",
"name": "Bartosz Zaczy\u0144ski",
"image": "https://realpython.com/cdn-cgi/image/width=1694,height=1694,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/coders_lab_2109368.259b1599fbee.jpg",
"url": "https://realpython.com/team/bzaczynski/",
"affiliation": {
"@type": "Organization",
"@id": "https://realpython.com/#organization",
"name": "Real Python",
"url": "https://realpython.com",
"logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
}
},
{
"@type": "Person",
"name": "Martin Breuss",
"image": "https://realpython.com/cdn-cgi/image/width=456,height=456,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/martin_breuss_python_square.efb2b07faf9f.jpg",
"url": "https://realpython.com/team/mbreuss/",
"affiliation": {
"@type": "Organization",
"@id": "https://realpython.com/#organization",
"name": "Real Python",
"url": "https://realpython.com",
"logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
}
}
]
},
"datePublished": "2026-09-14T14:00:00+00:00",
"dateModified": "2026-09-22T17:58:32.444684+00:00",
"publisher": {
"@type": "Organization",
"@id": "https://realpython.com/#organization",
"name": "Real Python",
"url": "https://realpython.com",
"logo": {
"@type": "ImageObject",
"url": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png",
"width": 512,
"height": 512
},
"description": "Real Python is a leading provider of online Python education and one of the largest language-specific online communities for software developers. It publishes high-quality learning resources, such as tutorials, books, and courses to an audience of millions of developers, data scientists, and machine learning engineers each month.",
"slogan": "Become a Python Expert",
"email": "info@realpython.com",
"sameAs": [
"https://github.com/realpython",
"https://www.youtube.com/realpython",
"https://twitter.com/realpython",
"https://x.com/realpython",
"https://www.linkedin.com/company/realpython-com/",
"https://www.facebook.com/learnrealpython",
"https://www.instagram.com/realpython",
"https://www.tiktok.com/@realpython.com"
]
},
"author": {
"@type": "Person",
"name": "Ben Batman",
"image": "https://realpython.com/cdn-cgi/image/width=1920,height=1920,fit=crop,gravity=auto,format=auto/https://files.realpython.com/media/real-python-logo-square.28474fda9228.png",
"url": "https://realpython.com/team/bbatman/",
"affiliation": {
"@type": "Organization",
"@id": "https://realpython.com/#organization",
"name": "Real Python",
"url": "https://realpython.com",
"logo": "https://realpython.com/static/real-python-logo-square-512.157ae6bf64ed.png"
}
},
"description": "Move from vibe coding to agentic engineering in Python, using tests, types, and code review to prove an AI agent's changes are safe to keep.",
"hasPart": {
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is agentic engineering?",
"acceptedAnswer": {
"@type": "Answer",
"text": "\u003cp\u003eAgentic engineering is a disciplined way of delegating bounded coding tasks to \u003ca href=\"/ref/ai-coding-glossary/agent/\" class=\"ref-link\"\u003eAI agents\u003c/a\u003e while you keep control over intent, constraints, review, and release decisions. The agent handles execution inside clear boundaries, but you decide whether the resulting diff has enough evidence to belong in your codebase.\u003c/p\u003e"
}
},
{
"@type": "Question",
"name": "What\u2019s the difference between vibe coding and agentic engineering?",
"acceptedAnswer": {
"@type": "Answer",
"text": "\u003cp\u003eWith \u003ca href=\"/ref/ai-coding-glossary/vibe-coding/\" class=\"ref-link\"\u003evibe coding\u003c/a\u003e, you steer toward a working result without closely reviewing the generated code, an approach that suits prototypes and personal scripts. Agentic engineering delegates similar work to an agent but requires tests, types, and review evidence before you accept the change, so it fits shared, production-bound projects.\u003c/p\u003e"
}
},
{
"@type": "Question",
"name": "How do you review code written by an AI agent?",
"acceptedAnswer": {
"@type": "Answer",
"text": "\u003cp\u003eReview at meaningful checkpoints rather than after every small agent action, and then apply the RECAP method once the agent produces a candidate diff. RECAP prompts you to check the code\u0026rsquo;s role, edges, contracts, assumptions, and proof, so you accept a patch because of its behavior and evidence rather than because it looks right.\u003c/p\u003e"
}
},
{
"@type": "Question",
"name": "What is the Engineering Evidence Ladder?",
"acceptedAnswer": {
"@type": "Answer",
"text": "\u003cp\u003eThe Engineering Evidence Ladder is an eight-level scale that names the evidence you\u0026rsquo;ve gathered for a piece of code, from a raw prompted block at the bottom to fully integrated code at the top. Each step upward adds explicit evidence such as understanding, tests, type checks, and project standards, so a single successful run doesn\u0026rsquo;t carry too much weight.\u003c/p\u003e"
}
},
{
"@type": "Question",
"name": "When should you use vibe coding?",
"acceptedAnswer": {
"@type": "Answer",
"text": "\u003cp\u003eVibe coding works well when you want to explore a new idea, test whether something is possible, or build a low-stakes prototype. It gets risky for code you plan to keep, since it usually asks only whether you can get a plausible result quickly rather than whether the code is correct and maintainable.\u003c/p\u003e"
}
}
]
}
}
| author | Real Python |
| theme-color | #18354c |
| color-scheme | light dark |
| twitter:card | summary_large_image |
| twitter:image | https://files.realpython.com/media/Agentic-Engineering-in-Python-From-Vibe-Coding-to-Production-Ready-Code_Watermarked.c5a6dd202acb.jpg |
| og:image | https://files.realpython.com/media/Agentic-Engineering-in-Python-From-Vibe-Coding-to-Production-Ready-Code_Watermarked.c5a6dd202acb.jpg |
| twitter:creator | @realpython |
| og:type | article |
| og:site_name | Real Python |
| apple-mobile-web-app-title | Real Python |
Links:
Viewport: width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover
Robots: max-image-preview:large