<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Cloud Architecture, Azure &amp; AI Insights</title>
        <link>https://eugen.writizzy.blog</link>
        <description>Explore Azure cloud architecture, AI tools like Copilot and Claude, software engineering, and practical insights from a Cloud Enterprise Architect.</description>
        <lastBuildDate>Wed, 11 Nov 2026 16:16:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Writizzy</generator>
        <language>en</language>
        <image>
            <title>Cloud Architecture, Azure &amp; AI Insights</title>
            <url>https://writizzy.b-cdn.net/blogs/97c1d98b-e670-483f-8da9-eb44e91afbdf/1792005141425-bnmlsks.png</url>
            <link>https://eugen.writizzy.blog</link>
        </image>
        <copyright>All rights reserved 2026, Cloud Architecture, Azure &amp; AI Insights</copyright>
        <item>
            <title><![CDATA[Claude Code /goal: From Prompting to Goal-Driven Engineering]]></title>
            <link>https://eugen.writizzy.blog/p/claude-code-goal-from-prompting-to-goal-driven-engineering</link>
            <guid>https://eugen.writizzy.blog/p/claude-code-goal-from-prompting-to-goal-driven-engineering</guid>
            <pubDate>Tue, 10 Nov 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The hard part of delegating a coding task to an AI agent isn't getting it started. It's knowing when the work is actually finished- and making sure it can prove it. The real objective is to reduce manual coordination without reducing engineering confidence in the result.]]></description>
            <content:encoded><![CDATA[<p>The hard part of delegating a coding task to an AI agent isn&#39;t getting it started. It&#39;s knowing when the work is actually finished and making sure it can prove it.</p>
<p>Most coding-agent workflows still follow a relatively manual interaction pattern:</p>
<ol>
<li>Describe a task.</li>
<li>Let the agent investigate and implement it.</li>
<li>Review the result.</li>
<li>Identify what is missing.</li>
<li>Send another prompt.</li>
</ol>
<p>This works well for interactive development, but it introduces a coordination bottleneck for larger tasks. The agent can execute commands, modify files, run tests, and inspect results, but the developer still has to drive the process forward.</p>
<p>Claude Code&#39;s <code>/goal</code> introduces a different execution model: <strong>goal-driven iteration</strong>.</p>
<p>Instead of treating each model response as the end of a task, you define a completion condition. Claude continues working across multiple turns until the condition is satisfied, judged impossible, or the workflow encounters an error that requires intervention.</p>
<p>The important shift is from specifying the next action to defining the expected end state.</p>
<h2>What Claude Code <code>/goal</code> actually does</h2>
<p>The <code>/goal</code> command establishes a completion condition for the current Claude Code session.</p>
<p>When you activate it, Claude starts working on the goal immediately. At the end of each turn, a separate evaluator model assesses whether the stated condition has been satisfied.</p>
<p>The evaluator can return three outcomes:</p>
<ul>
<li><strong>Not yet met:</strong> Claude continues working and uses the evaluator&#39;s feedback to guide the next turn.</li>
<li><strong>Met:</strong> The goal is considered achieved and the loop terminates.</li>
<li><strong>Impossible:</strong> The evaluator determines that the condition cannot be satisfied, and Claude clears the goal.</li>
</ul>
<p>Certain unrecoverable errors also require the goal to be cleared so the developer can address the underlying problem.</p>
<p>Conceptually, the execution loop looks like this:</p>
<p><strong>Goal → Execute → Evaluate → Continue or Stop</strong></p>
<p>This is more than a longer conversation. The completion condition becomes part of the session&#39;s execution lifecycle.</p>
<p>An important implementation detail is that the evaluator is not an independent test runner. It evaluates the condition against the conversation and the evidence Claude has surfaced. It does not independently execute commands or inspect repository files.</p>
<p>That distinction matters. Claude still needs to run the relevant tests, inspect the output, and report the results. The evaluator judges whether the available evidence demonstrates completion.</p>
<p>The quality of the loop therefore depends heavily on the quality of the verification process.</p>
<h2>The difference between a task and a goal</h2>
<p>A conventional prompt usually describes an activity:</p>
<p><strong>&quot;Refactor the billing service.&quot;</strong></p>
<p>That leaves several questions unanswered:</p>
<ul>
<li>What exactly should change?</li>
<li>Which interfaces must remain compatible?</li>
<li>Which tests must pass?</li>
<li>What constitutes complete coverage?</li>
<li>When should the agent stop?</li>
</ul>
<p>A goal should describe an observable end state.</p>
<p>For example, a billing-service migration could have these completion criteria:</p>
<ul>
<li>All relevant modules have been migrated.</li>
<li>Existing public interfaces remain compatible.</li>
<li>The unit and integration test suites pass.</li>
<li>Type checking and linting complete successfully.</li>
<li>No legacy implementation remains in the target scope.</li>
<li>No unrelated modules have been modified.</li>
</ul>
<p>This gives the agent a concrete target and a way to demonstrate progress. You should structure most engineering goals around three elements:</p>
<ol>
<li><strong>Expected outcome -</strong> Describe what should exist or be true when the work is finished.</li>
<li><strong>Verification -</strong> Specify which commands, tests, or checks establish that the expected outcome has been reached.</li>
<li><strong>Constraints -</strong> Define what must not change, which areas are in scope, and what limitations apply to the execution.</li>
</ol>
<p>This is particularly important for tasks that span multiple modules or require several implementation and verification cycles.</p>
<h2>The control loop is more important than the prompt</h2>
<p>There is an interesting distinction between autonomous execution and reliable autonomous execution.</p>
<p>An agent can continue making changes without human intervention and still produce an incorrect result.</p>
<p>For example, a successful build does not establish that business behavior has been preserved. A passing unit test suite does not establish that integration behavior is correct. A clean linter does not establish that an implementation meets the original requirements.</p>
<p>The control loop needs feedback that is relevant to the actual task. For software development, this usually means combining:</p>
<ul>
<li>Unit and integration tests.</li>
<li>Static analysis and type checking.</li>
<li>Build and compilation results.</li>
<li>API or contract validation.</li>
<li>Regression tests.</li>
<li>Git-based checks to identify unintended changes.</li>
<li>Browser or end-to-end verification for user-facing features.</li>
</ul>
<p>The more observable the result, the easier it is for the agent to evaluate its own progress.</p>
<p>For deterministic requirements, I would go a step further and use scripts, CI checks, or Claude Code Stop hooks. These can enforce conditions that should not depend solely on a model&#39;s interpretation of terminal output. This leads to an important engineering principle:</p>
<p><strong>Use the model to make decisions and deterministic checks to enforce requirements wherever possible.</strong></p>
<p>The evaluator helps manage continuation. It should not replace a proper test and validation strategy.</p>
<h2><code>/goal</code> does not automatically mean unrestricted autonomy</h2>
<p>Another important distinction is between the execution loop and tool permissions.</p>
<p>Claude Code&#39;s <code>/goal</code> controls whether the agent continues working across turns. It does not automatically grant permission to execute every command or modify every file.</p>
<p>For unattended execution, <code>/goal</code> can be combined with Claude Code&#39;s Auto mode, which handles tool approvals within the configured permission model.</p>
<p>These are separate concerns:</p>
<ul>
<li><code>/goal</code> determines whether more work is required.</li>
<li>Auto mode determines how tool approvals are handled.</li>
<li>Skills and hooks provide reusable workflows and lifecycle controls.</li>
<li>Scripts and CI provide deterministic validation.</li>
</ul>
<p>Combining these primitives is considerably more useful than relying on a single large prompt.</p>
<p>There is also a practical cost consideration. Every additional turn involves more model activity, and the evaluator introduces additional usage. Claude Code exposes goal status, evaluated turns, token consumption, and the evaluator&#39;s latest reasoning through <code>/goal</code> without arguments.</p>
<p>Goals should therefore have explicit time or turn boundaries. A condition can include a stopping clause, such as stopping after a specified number of turns.</p>
<p>This prevents an agent from spending an unreasonable amount of time attempting to satisfy an ambiguous or fundamentally unachievable condition.</p>
<h2>The GitHub Copilot alternative: Autopilot</h2>
<p>GitHub Copilot offers a closely related workflow through <strong>Autopilot mode</strong>, available in GitHub Copilot CLI and the Copilot app. In Copilot CLI, you can activate it through the <code>/autopilot</code> command or switch modes using Shift+Tab.</p>
<p>Autopilot allows Copilot to work through successive model interactions without waiting for another prompt after every step. It can:</p>
<ul>
<li>Implement changes across multiple files.</li>
<li>Execute commands and run tests.</li>
<li>Evaluate the results.</li>
<li>Modify its implementation based on failures.</li>
<li>Continue iterating until it determines the task is complete or reaches an execution limit.</li>
</ul>
<p>For complex tasks, GitHub also supports a plan-first workflow. You can begin in Plan mode, review the proposed implementation, and then move into Autopilot execution.</p>
<p>This is a useful pattern because it separates two different engineering activities: deciding how the change should be implemented and allowing the agent to execute that plan.</p>
<h3>How does it compare with Claude Code?</h3>
<p>The two approaches solve a similar orchestration problem, but they should not be treated as identical implementations.</p>
<p><strong>Claude Code</strong> <code>/goal</code></p>
<ul>
<li>Establishes an explicit completion condition.</li>
<li>Uses a separate evaluator model after each turn.</li>
<li>Provides feedback when the condition is not yet met.</li>
<li>Supports explicit turn or time boundaries.</li>
<li>Evaluates completion based on evidence surfaced in the conversation.</li>
</ul>
<p><strong>GitHub Copilot Autopilot</strong></p>
<ul>
<li>Enables autonomous continuation through successive model interactions.</li>
<li>Supports implementation, testing, and iterative correction.</li>
<li>Can be combined with Plan mode.</li>
<li>Provides configurable continuation and AI-credit limits.</li>
<li>Separates autonomy from tool permissions.</li>
</ul>
<p>One additional feature is worth distinguishing: Copilot&#39;s <code>/delegate</code> sends work to the Copilot cloud agent. Unlike local CLI Autopilot, the task runs remotely, creates a branch, and can produce a draft pull request while you continue working elsewhere.</p>
<p>That is a different form of delegation, rather than a direct equivalent of Claude&#39;s <code>/goal</code> evaluation loop.</p>
<p>The practical comparison is therefore:</p>
<ul>
<li>Claude <code>/goal</code> is particularly interesting when the completion condition itself is central to the workflow.</li>
<li>Copilot Autopilot provides a comparable iterative execution experience within the GitHub Copilot ecosystem.</li>
<li>Copilot <code>/delegate</code> is useful when the work should move into a remote background workflow.</li>
</ul>
<h2>When should you use these workflows?</h2>
<p>Not every coding task benefits from autonomous execution. For short, well-understood changes, an interactive session is usually more efficient. There is little value in introducing additional evaluation cycles when the task can be completed and reviewed in one turn.</p>
<p>Goal-driven execution becomes more useful when:</p>
<ul>
<li>The implementation spans multiple files or components.</li>
<li>The task requires several rounds of testing and correction.</li>
<li>There is a clear acceptance criteria set.</li>
<li>Progress can be measured through executable checks.</li>
<li>The work can continue without frequent architectural decisions from a developer.</li>
</ul>
<p>It is less appropriate for open-ended exploration, ambiguous requirements, or tasks where important decisions require human judgment throughout the process.</p>
<p>In those cases, a better workflow is to use the agent interactively to clarify the problem, develop a plan, and establish acceptance criteria before enabling autonomous execution.</p>
<p>Human review remains necessary regardless of which tool performs the work. The final diff, test results, and unintended side effects still need engineering review.</p>
<h2>The engineering takeaway</h2>
<p>The evolution of coding agents is not simply about making models better at writing code. It is also about improving the systems that orchestrate them. A useful autonomous workflow needs a clearly defined target, reliable feedback, bounded execution, and an explicit stopping condition.</p>
<p>Claude Code <code>/goal</code> makes this control-loop approach available directly within a coding session. GitHub Copilot Autopilot offers a comparable way to reduce manual orchestration during multi-step development tasks.</p>
<p>Both are useful steps toward a more autonomous development workflow, but autonomy alone is not the measure of success.</p>
<p><strong>The real objective is to reduce manual coordination without reducing engineering confidence in the result.</strong></p>
<hr>
<h2>References and further reading</h2>
<ol>
<li><a href="https://eugen.writizzy.blog">Anthropic – Keep Claude working toward a goal</a></li>
<li><a href="https://claude.com/resources/articles/getting-started-with-loops">Anthropic – Loop engineering: Getting started with loops</a></li>
<li><a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/use-autopilot-mode">GitHub – Using Autopilot mode in GitHub Copilot CLI</a></li>
<li><a href="https://docs.github.com/en/copilot/concepts/agent-capabilities/agent-powered-workflows-and-operations/autopilot">GitHub – Allowing Copilot to work autonomously</a></li>
<li><a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/delegate-tasks-to-cca">GitHub – Delegating tasks to Copilot</a></li>
<li><a href="https://labs.secengai.com/p/using-goal-in-claude-code-for-autonomous-security-engineering-workflows">Using  goal in Claude Code for autonomous workflows</a></li>
</ol>
]]></content:encoded>
            <category>copilot</category>
            <category>ai</category>
            <category>claudecode</category>
            <enclosure url="https://writizzy.b-cdn.net/blogs/97c1d98b-e670-483f-8da9-eb44e91afbdf/1794314148839-caoz2dr.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Can You Really Vibe Code an App?]]></title>
            <link>https://eugen.writizzy.blog/p/can-you-really-vibe-code-an-app</link>
            <guid>https://eugen.writizzy.blog/p/can-you-really-vibe-code-an-app</guid>
            <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Can you really build an application just by “vibe coding”? I have tried, and these are my results.]]></description>
            <content:encoded><![CDATA[<h2>What</h2>
<p>Since I’m currently working on equipping my home with solar panels, I found the lack of a proper calculator quite strange. There are a few calculators developed and owned by companies selling solar panels and systems, but they tend to be overly optimistic in their calculations. Also, when you start looking at more complex systems with an EV charger, batteries, and a heat pump, I found that even the sellers struggle to provide proper answers.</p>
<p>So, as a side project, I decided to vibe code an application to help others. For now, it only works for Croatia: <a href="https://ashy-field-09ba04703.7.azurestaticapps.net/">Solar Web</a></p>
<h2>How</h2>
<p>I started coding with Google Gemini models using a prepaid plan. There is no subscription; instead, you add money, get an API key, and use it from VS Code. This is also the most expensive way to do it, since there are no included tokens and you are charged directly as you use them. I also had quite a few issues with the availability of the Gemini 3.1 Pro model, and most of the time I ran into availability errors.</p>
<p>I also found the Gemini models not to be particularly good for coding, so I switched to GitHub Copilot. I needed a subscription anyway for other things, so I decided to try it on this project as well. At that point, the project was not quite finished: the UI was there, but the calculations were only around 50% implemented or correct.</p>
<p>It took quite a few iterations. At the moment, my repository has <a href="https://github.com/bozic/solar-web">56 commits</a>, which roughly means 56 iterations with the model to fix something, since each iteration I completed ended up as a PR. The project is still very much a work in progress.</p>
<p>To be honest, most of those iterations went into a strange bug where my Azure Function was not being deployed to Azure. In the end, it was fixed by completely excluding tests from the Function App build. It took quite a bit of time before any of the models could figure it out. In the end, it was GPT 5.6 Luna - the cheapest of all the models I tried that found the solution.</p>
<p>Something else also changed during the process. I started with VS Code, my dev container, and all the tools I usually have when developing at work. But with each iteration, I started using the GitHub Copilot App more and more, and by now I barely look at the code at all. I rely on tests written based on my requests, the CI/CD pipeline, and visual testing of the deployed application.</p>
<p>There are also two additional reasons why the Copilot App works particularly well for me:</p>
<ol>
<li><strong><a href="https://github.com/mobile">Mobile app</a></strong> – Since I do most of my hobby projects in the evening, when I also have other family obligations, the ability to steer Copilot from my mobile phone is extremely convenient.</li>
<li><strong><a href="https://awesome-copilot.github.com/learning-hub/copilot-workshops/app/6-agent-merge/">Agent merge</a></strong> – With this functionality, you can hand over the full PR lifecycle to your agent. It can check build failures, fix them, and even approve the PR once everything is green.</li>
</ol>
<p>Of course, this can work well for a hobby or demo application, but the more critical the application, the more important human review, local validation, security review, observability, and operational knowledge become.</p>
<p>The first problem is that I now have very little idea about the quality of the code itself. My frontend development days ended a long time ago, around the time of jQuery and HTML 4, so I do not have much expertise in the modern frontend stack anyway. My own code review would therefore not add much value.</p>
<p>There are, of course, tools on the GitHub platform that can help with this, such as <a href="https://docs.github.com/en/code-security/concepts/code-quality/code-quality">Code Quality</a> and <a href="https://docs.github.com/en/enterprise-cloud@latest/copilot/concepts/agents/code-review">Copilot code review</a>. However, since this is a hobby repository on a free tier, these features are not available to me out of the box. They would probably help me get more confidence in the code quality, but I have not used them yet.</p>
<p>The second problem is that my Copilot App environment does not have all the tools needed to build or validate the code locally. This means that some build issues are only discovered after I push the code and the pipeline runs. This way of working is slower and consumes more tokens, but I did not have the time to improve the setup - maybe that will be the topic of the next blog post.</p>
<h2>Lessons learned</h2>
<p>So, can you really vibe code an app? My answer is yes, but with an important qualification.</p>
<p>I was able to build a working application without manually writing most of the code, and for a hobby project, this approach can be surprisingly effective. But I did not eliminate the engineering work; I moved it somewhere else. Instead of spending my time implementing the UI and business logic, I spent it describing requirements, reviewing results through tests and deployed builds, investigating failures, and deciding whether the application was actually doing what I expected.</p>
<p>The biggest lesson for me is that the better your validation loop is, the further vibe coding can take you. Tests, CI/CD, visual validation, and a production environment effectively became my code review process.</p>
<p>At the same time, I am much less confident about the quality of the underlying code than I would be with a traditional development workflow. For a hobby application, that is a trade-off I am happy to make. For something where correctness, security, maintainability, or reliability really matter, I would not trust the same process without much stronger human review and validation.</p>
<p>In other words, vibe coding did not make software engineering disappear. It changed the part of engineering I spend my time on - from writing code to defining what the code should do and proving that it actually does it.</p>
]]></content:encoded>
            <category>vibecoding</category>
            <category>ai</category>
            <enclosure url="https://writizzy.b-cdn.net/blogs/97c1d98b-e670-483f-8da9-eb44e91afbdf/1791197992938-jz1ghuo.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>