<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>PromptZone - Leading AI Community for Prompt Engineering and AI Enthusiasts: Nikita Podelenko</title>
    <description>The latest articles on PromptZone - Leading AI Community for Prompt Engineering and AI Enthusiasts by Nikita Podelenko (@nikita_podelenko_c8cafbcd).</description>
    <link>https://www.promptzone.com/nikita_podelenko_c8cafbcd</link>
    <image>
      <url>https://promptzone-community.s3.amazonaws.com/uploads/user/profile_image/39228/06f6351d-5b1e-4044-96b8-1ec143ddf4d6.png</url>
      <title>PromptZone - Leading AI Community for Prompt Engineering and AI Enthusiasts: Nikita Podelenko</title>
      <link>https://www.promptzone.com/nikita_podelenko_c8cafbcd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://www.promptzone.com/feed/nikita_podelenko_c8cafbcd"/>
    <language>en</language>
    <item>
      <title>A prompt is not a transaction boundary: designing reliable AI agent actions</title>
      <dc:creator>Nikita Podelenko</dc:creator>
      <pubDate>Sat, 01 Aug 2026 23:30:47 +0000</pubDate>
      <link>https://www.promptzone.com/nikita_podelenko_c8cafbcd/a-prompt-is-not-a-transaction-boundary-designing-reliable-ai-agent-actions-2nj1</link>
      <guid>https://www.promptzone.com/nikita_podelenko_c8cafbcd/a-prompt-is-not-a-transaction-boundary-designing-reliable-ai-agent-actions-2nj1</guid>
      <description>&lt;p&gt;Prompts are good at expressing intent. They are not good transaction boundaries.&lt;/p&gt;

&lt;p&gt;That distinction matters when an AI agent can create appointments, transfer calls, send messages, or update a CRM. A model can decide that an action should happen, but the surrounding system still has to prove whether it happened once, failed safely, or needs human review.&lt;/p&gt;

&lt;h2 id="keep-the-models-job-narrow"&gt;
  
  
  Keep the model's job narrow
&lt;/h2&gt;

&lt;p&gt;For a voice agent, a useful model output is a structured decision such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"intent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"schedule_callback"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contact"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sam"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"phone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"preferred_window"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tomorrow afternoon"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application can validate those fields, ask for missing data, and call the real scheduling service. This is safer than asking the model to narrate a successful booking before the provider has confirmed it.&lt;/p&gt;

&lt;p&gt;The same separation helps prompt quality. The prompt describes what information matters and when to request an action. Deterministic code owns permissions, validation, retries, idempotency, and persistence.&lt;/p&gt;

&lt;h2 id="never-let-language-become-evidence"&gt;
  
  
  Never let language become evidence
&lt;/h2&gt;

&lt;p&gt;A sentence such as “Your appointment is confirmed” is not proof. Evidence is a successful provider response plus a durable identifier stored against the call. Likewise, “I am transferring you now” should not be the final state. The system needs attempting, connected, and failed transfer states.&lt;/p&gt;

&lt;p&gt;This rule prevents a subtle class of errors: the conversation sounds complete even though the workflow failed. Those failures are easy to miss in transcript reviews because the language is fluent and reassuring.&lt;/p&gt;

&lt;h2 id="give-tools-typed-outcomes"&gt;
  
  
  Give tools typed outcomes
&lt;/h2&gt;

&lt;p&gt;Agent tools should return small, explicit result objects rather than prose. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TIME_SLOT_UNAVAILABLE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"retryable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next_options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"2:30 PM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4:00 PM"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model can then explain the outcome and ask the caller to choose an alternative. Operators can aggregate the result code, and tests can assert behavior without interpreting natural-language logs.&lt;/p&gt;

&lt;p&gt;A good tool contract also distinguishes an uncertain timeout from a definitive rejection. A timeout may require an idempotent status check before retrying; blindly calling the provider again can create duplicates.&lt;/p&gt;

&lt;h2 id="design-the-recovery-prompt-too"&gt;
  
  
  Design the recovery prompt too
&lt;/h2&gt;

&lt;p&gt;Teams often spend most of their time on the happy-path system prompt. Production quality depends just as much on the recovery instructions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should the agent say when a tool times out?&lt;/li&gt;
&lt;li&gt;Which actions may be retried automatically?&lt;/li&gt;
&lt;li&gt;When should it stop and capture a message?&lt;/li&gt;
&lt;li&gt;What must never be promised without confirmation?&lt;/li&gt;
&lt;li&gt;Which failure details are safe and useful to tell the caller?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These rules should match real tool result codes. Generic instructions such as “handle errors gracefully” are too vague to produce consistent behavior.&lt;/p&gt;

&lt;h2 id="evaluate-workflow-truth"&gt;
  
  
  Evaluate workflow truth
&lt;/h2&gt;

&lt;p&gt;Prompt evaluation should include more than transcript style. For each test call, compare what the agent said with what the system persisted and what the provider confirmed.&lt;/p&gt;

&lt;p&gt;Useful checks include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Did the agent collect every required field?&lt;/li&gt;
&lt;li&gt;Did each external action execute at most once?&lt;/li&gt;
&lt;li&gt;Did spoken confirmation match the recorded result?&lt;/li&gt;
&lt;li&gt;Was an unresolved outcome assigned to a human or exception queue?&lt;/li&gt;
&lt;li&gt;Could an operator reconstruct the final state from durable events?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We use this separation while developing &lt;a href="https://skipcalls.com" rel="noopener noreferrer"&gt;SkipCalls&lt;/a&gt;, an AI receptionist and phone-workflow product. The practical lesson is broader than voice: prompts decide and communicate, while transactional code proves and records.&lt;/p&gt;

&lt;p&gt;A strong prompt can make an agent helpful. Reliable boundaries make the agent safe to operate.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>prompt</category>
    </item>
  </channel>
</rss>
