<?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>DEV Community: Iniyarajan</title>
    <description>The latest articles on DEV Community by Iniyarajan (@iniyarajan86).</description>
    <link>https://dev.to/iniyarajan86</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3769670%2F9bdbafda-dafc-47c1-9961-99b88a3fe335.jpeg</url>
      <title>DEV Community: Iniyarajan</title>
      <link>https://dev.to/iniyarajan86</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iniyarajan86"/>
    <language>en</language>
    <item>
      <title>Apple's Foundation Models, Part 2: Typed Output with @Generable, and What the Type System Can't Promise</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Sat, 26 Sep 2026 02:23:37 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/apples-foundation-models-part-2-typed-output-with-generable-and-what-the-type-system-cant-2dml</link>
      <guid>https://dev.to/iniyarajan86/apples-foundation-models-part-2-typed-output-with-generable-and-what-the-type-system-cant-2dml</guid>
      <description>&lt;p&gt;&lt;em&gt;The on-device model can return a Swift struct instead of a string. I ran a real school notice through it twenty times, as text and as a photo, to find out exactly what the guarantee covers and where it stops.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mark a struct or enum with &lt;code&gt;@Generable&lt;/code&gt;, pass it to &lt;code&gt;respond(generating:)&lt;/code&gt;, and the framework returns an instance of your type. The model cannot add a field you did not declare or pick a value outside a guide you set. This is enforced at token level, not by parsing afterwards.&lt;/li&gt;
&lt;li&gt;Guides do real work: a regex for dates, an enum for categories, a range for counts, a description for meaning. The whole schema is sent to the model as tokens, and it is not cheap. My eight-field schema cost 575 tokens, more than the 249-token notice it was extracting from.&lt;/li&gt;
&lt;li&gt;Streaming gives you a partially filled struct as it generates. The first item appeared at 2.1 seconds of a 9-second response on an M1 Pro. Fields arrive in declaration order.&lt;/li&gt;
&lt;li&gt;Since iOS 27, a photo goes in the same prompt. A 1800 by 1800 image of the notice cost 805 input tokens and took 12.9 seconds, and got one date wrong.&lt;/li&gt;
&lt;li&gt;The type system guarantees shape, not truth. In one run out of ten the model invented two plausible items that were not on the notice. Optional fields were skipped in one run and filled in the next. You still need a validator, and this article shows the one I use.&lt;/li&gt;
&lt;li&gt;iOS 27 changed the error type. Code that catches the iOS 26 &lt;code&gt;GenerationError&lt;/code&gt; will not see a context overflow any more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ga1o2fifylm9py5nxz6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ga1o2fifylm9py5nxz6.png" alt="What @Generable guarantees, and what it doesn't: enforced at the token mask versus still yours to check, with the measured numbers" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is article 2 of 6. &lt;a href="https://dev.to/iniyarajan86/apples-foundation-models-framework-what-actually-runs-on-the-iphone-and-what-doesnt-j4f"&gt;Article 1&lt;/a&gt; covered what runs where and who can use it. Every snippet below was type-checked against the iOS 27.0 SDK and run on macOS 27.0 with the same on-device model, so the numbers are from real executions, not from the documentation.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem with asking for JSON
&lt;/h2&gt;

&lt;p&gt;Every LLM integration I have shipped had the same weak spot. You ask the model for JSON, it returns something that is nearly JSON, and you write a parser that copes with a missing bracket, a field called &lt;code&gt;first_name&lt;/code&gt; instead of &lt;code&gt;firstName&lt;/code&gt;, a number as a string, and an apology paragraph before the opening brace. The parser grows. The tests multiply. The failures are silent until they are not.&lt;/p&gt;

&lt;p&gt;The Foundation Models framework removes that layer entirely with what Apple calls guided generation. You declare the shape as a Swift type. The framework turns the type into a schema, sends the schema with your prompt, and then, at every step of generation, masks out every token that would break the schema. The model is not asked to follow the structure. It is prevented from leaving it. Apple's engineers put it plainly in the WWDC25 deep dive: for every token the model has a distribution over its vocabulary, and constrained decoding zeroes out the entries that are not valid according to the schema.&lt;/p&gt;

&lt;p&gt;That is a stronger guarantee than JSON mode on a cloud API, which still hands you a string to parse. Here it hands you a value of your type. What follows is what that looks like on a task with real stakes for real users.&lt;/p&gt;




&lt;h2&gt;
  
  
  Declare the type, get the type
&lt;/h2&gt;

&lt;p&gt;My test document is a school circular, the kind that arrives in a parents' WhatsApp group as a photo every few weeks: a holiday, a parent-teacher meeting, a fee deadline with a late charge, an annual day with rehearsals, and a consent form due date. Five facts, six dated items, one of them an amount of money. The goal is to turn it into calendar entries and reminders without a server.&lt;/p&gt;

&lt;p&gt;Here is the type that describes what I want back.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="c1"&gt;// snippet: context&lt;/span&gt;
&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;Foundation&lt;/span&gt;
&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;FoundationModels&lt;/span&gt;

&lt;span class="kd"&gt;@Generable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"One dated item a parent must know about, from a school notice"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;NoticeItem&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;@Guide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"What the item is about, under 8 words"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;

    &lt;span class="kd"&gt;@Guide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Calendar date in ISO format"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;#/\d{4}-\d{2}-\d{2}/#&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;

    &lt;span class="kd"&gt;@Guide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Start time if the notice gives one, as HH:MM 24-hour"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Kind&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Action&lt;/span&gt;

    &lt;span class="kd"&gt;@Generable&lt;/span&gt;
    &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="kt"&gt;Kind&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;holiday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meeting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;submission&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;@Generable&lt;/span&gt;
    &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="kt"&gt;Action&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="k"&gt;none&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;amountINR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;attend&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nf"&gt;submit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;@Generable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"A school circular broken into actionable items"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;@Guide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"School name exactly as printed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;school&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;

    &lt;span class="kd"&gt;@Guide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Items in the order they appear"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;NoticeItem&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="kd"&gt;@Guide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"True if any item needs the parent to do something"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;needsParentAction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Bool&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three things to notice. &lt;code&gt;Kind&lt;/code&gt; is a plain enum, so the model can only produce one of five values. &lt;code&gt;Action&lt;/code&gt; is an enum with associated values, so "pay" carries an amount and "submit" carries what to submit, and the model has to fill those in when it picks that case. And &lt;code&gt;date&lt;/code&gt; has a regex guide, written with the &lt;code&gt;#/…/#&lt;/code&gt; delimiters. The bare &lt;code&gt;/…/&lt;/code&gt; form in Apple's examples needs the &lt;code&gt;-enable-bare-slash-regex&lt;/code&gt; compiler flag, which Swift packages set by default and a plain &lt;code&gt;swiftc&lt;/code&gt; invocation does not. The extended delimiters work everywhere.&lt;/p&gt;

&lt;p&gt;Calling the model is one line more than calling it for text.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;instructions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"You turn school circulars into structured calendar items for parents. Use only facts in the notice. Dates are in 2026."&lt;/span&gt;

&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;LanguageModelSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Extract the items from this notice:&lt;/span&gt;&lt;span class="se"&gt;\n\(&lt;/span&gt;&lt;span class="n"&gt;noticeText&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;generating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is what came back on the first run, printed from the returned struct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;school: ST. MARY'S HIGH SCHOOL, Coimbatore | needsParentAction: true | 6 items
 - 2026-10-02 [holiday]    Gandhi Jayanti - school closed        → none
 - 2026-10-03 [meeting]    Parent-Teacher Meeting                → attend
 - 2026-10-05 [payment]    Second term fees due                  → pay(amountINR: 12500)
 - 2026-10-18 [event]      Annual Day                            → none
 - 2026-10-12 [event]      Rehearsals start                      → none
 - 2026-09-30 [submission] Consent form for Science Exhibition   → submit(item: "Science Exhibition trip")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every date matches the regex. Every kind is one of the five cases. The fee amount is an integer inside the enum case that requires one. Nothing was parsed. On a warm session this took between 6.8 and 9.0 seconds across three runs for around 270 to 370 output tokens, which works out at roughly 40 tokens per second on an M1 Pro from 2021. Apple's Mac path and the iPhone path run the same model, so treat that as a lower bound for a phone.&lt;/p&gt;




&lt;h2&gt;
  
  
  What guides actually do, and what they cost
&lt;/h2&gt;

&lt;p&gt;A guide is a constraint the decoder enforces. The SDK ships these:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Guide&lt;/th&gt;
&lt;th&gt;Applies to&lt;/th&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;.range(a...b)&lt;/code&gt;, &lt;code&gt;.minimum&lt;/code&gt;, &lt;code&gt;.maximum&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Int, Float, Double, Decimal&lt;/td&gt;
&lt;td&gt;Number must fall inside the bounds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;.count(n)&lt;/code&gt;, &lt;code&gt;.count(a...b)&lt;/code&gt;, &lt;code&gt;.minimumCount&lt;/code&gt;, &lt;code&gt;.maximumCount&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Arrays&lt;/td&gt;
&lt;td&gt;Array length is bounded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;.anyOf([...])&lt;/code&gt;, &lt;code&gt;.constant(...)&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Value must be one of the listed strings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.pattern(regex)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;Value must match the regex, enforced while generating&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.element(guide)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Arrays&lt;/td&gt;
&lt;td&gt;Applies a guide to each element&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description:&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anything&lt;/td&gt;
&lt;td&gt;Not a constraint. Tells the model what the field means&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The description is the one that is not enforced and the one you will reach for most. It is also the one that costs you. The schema is sent to the model as tokens on every request by default, and the framework will tell you exactly how many:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;printBudget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SystemLanguageModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;schemaTokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tokenCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generationSchema&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;noticeTokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tokenCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;schemaTokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;noticeTokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;contextSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On my machine that printed 575 for the schema, 249 for the notice, and 4096 for the context window. The type definition cost more than twice the document it was extracting from. Apple's own advice is to keep descriptions short because long ones "take up additional context size and can introduce latency", and the numbers back that up: every description you write is paid for on every call.&lt;/p&gt;

&lt;p&gt;There is a lever for that. &lt;code&gt;respond(generating:includeSchemaInPrompt:)&lt;/code&gt; accepts &lt;code&gt;false&lt;/code&gt;, and the decoder still enforces the schema because that part happens at the token mask, not in the prompt. I tried it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;extractCheap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;LanguageModelSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Extract the items from this notice:&lt;/span&gt;&lt;span class="se"&gt;\n\(&lt;/span&gt;&lt;span class="n"&gt;noticeText&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;generating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;includeSchemaInPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;totalTokenCount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;// usage is new in iOS 27&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Input tokens went from 906 to 340, a 62 percent cut, and the six items came back correctly typed with sensible titles. What the model loses is the descriptions, so it is guessing at meaning from field names alone. For a self-explanatory schema on a simple extraction that was fine. For anything where a description is doing real work, put the schema into the session's instructions once, keep the flag off for every turn after that, and let the framework's prompt cache carry it. On the second turn of one such session the response reported 908 of 1,392 input tokens as cached.&lt;/p&gt;

&lt;p&gt;Two other numbers from that run matter. The context window on this Mac is 4,096 tokens, not the 8,192 that Apple's WWDC26 session prints for the same property. I do not know whether that is the hardware, the OS build, or the model variant, which this machine reports as "AFM 3 Core". The point is that &lt;code&gt;contextSize&lt;/code&gt; is a property for a reason. Read it at runtime, never hard-code it, and budget the schema against it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Streaming: a struct that fills in front of you
&lt;/h2&gt;

&lt;p&gt;For anything that takes nine seconds, the UI needs to move earlier than that. The framework streams partially generated values of your type. Every &lt;code&gt;@Generable&lt;/code&gt; type gets a &lt;code&gt;PartiallyGenerated&lt;/code&gt; companion in which every property is optional, and the stream hands you a new snapshot each time a token lands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;streamExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;LanguageModelSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;streamResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Extract the items from this notice:&lt;/span&gt;&lt;span class="se"&gt;\n\(&lt;/span&gt;&lt;span class="n"&gt;noticeText&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;generating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;partial&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;itemsSoFar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;partial&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;partial&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;school&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;"…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;itemsSoFar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;partial&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;needsParentAction&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;init&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;"pending"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The measured timeline for one run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+1576 ms  school="ST."                              items=0  needsParentAction=nil
+2067 ms  school="ST. MARY'S HIGH SCHOOL, Coimbatore" items=1  needsParentAction=nil
+2800 ms                                             items=2
+3619 ms                                             items=3
 ...
+7904 ms                                             items=7
 9067 ms  done, 125 snapshots
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things to design around. First, the first complete item was visible at 2.1 seconds, less than a quarter of the total, so a list that appends rows as they arrive feels four times faster than a spinner. Second, properties are generated in declaration order, which Apple states outright. &lt;code&gt;needsParentAction&lt;/code&gt; is declared last, so it is &lt;code&gt;nil&lt;/code&gt; until the very end. If you want the model to decide something before it enumerates, declare that property first. If you want the decision to be informed by the enumeration, declare it last. The declaration order of your struct is part of your prompt.&lt;/p&gt;




&lt;h2&gt;
  
  
  A photo in, a struct out
&lt;/h2&gt;

&lt;p&gt;Since iOS 27 the same prompt accepts an image. Parents do not receive notices as text, they receive a photo of a printed sheet, so this is the version that matters for the use case.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;CoreGraphics&lt;/span&gt;

&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="nv"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;CGImage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;LanguageModelSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;generating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"Extract the items from this photographed notice."&lt;/span&gt;
        &lt;span class="kt"&gt;Attachment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I rendered the notice as an 1800 by 1800 pixel image and passed it in. The result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;image → SchoolNotice in 12902 ms · tokens in=805 out=323
 - 2026-10-02 [holiday]    School closed                 → none
 - 2026-10-03 [meeting]    Parent-Teacher Meeting        → attend
 - 2026-10-03 [payment]    Second term fees              → pay(amountINR: 12500)
 - 2026-10-18 [event]      Annual Day                    → attend
 - 2026-10-12 [event]      Annual Day rehearsals         → attend
 - 2026-09-30 [submission] Consent form                  → submit(item: "Science Exhibition")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The image cost fewer input tokens than the text plus schema did, at 805 against 906, and took about four seconds longer. Five of six dates are right. The fee deadline came back as 3 October instead of 5 October, which for a payment reminder is the one field you cannot get wrong. The struct is perfectly formed and one fact in it is false. Hold that thought.&lt;/p&gt;




&lt;h2&gt;
  
  
  Schemas you only know at runtime
&lt;/h2&gt;

&lt;p&gt;Sometimes the shape depends on data you fetch. A school's categories, a restaurant's menu, a form's field list. &lt;code&gt;DynamicGenerationSchema&lt;/code&gt; builds the same kind of schema from values, and the decoder enforces it the same way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;DynamicGenerationSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Item"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;DynamicGenerationSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;DynamicGenerationSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Category"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;anyOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;DynamicGenerationSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Tagged"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;DynamicGenerationSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nv"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;DynamicGenerationSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;referenceTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Item"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;minimumElements&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;maximumElements&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;schema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="kt"&gt;GenerationSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;root&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;LanguageModelSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Tag each item in this notice:&lt;/span&gt;&lt;span class="se"&gt;\n\(&lt;/span&gt;&lt;span class="n"&gt;noticeText&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="kt"&gt;GeneratedContent&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;forProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;forProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;forProperty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With categories fetched as &lt;code&gt;fees, exam, holiday, event, transport&lt;/code&gt;, the model tagged the five notice items in 5.7 seconds, and it could not have produced a sixth category if it wanted to. You lose the typed Swift value and get &lt;code&gt;GeneratedContent&lt;/code&gt; you read by property name, which is the right trade when the schema is data.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the type system can't promise
&lt;/h2&gt;

&lt;p&gt;This is the section I wanted to write, because the guarantee is so clean that it invites over-trust. I ran the text extraction ten times across different variants of the struct. Nine runs returned exactly the six dated facts in the notice. One run returned eight:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; - 2026-09-30 [submission] Consent form for Science Exhibition  → submit(...)
 - 2026-10-30 [submission] Consent form for Science Exhibition  → submit(...)
 - 2026-10-30 [event]      Rehearsals end                        → none
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A second consent deadline a month later, and an end date for rehearsals that the notice never mentions. Both match the date regex. Both have a valid kind. Both would land in a parent's calendar. The schema did its job perfectly and the output is wrong.&lt;/p&gt;

&lt;p&gt;I suspected the &lt;code&gt;.count(1...8)&lt;/code&gt; guide was inviting the model to pad towards eight. I tested that with three runs each of a count range, no count guide, and &lt;code&gt;.maximumCount(8)&lt;/code&gt;. All nine runs returned five or six items with no invented dates. So the padding was not caused by the guide, it was ordinary sampling variance, and it will happen to your users at whatever rate it happens, which in my sample was one in ten.&lt;/p&gt;

&lt;p&gt;The optional field told the same story from the other side. &lt;code&gt;time&lt;/code&gt; is declared &lt;code&gt;String?&lt;/code&gt;. In one run the model filled it for zero of eight items. In another, for six of six. When I made it a required &lt;code&gt;String&lt;/code&gt; with a rule to return an empty string when the notice gives no time, it filled two of five, correctly: 09:00 for the meeting, 17:30 for the annual day, empty for the rest. Optional properties are a suggestion to the model. If a field matters, make it required and define what "absent" looks like.&lt;/p&gt;

&lt;p&gt;So the pattern that ships is: let the type system own the shape, and write a small validator that owns the truth. Mine is ten lines.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;NoticeValidator&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;noticeDate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Date&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;horizon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;TimeInterval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;86_400&lt;/span&gt;   &lt;span class="c1"&gt;// nothing more than four months out&lt;/span&gt;

    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;notice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;NoticeItem&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;fmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;DateFormatter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dateFormat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"yyyy-MM-dd"&lt;/span&gt;
        &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;seen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;notice&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
            &lt;span class="k"&gt;guard&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;noticeDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;noticeDate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addingTimeInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;horizon&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rawValueForDedup&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inserted&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;extension&lt;/span&gt; &lt;span class="kt"&gt;NoticeItem&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="kt"&gt;Kind&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;rawValueForDedup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;describing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dates inside the notice's window, positive amounts, no duplicate date-and-kind pairs. That validator would have dropped both invented items. It would not have caught the fee date that was two days early in the photo run, and nothing short of showing the parent the original alongside the extraction will. For a payment deadline, that is the correct UI anyway.&lt;/p&gt;

&lt;p&gt;One more rule I now follow: run every prompt three times before deciding a pattern works or does not. Both of my "findings" about optional fields reversed between runs. A single run of an on-device model tells you what is possible, not what is typical.&lt;/p&gt;




&lt;h2&gt;
  
  
  The error type changed in iOS 27
&lt;/h2&gt;

&lt;p&gt;The last surprise was in the failure path. I fed the model forty copies of the notice to overflow the context and caught the iOS 26 error type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="c1"&gt;// snippet: skip&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kt"&gt;LanguageModelSession&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="kt"&gt;GenerationError&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// iOS 26: .exceededContextWindowSize, .guardrailViolation, .decodingFailure ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It was not caught. In iOS 27 the session throws the new &lt;code&gt;LanguageModelError&lt;/code&gt;, which is shared across on-device, Private Cloud Compute and third-party models, and its cases are different:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;safeExtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SchoolNotice&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;noticeText&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;error&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kt"&gt;LanguageModelError&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;contextSizeExceeded&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Trim the input; the window on this device is &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="kt"&gt;SystemLanguageModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;contextSize&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt; tokens"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;guardrailViolation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;refusal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The model declined this content"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rateLimited&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Retry later"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;unsupportedGenerationGuide&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"A guide on this type is not supported by this model"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unsupportedLanguageOrLocale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unsupportedCapability&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;unsupportedTranscriptContent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Route to a fallback model"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="kd"&gt;@unknown&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Unknown: &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Other error: &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The message it carried was exact: "Content contains 10277 tokens, which exceeds the maximum allowed context size of 4096." If your iOS 26 code catches &lt;code&gt;GenerationError&lt;/code&gt; and nothing else, the overflow now falls through to your generic handler. Catch both while you support both versions.&lt;/p&gt;




&lt;h2&gt;
  
  
  What goes in the kit
&lt;/h2&gt;

&lt;p&gt;Module 2 of the OnDevice AI Starter Kit is this article as code: the &lt;code&gt;SchoolNotice&lt;/code&gt; schema as a template for any "document to typed items" job, the streaming view model that appends rows as snapshots arrive, the validator with a protocol so you can swap the rules, a token budget helper that reads &lt;code&gt;contextSize&lt;/code&gt; and the schema cost at launch, and a test target that runs each prompt three times and asserts on the distribution, not on a single answer.&lt;/p&gt;

&lt;p&gt;Article 3 is tool calling: letting the model call your Swift functions to look things up, with the same typed arguments you have just seen, and the safety rules that stop it calling the wrong one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ship this without an API bill
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The OnDevice AI Starter Kit&lt;/strong&gt; is the SwiftUI template behind this series: availability handling, a session wrapper, typed output schemas, tool calling, streaming, and a fallback route to Claude, with tests and an ACT-iOS skill file so your coding agent understands it. Early-bird $29 until 31 October, then $49. Pre-orders are open on Gumroad and the kit ships on 27 October.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/ondevice-ai-kit" rel="noopener noreferrer"&gt;Get the kit →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/documentation/foundationmodels/generating-swift-data-structures-with-guided-generation" rel="noopener noreferrer"&gt;Generating Swift data structures with guided generation&lt;/a&gt; (Apple Developer Documentation)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/videos/play/wwdc2025/301/" rel="noopener noreferrer"&gt;Deep dive into the Foundation Models framework, WWDC25 session 301&lt;/a&gt; (Apple Developer)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/videos/play/wwdc2026/241/" rel="noopener noreferrer"&gt;What's new in the Foundation Models framework, WWDC26 session 241&lt;/a&gt; (Apple Developer)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/documentation/foundationmodels" rel="noopener noreferrer"&gt;Foundation Models framework documentation&lt;/a&gt; (Apple Developer)&lt;/li&gt;
&lt;li&gt;Measurements in this article: macOS 27.0 (26A428), Xcode 27.0 (27A266a), MacBook Pro 14-inch 2021 with M1 Pro and 16 GB, on-device model variant "AFM 3 Core". All snippets type-checked against the iOS 27.0 SDK.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment, with complete code examples. The validation-after-generation pattern in this article is the same one the book uses for every tool result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write about &lt;strong&gt;AI tools, AI agents, and iOS development with AI&lt;/strong&gt;, practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for the full series&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>foundationmodels</category>
      <category>ios</category>
      <category>swift</category>
      <category>ai</category>
    </item>
    <item>
      <title>Apple's Foundation Models Framework: What Actually Runs on the iPhone, and What Doesn't</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Thu, 24 Sep 2026 06:45:27 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/apples-foundation-models-framework-what-actually-runs-on-the-iphone-and-what-doesnt-j4f</link>
      <guid>https://dev.to/iniyarajan86/apples-foundation-models-framework-what-actually-runs-on-the-iphone-and-what-doesnt-j4f</guid>
      <description>&lt;p&gt;&lt;em&gt;The framework gives every iOS app a free on-device language model through one Swift API. Here is what it is, what it can and cannot do, who can run it, and why September 2026 is the moment to build on it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Foundation Models framework, shipped with iOS 26 and expanded in iOS 27 on 14 September 2026, lets your app call the same on-device model that powers Apple Intelligence. No API key, no server, no per-token bill.&lt;/li&gt;
&lt;li&gt;The on-device model is about 3 billion parameters with an 8,192-token context. It is built for short, bounded tasks: classify, summarise, extract, tag, route. It is not built to be ChatGPT.&lt;/li&gt;
&lt;li&gt;When you need more, the same API reaches a larger model on Private Cloud Compute with a 32,000-token context and reasoning. Apps under 2 million first-time downloads use it at no cloud cost.&lt;/li&gt;
&lt;li&gt;Since iOS 27 the same session can also be backed by Claude, Gemini, or an open model you ship yourself. Your app code does not change; only the model behind it does.&lt;/li&gt;
&lt;li&gt;It only runs on iPhone 15 Pro and later, M-series iPads and Macs, and Vision Pro, in 16 languages, and not for accounts in mainland China. Your app must handle "unavailable" gracefully, and this series will show how.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the first of six articles on building with the framework. Each one is written from a module of a starter kit I am shipping alongside the series, so the code exists before the prose does.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the framework actually is
&lt;/h2&gt;

&lt;p&gt;Apple Intelligence has been running a language model on iPhones since late 2024, but until iOS 26 only Apple's own features could use it. The Foundation Models framework opened that model to third-party apps through a native Swift API: you create a session, give it instructions, send it a prompt, and get a response. Everything happens on the device.&lt;/p&gt;

&lt;p&gt;Three properties make it different from calling a cloud model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is free at any scale.&lt;/strong&gt; There is no inference bill because there is no inference server. An app with ten users and an app with ten million users pay the same for on-device generation, which is nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It works offline and never uploads the prompt.&lt;/strong&gt; The user's text stays in the user's memory. For anything touching health, finance, messages, or photos, that changes what you can build and what your privacy label says.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output can be typed.&lt;/strong&gt; Instead of asking for JSON and parsing a string, you declare a Swift type with a few annotations and the framework guarantees the response matches it. The model cannot return a field you did not define or a value outside the guide you gave it. Article 2 covers this in depth.&lt;/p&gt;

&lt;p&gt;The framework arrived with iOS 26, iPadOS 26, macOS Tahoe 26, and visionOS 26 in September 2025. The 2026 update, announced at WWDC in June and released with iOS 27 this month, is where it grew from "a small model in your app" into a full model-routing layer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What runs where
&lt;/h2&gt;

&lt;p&gt;This is the part most coverage blurs. There are now four places a request can go, and the same session API addresses all of them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;On-device model&lt;/th&gt;
&lt;th&gt;Private Cloud Compute&lt;/th&gt;
&lt;th&gt;Third-party cloud&lt;/th&gt;
&lt;th&gt;Local open models&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Since&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;iOS 26&lt;/td&gt;
&lt;td&gt;iOS 27&lt;/td&gt;
&lt;td&gt;iOS 27&lt;/td&gt;
&lt;td&gt;iOS 27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;About 3 billion parameters&lt;/td&gt;
&lt;td&gt;Larger, Apple does not publish a count&lt;/td&gt;
&lt;td&gt;Claude, Gemini, any provider&lt;/td&gt;
&lt;td&gt;Whatever you ship via Core AI or MLX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context window&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8,192 tokens&lt;/td&gt;
&lt;td&gt;32,000 tokens&lt;/td&gt;
&lt;td&gt;Provider's limit&lt;/td&gt;
&lt;td&gt;Model's limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reasoning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes, with selectable depth&lt;/td&gt;
&lt;td&gt;Provider dependent&lt;/td&gt;
&lt;td&gt;Model dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image input&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, since iOS 27&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Provider dependent&lt;/td&gt;
&lt;td&gt;Model dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost to you&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nothing&lt;/td&gt;
&lt;td&gt;Nothing under 2 million first-time downloads&lt;/td&gt;
&lt;td&gt;Provider's per-token price&lt;/td&gt;
&lt;td&gt;Nothing, but you carry the model size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data leaves the device&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Never&lt;/td&gt;
&lt;td&gt;Yes, to Apple silicon servers with no prompt storage&lt;/td&gt;
&lt;td&gt;Yes, to the provider&lt;/td&gt;
&lt;td&gt;Never&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Works offline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feh6tp71obx76cbqekuax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feh6tp71obx76cbqekuax.png" alt="One session API, four places a request can go: on-device, Private Cloud Compute, third-party cloud, local open models" width="800" height="528"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Your app code stays the same. Only the model behind the session changes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The on-device model is the one this series is mostly about, because it is the one with zero marginal cost and zero privacy exposure. Apple's own numbers for it: mixed 2-bit and 4-bit quantisation averaging 3.7 bits per weight, roughly 0.6 milliseconds of time-to-first-token per prompt token, and about 30 tokens per second of generation on an iPhone 15 Pro. Apple's benchmarks place it ahead of Phi-3-mini, Mistral-7B, Gemma-7B, and Llama-3-8B on their instruction-following evaluations.&lt;/p&gt;

&lt;p&gt;The context window doubled from 4,096 tokens at launch to 8,192 in iOS 26.4, and the framework now exposes the context size and a token counter so you can budget prompts instead of guessing.&lt;/p&gt;

&lt;p&gt;Private Cloud Compute is Apple's answer to "but my task needs a bigger model." Requests go to Apple silicon servers, prompts are not stored, and the privacy claims are verifiable by independent researchers. For developers there is no account, no key, and no billing setup. If your app is in the App Store Small Business Program, meaning under 2 million total first-time downloads, the cloud model costs nothing. Larger apps get higher limits through iCloud+.&lt;/p&gt;

&lt;p&gt;The third-party route is the surprising one. iOS 27 introduced a Language Model protocol. Anthropic and Google publish Swift packages that conform to it, so a session backed by Claude or Gemini is a one-line swap. You pay the provider directly and handle their keys yourself, which Apple is explicit about: never in the binary, always through the Keychain.&lt;/p&gt;




&lt;h2&gt;
  
  
  What you get in the box
&lt;/h2&gt;

&lt;p&gt;Beyond raw generation, the framework ships the pieces you would otherwise build yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guided generation.&lt;/strong&gt; Declare a struct, annotate its fields with plain-language guides, and the model fills it. Enums, nested types, arrays, and numeric ranges all work. This is the feature that makes the small model useful, because a 3 billion parameter model that must return one of four categories is far more reliable than one asked to write free text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool calling.&lt;/strong&gt; The model can invoke functions you define, with typed arguments, and use the result in its answer. iOS 27 added system tools you do not have to write: OCR and barcode reading from the Vision framework, and a Spotlight-backed search tool that gives you fully local retrieval over the user's own content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streaming.&lt;/strong&gt; Responses arrive as partial results you can render as they generate, including partially filled typed structures, so a form can populate field by field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sessions with memory.&lt;/strong&gt; A session holds instructions and a transcript, so multi-turn interactions work without you managing history. iOS 27's Dynamic Profiles let one session switch instructions, tools, and even the backing model mid-conversation while keeping the transcript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image input.&lt;/strong&gt; Since iOS 27 the on-device model accepts images alongside text, at any size and aspect ratio. Larger images cost more tokens and more latency, but there is no cropping or preprocessing on your side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An evaluations framework.&lt;/strong&gt; New in 2026, a Swift framework for measuring whether your prompts and features behave as intended across many inputs, with statistics rather than a unit test that passes on one example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adapters.&lt;/strong&gt; You can train a small LoRA adapter for a specialised task and ship it with your app. Most apps will not need this, and it is out of scope for the series.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who can actually run it
&lt;/h2&gt;

&lt;p&gt;This is where a lot of first projects go wrong. The framework compiles for every device, but the model only exists on some of them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iPhone&lt;/td&gt;
&lt;td&gt;iPhone 15 Pro, 15 Pro Max, every iPhone 16 and later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPad&lt;/td&gt;
&lt;td&gt;Any model with M1 or later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mac&lt;/td&gt;
&lt;td&gt;Any Apple silicon Mac, M1 or later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vision Pro&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple Watch&lt;/td&gt;
&lt;td&gt;Series 9 and later, paired, for Private Cloud Compute since watchOS 27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple Intelligence&lt;/td&gt;
&lt;td&gt;Must be switched on by the user and the model downloaded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Languages&lt;/td&gt;
&lt;td&gt;English, Chinese (simplified and traditional), Danish, Dutch, French, German, Italian, Japanese, Korean, Norwegian, Portuguese, Spanish, Swedish, Turkish, Vietnamese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regions&lt;/td&gt;
&lt;td&gt;Unavailable for devices bought in mainland China or accounts based there. Some features limited in the EU&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In practice that means the iPhone 12, 13, 14, and the base 15 will never run the on-device model. That is a large share of the installed base in India and most of the world. Your app has to work without it.&lt;/p&gt;

&lt;p&gt;The framework tells you why the model is unavailable with one of three reasons: the device is not eligible, Apple Intelligence is switched off, or the model is still downloading. Each deserves a different response in your UI. Not eligible means hide the feature or route to the cloud. Switched off means a one-line prompt to enable it. Downloading means wait and retry. The starter kit's first module is exactly this decision tree, because it is the one every app needs and the one nobody writes about.&lt;/p&gt;

&lt;p&gt;A note on development machines: the model runs in the iOS Simulator only when the host Mac has Apple Intelligence enabled, and the Mac, Xcode, and simulator runtime must all be version 26 or later. I hit the "Apple Intelligence not enabled" reason on my own M1 Pro until I matched Siri's language to the system language, which is the requirement the settings pane quietly enforces.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it is not good at
&lt;/h2&gt;

&lt;p&gt;Apple is unusually direct about this, and the series will be too.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Long documents.&lt;/strong&gt; 8,192 tokens is roughly 6,000 words including your instructions and the model's answer. Summarising a contract is a cloud job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-ended reasoning.&lt;/strong&gt; The on-device model does not reason step by step. Multi-hop questions, planning, and maths go to Private Cloud Compute, which does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;World knowledge.&lt;/strong&gt; A 3 billion parameter model knows far less than a frontier model. Ask it to work on the text you give it, not to recall facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Being a chatbot.&lt;/strong&gt; It can hold a conversation, but a general assistant is not what it was tuned for and users will notice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails.&lt;/strong&gt; The model refuses some legitimate requests, and Apple says false positives improved in iOS 27 with more to come. Test your real prompts, not toy ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unsupported languages.&lt;/strong&gt; Tamil, Hindi, and most Indian languages are not on the list. If your users write in them, the on-device route is not available yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern that comes out of this list is the one the whole series builds toward: use the on-device model for the cheap, bounded, private decisions, and route only what it cannot do to a larger model. Done well, the on-device model handles most requests and the cloud bill shrinks to a fraction of what it would be.&lt;/p&gt;




&lt;h2&gt;
  
  
  The cost argument, in numbers
&lt;/h2&gt;

&lt;p&gt;Take a modest AI feature: classify each incoming item into one of a few categories and pull out two fields. Call it 500 tokens in, 50 out, 20 times per user per day.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Cloud API at typical small-model rates&lt;/th&gt;
&lt;th&gt;On-device model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Per request&lt;/td&gt;
&lt;td&gt;Roughly $0.0001 to $0.0005&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10,000 daily users, monthly&lt;/td&gt;
&lt;td&gt;$600 to $3,000&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100,000 daily users, monthly&lt;/td&gt;
&lt;td&gt;$6,000 to $30,000&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend to build and run&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy review for user data leaving the device&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The cloud figures vary by provider and model, and a careful team would cache and batch. The point is not the exact number. The point is that a feature which needed a business case now needs an afternoon.&lt;/p&gt;




&lt;h2&gt;
  
  
  A first run on my own machine
&lt;/h2&gt;

&lt;p&gt;Before writing this I compiled a small test against the framework on an M1 Pro MacBook. A support ticket went in as text, and a typed structure came out with two fields: which department owns it and how severe it is, on a scale I defined in a one-line guide. The first, cold call took about three seconds, most of it loading the model. Warm calls are well under a second on the Mac, and an iPhone 15 Pro will be slower than an M1 Pro. I will publish proper device numbers in article 6 once I have a supported phone in hand.&lt;/p&gt;

&lt;p&gt;If that example sounds familiar, it is the same idea as TypeSafe AI's Jev, which I covered last week: typed decisions with a bounded answer space instead of free text. The difference is that this one ships inside iOS and costs nothing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why now
&lt;/h2&gt;

&lt;p&gt;Three things line up in September 2026. iOS 27 shipped on 14 September with the routing layer, image input, and free cloud fallback, which turned a curiosity into an architecture. The supported device base has had two full iPhone cycles to grow. And almost nobody has published a working pattern for shipping it, so the search results for every question a developer will ask are still thin.&lt;/p&gt;

&lt;p&gt;That is the window this series is aimed at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The six articles&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;This one: what the framework is, what runs where, who can use it.&lt;/li&gt;
&lt;li&gt;Structured output: typed results from an on-device model, and why it beats JSON parsing.&lt;/li&gt;
&lt;li&gt;Tool calling: letting the model call your Swift functions, safely.&lt;/li&gt;
&lt;li&gt;Streaming into SwiftUI: partial results, cancellation, and honest UI.&lt;/li&gt;
&lt;li&gt;The fallback architecture: on-device first, Private Cloud Compute or Claude only when needed, and what it does to your cost line.&lt;/li&gt;
&lt;li&gt;Shipping: availability handling, privacy labels, App Review, and real device performance.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Ship this without an API bill
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The OnDevice AI Starter Kit&lt;/strong&gt; is the SwiftUI template behind this series: availability handling, a session wrapper, typed output schemas, tool calling, streaming, and a fallback route to Claude, with tests and an ACT-iOS skill file so your coding agent understands it. Early-bird $29 until 31 October, then $49. Pre-orders are open on Gumroad and the kit ships on 27 October.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/ondevice-ai-kit" rel="noopener noreferrer"&gt;Get the kit →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/documentation/foundationmodels" rel="noopener noreferrer"&gt;Foundation Models framework documentation&lt;/a&gt; (Apple Developer)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/videos/play/wwdc2026/241/" rel="noopener noreferrer"&gt;What's new in the Foundation Models framework, WWDC26 session 241&lt;/a&gt; (Apple Developer)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.apple.com/wwdc26/guides/apple-intelligence/" rel="noopener noreferrer"&gt;WWDC26 Apple Intelligence guide&lt;/a&gt; (Apple Developer)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.apple.com/newsroom/2026/06/apple-aids-app-development-with-new-intelligence-frameworks-and-advanced-tools/" rel="noopener noreferrer"&gt;Apple aids app development with new intelligence frameworks and advanced tools&lt;/a&gt; (Apple Newsroom, June 2026)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://machinelearning.apple.com/research/introducing-apple-foundation-models" rel="noopener noreferrer"&gt;Introducing Apple's On-Device and Server Foundation Models&lt;/a&gt; (Apple Machine Learning Research)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://support.apple.com/en-in/121115" rel="noopener noreferrer"&gt;Apple Intelligence: supported devices, languages, and regions&lt;/a&gt; (Apple Support)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://9to5mac.com/2026/09/09/apple-confirms-ios-27-release-date-september-14/" rel="noopener noreferrer"&gt;Apple confirms iOS 27 release date: September 14&lt;/a&gt; (9to5Mac)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.appcoda.com/foundation-models/" rel="noopener noreferrer"&gt;Getting Started with Foundation Models in iOS 26&lt;/a&gt; (AppCoda)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment, with complete code examples. The routing and tool-selection patterns in the book are the same ones the on-device fallback architecture uses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write about &lt;strong&gt;AI tools, AI agents, and iOS development with AI&lt;/strong&gt;, practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for the full series&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>foundationmodels</category>
      <category>ios</category>
      <category>swift</category>
      <category>ai</category>
    </item>
    <item>
      <title>ChatGPT vs Claude vs Gemini: Which Wins in 2026?</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Wed, 23 Sep 2026 11:47:18 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/chatgpt-vs-claude-vs-gemini-which-wins-in-2026-3jij</link>
      <guid>https://dev.to/iniyarajan86/chatgpt-vs-claude-vs-gemini-which-wins-in-2026-3jij</guid>
      <description>&lt;h1&gt;
  
  
  ChatGPT vs Claude vs Gemini: Which AI Wins in 2026?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlhtmip3g9vbmqv2kjqn.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlhtmip3g9vbmqv2kjqn.jpeg" alt="AI models comparison" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@bertellifotografia" rel="noopener noreferrer"&gt;Matheus Bertelli&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's a question worth sitting with: &lt;em&gt;Do you actually know which AI you're using, or are you just using the one you signed up for first?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most of us have settled into a comfortable AI routine without ever seriously stress-testing the alternatives. We open ChatGPT out of habit. We switch to Claude when we need something written well. We pop into Gemini when we want a Google Docs integration. And somewhere along the way, we stopped asking whether this setup actually makes sense.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/chatgpt-vs-claude-vs-gemini-2026-comparison-2blm"&gt;ChatGPT vs Claude vs Gemini: 2026 Comparison&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This ChatGPT vs Claude vs Gemini comparison isn't about declaring a winner. It's about helping you make a smarter choice — one that matches how &lt;em&gt;you&lt;/em&gt; actually work. By the end of this chapter, you'll have a clear framework for picking the right tool for the right job, and maybe a few reasons to rethink the habits you've built on autopilot.&lt;/p&gt;


&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The "Serious Work" AI vs the "Just Vibing" AI&lt;/li&gt;
&lt;li&gt;ChatGPT: The Swiss Army Knife&lt;/li&gt;
&lt;li&gt;Claude: The Careful Thinker&lt;/li&gt;
&lt;li&gt;Gemini: The Google Native&lt;/li&gt;
&lt;li&gt;Head-to-Head Comparison&lt;/li&gt;
&lt;li&gt;Which AI Should You Actually Use?&lt;/li&gt;
&lt;li&gt;A Practical Code Example&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  The "Serious Work" AI vs the "Just Vibing" AI
&lt;/h2&gt;

&lt;p&gt;Something subtle has happened in 2026. Most developers and knowledge workers have quietly split their AI usage into two modes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/chatgpt-vs-claude-vs-gemini-which-ai-wins-30on"&gt;ChatGPT vs Claude vs Gemini: Which AI Wins?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There's the &lt;strong&gt;serious work AI&lt;/strong&gt; — the one you open when you need to write a technical spec, debug a gnarly piece of code, or synthesize a 40-page research document. And then there's the &lt;strong&gt;just vibing AI&lt;/strong&gt; — the one you use to brainstorm silly ideas at 11pm, draft a casual tweet, or ask something you'd be embarrassed to Google.&lt;/p&gt;

&lt;p&gt;Here's the uncomfortable truth: these two modes often benefit from &lt;em&gt;different&lt;/em&gt; tools. And the best advice — the kind that's actually hard to follow — is to resist the gravitational pull of convenience and deliberately match your tool to your task.&lt;/p&gt;

&lt;p&gt;Let's break down the three biggest players so we can do exactly that.&lt;/p&gt;


&lt;h2&gt;
  
  
  ChatGPT: The Swiss Army Knife
&lt;/h2&gt;

&lt;p&gt;ChatGPT, built by OpenAI, remains the most recognized AI assistant in 2026. The GPT-4o family, combined with newer reasoning-optimized models like o3, gives ChatGPT an unusually wide capability surface. It codes, it writes, it browses, it generates images, it analyzes files. It's the AI equivalent of a competent generalist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where ChatGPT excels:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coding tasks.&lt;/strong&gt; The integration with tools like Cursor IDE and its native code interpreter make it a go-to for developers. It handles multi-file reasoning, debugging, and test generation reliably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin and tool ecosystem.&lt;/strong&gt; No other AI has ChatGPT's breadth of third-party integrations in 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multimodal flexibility.&lt;/strong&gt; Image input, voice mode, image generation via DALL-E — it's all under one roof.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning tasks.&lt;/strong&gt; The o3 model variant is genuinely impressive for step-by-step logical problems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where ChatGPT struggles:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It can be confidently wrong in ways that feel authoritative. Hallucinations are less frequent than in earlier versions, but they still happen — and the confident tone makes them easy to miss.&lt;/li&gt;
&lt;li&gt;The interface is getting cluttered. With so many modes and models, newer users especially can feel overwhelmed choosing the right configuration.&lt;/li&gt;
&lt;li&gt;Long-form writing quality, while good, can sometimes feel a bit generic or over-structured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; ChatGPT is the AI you reach for when you need range. It's not always the &lt;em&gt;best&lt;/em&gt; at any single thing, but it's rarely bad at anything.&lt;/p&gt;


&lt;h2&gt;
  
  
  Claude: The Careful Thinker
&lt;/h2&gt;

&lt;p&gt;Anthropic's Claude has quietly become the favorite among writers, researchers, and thoughtful developers who care about &lt;em&gt;how&lt;/em&gt; an answer is constructed, not just &lt;em&gt;what&lt;/em&gt; it says. In 2026, Claude's extended context window and nuanced reasoning have made it the preferred tool for anyone working with large documents or complex, multi-part arguments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where Claude excels:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Long-form writing quality.&lt;/strong&gt; Claude's prose is noticeably more natural and less robotic. If you're writing something that needs to sound like a human wrote it, Claude is usually the answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document analysis.&lt;/strong&gt; Drop in a 100,000-token research paper or legal brief. Claude handles it with patience and precision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nuanced reasoning.&lt;/strong&gt; Claude tends to hedge appropriately, surface its own uncertainty, and push back when a question has flawed premises. That's actually valuable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code review and explanation.&lt;/strong&gt; It excels at explaining &lt;em&gt;why&lt;/em&gt; code works, not just showing you &lt;em&gt;what&lt;/em&gt; to write.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where Claude struggles:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No persistent memory across sessions by default (depending on your tier), which breaks long-running projects.&lt;/li&gt;
&lt;li&gt;The tool and plugin ecosystem is much thinner than ChatGPT's.&lt;/li&gt;
&lt;li&gt;It can be overly cautious on edge-case requests, sometimes frustratingly so.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Claude is the AI you use when quality of thought matters more than speed of execution. It's the serious work AI for many developers and researchers.&lt;/p&gt;


&lt;h2&gt;
  
  
  Gemini: The Google Native
&lt;/h2&gt;

&lt;p&gt;Google's Gemini has come a long way since its rocky debut. In 2026, the Gemini 1.5 Pro and Ultra models have matured significantly, and the real story is ecosystem integration. If your professional life runs on Google Workspace — Docs, Sheets, Gmail, Drive — Gemini is embedded in ways no competitor can match.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where Gemini excels:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Workspace integration.&lt;/strong&gt; Summarizing a Gmail thread, drafting a reply in your own voice, analyzing a Sheets dataset — Gemini does this natively and smoothly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time information.&lt;/strong&gt; Backed by Google Search, Gemini retrieves current information with fewer hallucinations on factual, web-searchable questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multimodal reasoning.&lt;/strong&gt; Gemini Ultra handles text, images, audio, and video in genuinely impressive ways, especially for media-heavy workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code generation via Gemini Advanced.&lt;/strong&gt; Solid output, particularly for Python and web development tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where Gemini struggles:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Outside of Google's ecosystem, the standalone product still feels slightly less polished than ChatGPT or Claude.&lt;/li&gt;
&lt;li&gt;Long-form creative writing quality lags behind Claude.&lt;/li&gt;
&lt;li&gt;Privacy-conscious users may hesitate given the deep Google data integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Gemini wins on integration and real-time data. It's not always the best reasoner, but for Google-native workflows, nothing else comes close.&lt;/p&gt;


&lt;h2&gt;
  
  
  Head-to-Head Comparison
&lt;/h2&gt;

&lt;p&gt;Let's look at how the three AIs connect within a typical developer or knowledge worker's decision flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfjq8gWW91ciBUYXNrXSAtLT4gQntXaGF0IHR5cGUgb2Ygd29yaz99CiAgQiAtLT588J-SuyBDb2RpbmcgLyBEZWJ1Z2dpbmd8IENbQ2hhdEdQVCBvMyBvciBDbGF1ZGVdCiAgQiAtLT584pyN77iPIExvbmctZm9ybSBXcml0aW5nfCBEW0NsYXVkZV0KICBCIC0tPnzwn5SNIFJlc2VhcmNoIC8gQ3VycmVudCBFdmVudHN8IEVbR2VtaW5pIG9yIFBlcnBsZXhpdHldCiAgQiAtLT588J-TiiBHb29nbGUgV29ya3NwYWNlfCBGW0dlbWluaV0KICBDIC0tPiBHe05lZWQgYnJvYWQgaW50ZWdyYXRpb25zP30KICBHIC0tPnxZZXN8IEhb4pyFIENoYXRHUFRdCiAgRyAtLT58Tm8g4oCUIG5lZWQgZGVlcCBleHBsYW5hdGlvbnwgSVvinIUgQ2xhdWRlXQogIEQgLS0-IEpb4pyFIENsYXVkZSB3aW5zIGhlcmVdCiAgRSAtLT4gS3tJbnNpZGUgR29vZ2xlIGVjb3N5c3RlbT99CiAgSyAtLT58WWVzfCBMW-KchSBHZW1pbmldCiAgSyAtLT58Tm98IE1b4pyFIFBlcnBsZXhpdHkgQUldCiAgRiAtLT4gTlvinIUgR2VtaW5pIE5hdGl2ZV0%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfjq8gWW91ciBUYXNrXSAtLT4gQntXaGF0IHR5cGUgb2Ygd29yaz99CiAgQiAtLT588J-SuyBDb2RpbmcgLyBEZWJ1Z2dpbmd8IENbQ2hhdEdQVCBvMyBvciBDbGF1ZGVdCiAgQiAtLT584pyN77iPIExvbmctZm9ybSBXcml0aW5nfCBEW0NsYXVkZV0KICBCIC0tPnzwn5SNIFJlc2VhcmNoIC8gQ3VycmVudCBFdmVudHN8IEVbR2VtaW5pIG9yIFBlcnBsZXhpdHldCiAgQiAtLT588J-TiiBHb29nbGUgV29ya3NwYWNlfCBGW0dlbWluaV0KICBDIC0tPiBHe05lZWQgYnJvYWQgaW50ZWdyYXRpb25zP30KICBHIC0tPnxZZXN8IEhb4pyFIENoYXRHUFRdCiAgRyAtLT58Tm8g4oCUIG5lZWQgZGVlcCBleHBsYW5hdGlvbnwgSVvinIUgQ2xhdWRlXQogIEQgLS0-IEpb4pyFIENsYXVkZSB3aW5zIGhlcmVdCiAgRSAtLT4gS3tJbnNpZGUgR29vZ2xlIGVjb3N5c3RlbT99CiAgSyAtLT58WWVzfCBMW-KchSBHZW1pbmldCiAgSyAtLT58Tm98IE1b4pyFIFBlcnBsZXhpdHkgQUldCiAgRiAtLT4gTlvinIUgR2VtaW5pIE5hdGl2ZV0%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="1091" height="907"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a quick comparative breakdown across key dimensions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;ChatGPT&lt;/th&gt;
&lt;th&gt;Claude&lt;/th&gt;
&lt;th&gt;Gemini&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-form writing&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time web data&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document analysis&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecosystem integrations&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning / Logic&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy / Trust&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Worth knowing:&lt;/strong&gt; If you ever want to build your own AI tool instead of paying for all of them — I wrote a hands-on guide covering agents, RAG, and deployment end-to-end. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Which AI Should You Actually Use?
&lt;/h2&gt;

&lt;p&gt;The honest answer: probably more than one. But let's build a decision flowchart that makes the choice fast and practical.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_CfmoAgU3RhcnQ6IFdoYXQncyBteSBnb2FsP10gLS0-IEJ7SXMgaXQgY29kZS1yZWxhdGVkP30KICBCIC0tPnxZZXN8IEN7TmVlZCByZWFzb25pbmcgdHJhY2VzP30KICBDIC0tPnxZZXN8IERb8J-kliBDaGF0R1BUIG8zXQogIEMgLS0-fE5vIOKAlCBuZWVkIGV4cGxhbmF0aW9ufCBFW_Cfp6AgQ2xhdWRlXQogIEIgLS0-fE5vfCBGe0lzIGl0IHdyaXRpbmc_fQogIEYgLS0-fExvbmctZm9ybSAvIG51YW5jZWR8IEdb4pyN77iPIENsYXVkZV0KICBGIC0tPnxTaG9ydCAvIGNhc3VhbHwgSFvimqEgQW55IG9mIHRoZSB0aHJlZV0KICBGIC0tPnxOb3wgSXtSZXNlYXJjaCBvciBmYWN0dWFsP30KICBJIC0tPnxSZWFsLXRpbWUgd2VifCBKW_CflI0gR2VtaW5pIG9yIFBlcnBsZXhpdHldCiAgSSAtLT58RG9jdW1lbnQgZGVlcC1kaXZlfCBLW_Cfk4QgQ2xhdWRlXQogIEkgLS0-fE5vfCBMe0dvb2dsZSBXb3Jrc3BhY2U_fQogIEwgLS0-fFllc3wgTVvwn5OKIEdlbWluaV0KICBMIC0tPnxOb3wgTlvwn5KsIENoYXRHUFQgZGVmYXVsdF0%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_CfmoAgU3RhcnQ6IFdoYXQncyBteSBnb2FsP10gLS0-IEJ7SXMgaXQgY29kZS1yZWxhdGVkP30KICBCIC0tPnxZZXN8IEN7TmVlZCByZWFzb25pbmcgdHJhY2VzP30KICBDIC0tPnxZZXN8IERb8J-kliBDaGF0R1BUIG8zXQogIEMgLS0-fE5vIOKAlCBuZWVkIGV4cGxhbmF0aW9ufCBFW_Cfp6AgQ2xhdWRlXQogIEIgLS0-fE5vfCBGe0lzIGl0IHdyaXRpbmc_fQogIEYgLS0-fExvbmctZm9ybSAvIG51YW5jZWR8IEdb4pyN77iPIENsYXVkZV0KICBGIC0tPnxTaG9ydCAvIGNhc3VhbHwgSFvimqEgQW55IG9mIHRoZSB0aHJlZV0KICBGIC0tPnxOb3wgSXtSZXNlYXJjaCBvciBmYWN0dWFsP30KICBJIC0tPnxSZWFsLXRpbWUgd2VifCBKW_CflI0gR2VtaW5pIG9yIFBlcnBsZXhpdHldCiAgSSAtLT58RG9jdW1lbnQgZGVlcC1kaXZlfCBLW_Cfk4QgQ2xhdWRlXQogIEkgLS0-fE5vfCBMe0dvb2dsZSBXb3Jrc3BhY2U_fQogIEwgLS0-fFllc3wgTVvwn5OKIEdlbWluaV0KICBMIC0tPnxOb3wgTlvwn5KsIENoYXRHUFQgZGVmYXVsdF0%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1904" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three rules of thumb we've found work well in practice:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Default to Claude for anything that will be read by another human.&lt;/strong&gt; The writing quality consistently outperforms the alternatives when it matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default to ChatGPT when you need tools, code execution, or broad integrations.&lt;/strong&gt; The ecosystem advantage is real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default to Gemini when your data lives in Google's world.&lt;/strong&gt; Fighting the native integration is just friction you don't need.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  A Practical Code Example
&lt;/h2&gt;

&lt;p&gt;Let's say you're building a small Python utility to route prompts to different AI APIs based on task type — a micro-orchestration pattern that's become increasingly popular in 2026.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Enum&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TaskType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Enum&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;CODING&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;coding&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;WRITING&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;writing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;RESEARCH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;WORKSPACE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;workspace&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;select_ai_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TaskType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Routes a task type to the most appropriate AI model endpoint.
    Returns model config for use in your API call.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;routing_map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;TaskType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CODING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;o3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Best reasoning + code execution for complex tasks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;TaskType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WRITING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-3-7-sonnet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Superior long-form writing quality&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;TaskType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RESEARCH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-1.5-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Real-time web grounding via Google Search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;TaskType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WORKSPACE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-ultra&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Native Google Workspace integration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;routing_map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unknown task type: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Routing to: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;provider&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; / &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reason: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;

&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TaskType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WRITING&lt;/span&gt;
    &lt;span class="n"&gt;model_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;select_ai_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# Use model_config to construct your API request
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern is simple but powerful. Rather than picking one AI and forcing it to do everything, we let the task type drive the model selection. It's the software equivalent of the advice that's hardest to follow: use the right tool for the right job, even when it's inconvenient.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: Is Claude better than ChatGPT for coding in 2026?
&lt;/h3&gt;

&lt;p&gt;For most coding tasks, ChatGPT (especially the o3 reasoning model) still edges out Claude on complex multi-step problems and tool use. However, Claude is often preferred for code &lt;em&gt;explanation&lt;/em&gt; and code &lt;em&gt;review&lt;/em&gt;, where nuanced communication matters as much as raw output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Does Gemini have access to real-time information?
&lt;/h3&gt;

&lt;p&gt;Yes. Gemini is grounded in Google Search by default, which gives it a meaningful advantage for current events, recent documentation, and factual web queries. ChatGPT also has browsing capability, but Gemini's integration tends to be more seamless and reliable for real-time lookups.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can I use ChatGPT, Claude, and Gemini together?
&lt;/h3&gt;

&lt;p&gt;Absolutely — and in 2026, this multi-AI workflow is increasingly common among power users and developers. Tools like the Python routing example above, or orchestration frameworks that call multiple model APIs, let you combine the strengths of each. Many developers use Claude for drafting, ChatGPT for code execution, and Gemini for research in a single workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Which AI is best for long documents and large context windows?
&lt;/h3&gt;

&lt;p&gt;Claude currently leads on practical long-context performance, handling very large inputs with strong coherence. Gemini 1.5 Pro also has an impressive context window and performs well on document-heavy tasks. ChatGPT has extended its context in recent releases but is generally considered slightly behind the other two for very large document analysis.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on building systems that work with multiple LLMs — routing, orchestration, and prompt engineering across providers — &lt;a href="https://www.amazon.in/s?k=llm+engineering+ai+agents&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI and LLM engineering books&lt;/a&gt; are a great starting point. They cover the practical engineering side that blog posts rarely do.&lt;/p&gt;

&lt;p&gt;For deploying your own AI-powered tools and APIs without the overhead of big cloud platforms, &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; is where I spin up most lightweight AI side projects — straightforward pricing, solid GPU droplets, and no surprise bills.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/chatgpt-vs-claude-vs-gemini-2026-comparison-2blm"&gt;ChatGPT vs Claude vs Gemini: 2026 Comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/chatgpt-vs-claude-vs-gemini-which-ai-wins-30on"&gt;ChatGPT vs Claude vs Gemini: Which AI Wins?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/grok-vs-chatgpt-which-ai-wins-in-2026-1dgc"&gt;Grok vs ChatGPT: Which AI Wins in 2026?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The ChatGPT vs Claude vs Gemini comparison doesn't have a clean winner — and that's actually good news. It means the field is genuinely competitive, and the tools are specialized enough that choosing deliberately gets you real results.&lt;/p&gt;

&lt;p&gt;Stop using whichever AI you signed up for first as your default for everything. Let your task type drive the choice. Write with Claude. Code and integrate with ChatGPT. Research and collaborate with Gemini. Build the multi-AI habit now, because the gap between developers who use AI strategically and those who use it casually is only going to widen from here.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>claudeai</category>
      <category>gemini</category>
      <category>aitoolscomparison</category>
    </item>
    <item>
      <title>How to Use AI to Reduce Manual Work</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Tue, 22 Sep 2026 11:48:02 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/how-to-use-ai-to-reduce-manual-work-4n9h</link>
      <guid>https://dev.to/iniyarajan86/how-to-use-ai-to-reduce-manual-work-4n9h</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fggk4k2yxzhuqrmumrgke.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fggk4k2yxzhuqrmumrgke.jpeg" alt="AI productivity workflow" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@thirdman" rel="noopener noreferrer"&gt;Thirdman&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The average knowledge worker spends nearly 60% of their time on work &lt;em&gt;about&lt;/em&gt; work — scheduling, summarizing, formatting, following up — rather than the actual thinking that moves projects forward. If that sounds familiar, learning how to use AI to reduce manual work isn't a nice-to-have anymore. It's the difference between spending your day in reactive mode and actually doing your best work.&lt;/p&gt;

&lt;p&gt;This chapter is a practical guide to cutting that overhead. Whether you're a developer drowning in repetitive tasks, a professional buried in email threads, or a beginner who just started from a different line than everyone else — AI can level the playing field fast.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Manual Work Keeps Creeping Back&lt;/li&gt;
&lt;li&gt;The Four Categories of Reducible Manual Work&lt;/li&gt;
&lt;li&gt;AI Workflow Architecture: How It All Connects&lt;/li&gt;
&lt;li&gt;Using AI for Email, Writing, and Communication&lt;/li&gt;
&lt;li&gt;Automating Repetitive Tasks with Code + AI&lt;/li&gt;
&lt;li&gt;No-Code AI Automation: Zapier, Make, and Beyond&lt;/li&gt;
&lt;li&gt;A Decision Flow for Choosing Your AI Approach&lt;/li&gt;
&lt;li&gt;AI for Meetings, Notes, and Research&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why Manual Work Keeps Creeping Back
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable truth: most of the manual work in your day wasn't planned. It accumulates. A meeting without an agenda needs a follow-up. A Slack message that needed a "quick answer" turns into a 20-minute back-and-forth. Documentation that nobody wrote becomes a question that only you can answer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/ai-assistant-for-work-tasks-stop-doing-it-manually-3h2m"&gt;AI Assistant for Work Tasks: Stop Doing It Manually&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Clean processes and clear communication reduce this — but they don't eliminate it. That's where AI steps in, not to replace your judgment, but to absorb the low-cognition overhead so your judgment is actually available when it matters.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/best-ai-tools-for-productivity-2026-ida"&gt;Best AI Tools for Productivity 2026&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is especially relevant in 2026, where AI tools have matured well past novelty. You're not experimenting anymore. You're choosing.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Four Categories of Reducible Manual Work
&lt;/h2&gt;

&lt;p&gt;Before you automate anything, it helps to know &lt;em&gt;what&lt;/em&gt; you're automating. Manual work generally falls into four buckets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Communication overhead&lt;/strong&gt; — writing emails, summarizing threads, drafting updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data wrangling&lt;/strong&gt; — reformatting spreadsheets, parsing logs, compiling reports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research and synthesis&lt;/strong&gt; — reading documentation, gathering context, summarizing findings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduling and coordination&lt;/strong&gt; — meeting prep, follow-ups, task tracking&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each bucket has a different best tool and approach. Trying to solve all of them with one prompt in ChatGPT is why most people feel like AI "didn't really help."&lt;/p&gt;


&lt;h2&gt;
  
  
  AI Workflow Architecture: How It All Connects
&lt;/h2&gt;

&lt;p&gt;Before diving into specific tactics, it helps to see the bigger picture. Here's how a modern AI-assisted productivity stack actually connects:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk6UgSW5wdXQgU291cmNlc10gLS0-IEJb8J-noCBBSSBMYXllcl0KICBBIC0tPiB8RW1haWwsIFNsYWNrLCBEb2NzfCBCCiAgQiAtLT4gQ1vimpnvuI8gQXV0b21hdGlvbiBFbmdpbmVdCiAgQiAtLT4gfFN1bW1hcmllcywgRHJhZnRzLCBJbnNpZ2h0c3wgQwogIEMgLS0-IERb8J-TiiBPdXRwdXQgQWN0aW9uc10KICBDIC0tPiB8WmFwaWVyIC8gTWFrZSAvIFNjcmlwdHN8IEQKICBEIC0tPiBFW_Cfk4EgUHJvamVjdCBNYW5hZ2VtZW50XQogIEQgLS0-IEZb8J-TpyBFbWFpbCAvIENhbGVuZGFyXQogIEQgLS0-IEdb8J-TnSBOb3RlcyAvIERvY3NdCiAgRSAtLT4gSFvwn5GkIFlvdSDigJQgUmV2aWV3ICYgRGVjaWRlXQogIEYgLS0-IEgKICBHIC0tPiBI%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk6UgSW5wdXQgU291cmNlc10gLS0-IEJb8J-noCBBSSBMYXllcl0KICBBIC0tPiB8RW1haWwsIFNsYWNrLCBEb2NzfCBCCiAgQiAtLT4gQ1vimpnvuI8gQXV0b21hdGlvbiBFbmdpbmVdCiAgQiAtLT4gfFN1bW1hcmllcywgRHJhZnRzLCBJbnNpZ2h0c3wgQwogIEMgLS0-IERb8J-TiiBPdXRwdXQgQWN0aW9uc10KICBDIC0tPiB8WmFwaWVyIC8gTWFrZSAvIFNjcmlwdHN8IEQKICBEIC0tPiBFW_Cfk4EgUHJvamVjdCBNYW5hZ2VtZW50XQogIEQgLS0-IEZb8J-TpyBFbWFpbCAvIENhbGVuZGFyXQogIEQgLS0-IEdb8J-TnSBOb3RlcyAvIERvY3NdCiAgRSAtLT4gSFvwn5GkIFlvdSDigJQgUmV2aWV3ICYgRGVjaWRlXQogIEYgLS0-IEgKICBHIC0tPiBI%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="727" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key insight here: &lt;strong&gt;you stay at the decision layer&lt;/strong&gt;. AI handles the transformation of raw inputs into structured, usable outputs. You review and act. This architecture scales whether you're a solo developer or part of a 50-person team.&lt;/p&gt;


&lt;h2&gt;
  
  
  Using AI to Reduce Manual Work in Email and Writing
&lt;/h2&gt;

&lt;p&gt;Email is the single highest-ROI place to apply AI. Not because it's glamorous, but because it compounds. Every professional sends dozens of emails per day. Shaving even 3 minutes per email adds up to hours per week.&lt;/p&gt;

&lt;p&gt;Here's a practical Python script that uses an LLM API to draft a professional reply given a raw email thread:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;draft_email_reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;professional&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    You are an expert communicator. Read the email thread below and draft a clear,
    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tone&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; reply that addresses all open questions. Keep it under 150 words.

    Email thread:
    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

    Draft reply:
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    From: Sarah
    Can you confirm the deadline for the Q3 report and who&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s reviewing it?
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;draft_email_reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;concise and friendly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't about letting AI write &lt;em&gt;for&lt;/em&gt; you. It's about letting AI produce a first draft you can edit in 30 seconds instead of writing from scratch in 5 minutes. That mental shift — from author to editor — is what makes the time savings feel real.&lt;/p&gt;

&lt;p&gt;For writing more broadly, tools like Claude excel at maintaining a consistent voice across longer documents. If you give it a style sample and a content brief, it can produce first drafts of proposals, documentation, or status updates that actually sound like you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automating Repetitive Tasks with Code + AI
&lt;/h2&gt;

&lt;p&gt;If you can write even basic Python, you're sitting on enormous leverage. Many repetitive tasks — renaming files, parsing CSVs, extracting data from PDFs, generating weekly reports — can be automated with a few dozen lines of code plus an AI API call.&lt;/p&gt;

&lt;p&gt;Here's an example of using AI to auto-summarize a folder of meeting transcripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarize_transcript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transcript_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize meeting transcripts into: key decisions, action items, and open questions. Be concise.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transcript_text&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_transcripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;summaries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;filepath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folder_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;summaries&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;summarize_transcript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ Summarized: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;summaries&lt;/span&gt;

&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;process_transcripts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./meeting_transcripts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;summary&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;--- &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; ---&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this once a week and you've reclaimed an hour of note-taking and synthesis. The script is intentionally simple — that's the point. You don't need to be a senior engineer to build this. You just need to start.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Quick plug:&lt;/strong&gt; If you want to go beyond tips and actually &lt;em&gt;build&lt;/em&gt; AI that handles tasks for you automatically — I wrote the playbook. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt; (185 pages, real code, production-ready)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  No-Code AI Automation: Zapier, Make, and Beyond
&lt;/h2&gt;

&lt;p&gt;Not every solution needs code. In 2026, platforms like Zapier and Make.com have deeply integrated AI steps into their workflows. You can build pipelines that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watch your inbox → extract action items with AI → add them to Notion automatically&lt;/li&gt;
&lt;li&gt;Receive a form submission → generate a personalized response draft → send for your approval&lt;/li&gt;
&lt;li&gt;Pull weekly sales data → summarize it with AI → post a digest to Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trick is treating AI as a &lt;strong&gt;transformation step&lt;/strong&gt;, not a magic answer machine. Feed it structured input, define a clear output format, and pipe that output somewhere useful. Most failed AI automations fail because the inputs are messy or the output has nowhere to go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical tip:&lt;/strong&gt; Start with one workflow you do manually every single week. Build that first. Don't try to automate everything — that's how you end up with a brittle, unmaintained automation graveyard.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Decision Flow for Choosing Your AI Approach
&lt;/h2&gt;

&lt;p&gt;Choosing the right tool is half the battle. Use this decision flow when you encounter a repetitive task:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_CflIQgUmVwZXRpdGl2ZSBUYXNrIElkZW50aWZpZWRdIC0tPiBCe0RvZXMgaXQgaW52b2x2ZSB0ZXh0IG9yIGRhdGE_fQogIEIgLS0-fFRleHR8IEN7RG8geW91IGhhdmUgQVBJIGFjY2Vzcz99CiAgQiAtLT58U3RydWN0dXJlZCBEYXRhfCBEW-Kame-4jyBQeXRob24gU2NyaXB0ICsgQUkgQVBJXQogIEMgLS0-fFllc3wgRVvwn5CNIEN1c3RvbSBQeXRob24gQXV0b21hdGlvbl0KICBDIC0tPnxOb3wgRntJcyBpdCB0cmlnZ2VyZWQgYnkgYW4gYXBwIGV2ZW50P30KICBGIC0tPnxZZXN8IEdb4pqhIFphcGllciBvciBNYWtlLmNvbV0KICBGIC0tPnxOb3wgSFvwn6SWIENoYXRHUFQgLyBDbGF1ZGUgTWFudWFsIFByb21wdF0KICBEIC0tPiBJW_Cfk4ogQXV0b21hdGVkIFJlcG9ydCBvciBUcmFuc2Zvcm1dCiAgRSAtLT4gSQogIEcgLS0-IEpb8J-UgSBBdXRvbWF0ZWQgV29ya2Zsb3ddCiAgSCAtLT4gS1vwn5GkIEh1bWFuIFJldmlld3MgT3V0cHV0XQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_CflIQgUmVwZXRpdGl2ZSBUYXNrIElkZW50aWZpZWRdIC0tPiBCe0RvZXMgaXQgaW52b2x2ZSB0ZXh0IG9yIGRhdGE_fQogIEIgLS0-fFRleHR8IEN7RG8geW91IGhhdmUgQVBJIGFjY2Vzcz99CiAgQiAtLT58U3RydWN0dXJlZCBEYXRhfCBEW-Kame-4jyBQeXRob24gU2NyaXB0ICsgQUkgQVBJXQogIEMgLS0-fFllc3wgRVvwn5CNIEN1c3RvbSBQeXRob24gQXV0b21hdGlvbl0KICBDIC0tPnxOb3wgRntJcyBpdCB0cmlnZ2VyZWQgYnkgYW4gYXBwIGV2ZW50P30KICBGIC0tPnxZZXN8IEdb4pqhIFphcGllciBvciBNYWtlLmNvbV0KICBGIC0tPnxOb3wgSFvwn6SWIENoYXRHUFQgLyBDbGF1ZGUgTWFudWFsIFByb21wdF0KICBEIC0tPiBJW_Cfk4ogQXV0b21hdGVkIFJlcG9ydCBvciBUcmFuc2Zvcm1dCiAgRSAtLT4gSQogIEcgLS0-IEpb8J-UgSBBdXRvbWF0ZWQgV29ya2Zsb3ddCiAgSCAtLT4gS1vwn5GkIEh1bWFuIFJldmlld3MgT3V0cHV0XQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1887" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This chart alone can save you hours of tool-shopping paralysis. Most tasks land in one of three buckets: custom code, no-code automation, or a well-crafted prompt used manually.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI for Meetings, Notes, and Research
&lt;/h2&gt;

&lt;p&gt;Meetings are where good intentions go to die. Most people leave with a fuzzy sense of what was decided and who owns what. AI note-taking tools — Fireflies, Otter.ai, and now native AI in tools like Notion and Microsoft Teams — can transcribe, summarize, and extract action items in real time.&lt;/p&gt;

&lt;p&gt;For research, the workflow that actually works is this: use AI to do a first-pass synthesis, then verify specifics yourself. Ask Claude or ChatGPT to summarize a topic, identify gaps in your understanding, or generate a list of clarifying questions before you dive into a document. This turns a 2-hour research session into a 45-minute one.&lt;/p&gt;

&lt;p&gt;One underused pattern: &lt;strong&gt;pre-meeting AI briefs&lt;/strong&gt;. Before any important meeting, dump the relevant context — previous emails, project notes, open questions — into Claude and ask for a one-page brief. You'll walk in more prepared than anyone else in the room.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: How do I start using AI to reduce manual work without coding skills?
&lt;/h3&gt;

&lt;p&gt;Start with a no-code tool like Zapier or Make.com and connect it to an AI step. Identify one task you repeat weekly — like summarizing emails or logging meeting notes — and build a single workflow for it. You don't need to code to get meaningful time savings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: What's the best AI tool for automating repetitive work tasks in 2026?
&lt;/h3&gt;

&lt;p&gt;There's no single best tool — it depends on the task type. ChatGPT and Claude handle text-heavy tasks well, Python scripts with OpenAI's API suit data transformation, and Zapier or Make.com are best for event-triggered automations. Match the tool to the task, not the other way around.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can I use AI to automate email responses without it sounding robotic?
&lt;/h3&gt;

&lt;p&gt;Yes, with the right prompting. Give the AI your email thread, a sample of your writing style, and a clear instruction on tone and length. Use AI to draft, then spend 30 seconds editing before you send. The output sounds like you because you're the final editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I avoid over-automating and losing quality control?
&lt;/h3&gt;

&lt;p&gt;Build in a human review step for anything customer-facing or high-stakes. Use AI to reduce the effort of producing a first draft, not to eliminate your review entirely. A good rule: automate the generation, but don't automate the approval.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Learning how to use AI to reduce manual work isn't about replacing yourself. It's about reclaiming the time you've been leaking to low-value tasks — so your actual expertise can show up where it matters. Start with one category of manual work this week. Build one automation. Edit one AI draft instead of writing from scratch. Small wins compound.&lt;/p&gt;

&lt;p&gt;You didn't start from behind. You just started from a different line. AI is one of the fastest ways to close that gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/ai-assistant-for-work-tasks-stop-doing-it-manually-3h2m"&gt;AI Assistant for Work Tasks: Stop Doing It Manually&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/best-ai-tools-for-productivity-2026-ida"&gt;Best AI Tools for Productivity 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/daily-ai-habits-to-be-more-productive-54kf"&gt;Daily AI Habits to Be More Productive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;Need a server? &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;Get $200 free credits on DigitalOcean&lt;/a&gt; to deploy your AI apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on building practical AI-assisted workflows, &lt;a href="https://www.amazon.in/s?k=ai+coding+tools+developer&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI coding productivity books&lt;/a&gt; are a great starting point — especially if you're a developer looking to combine automation with real coding skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aiproductivity</category>
      <category>automation</category>
      <category>manualwork</category>
      <category>chatgptworkflow</category>
    </item>
    <item>
      <title>TypeSafe AI and Jev: The Model That Answers Questions Instead of Writing Essays</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Mon, 21 Sep 2026 18:59:34 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/typesafe-ai-and-jev-the-model-that-answers-questions-instead-of-writing-essays-61o</link>
      <guid>https://dev.to/iniyarajan86/typesafe-ai-and-jev-the-model-that-answers-questions-instead-of-writing-essays-61o</guid>
      <description>&lt;p&gt;&lt;em&gt;The first "System One" model returns typed decisions with probabilities, not text. Here is what that means, how to get it, and what it costs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeSafe AI launched Jev on 15 September 2026 with $40M in seed funding. The waitlist was dropped five days later, and anyone can now sign up at the console and start with $5 in free credit.&lt;/li&gt;
&lt;li&gt;Jev takes a block of state plus a set of typed questions and returns a choice, a score, or a probability. It never returns free text, so it cannot produce a type error or invent a category you did not define.&lt;/li&gt;
&lt;li&gt;Typical latency is around 100 milliseconds. Input costs $0.042 per million tokens and output is free.&lt;/li&gt;
&lt;li&gt;It cannot write, explain, count, or reason. Use it for high-volume bounded decisions and keep an LLM for everything else.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The problem every LLM pipeline has
&lt;/h2&gt;

&lt;p&gt;Picture a support inbox at 2 a.m. Three hundred tickets land at once. Your job is not to reply to them. Your job is to sort them: billing or bug, urgent or not, refund or escalate.&lt;/p&gt;

&lt;p&gt;For two years the standard answer has been "send each one to an LLM with a JSON schema and parse the result." It works, mostly. Then one night the model wraps the JSON in markdown fences. Another night it invents a category that was never in the schema. Each ticket takes several seconds and costs a few cents, and much of that cost is output tokens the model spends explaining itself to nobody.&lt;/p&gt;

&lt;p&gt;That is the gap TypeSafe AI decided to close. The company came out of stealth on 16 September 2026 with $40M in seed funding led by DCVC. It was founded by Diogo Almeida, an ex-OpenAI researcher and co-inventor of RLHF, together with Erik Gafni and Sasha Sheng.&lt;/p&gt;

&lt;p&gt;Their first model is called &lt;strong&gt;Jev&lt;/strong&gt;, and they call the category a &lt;strong&gt;System One model&lt;/strong&gt;. The name is borrowed from Daniel Kahneman: fast, intuitive judgement rather than slow, deliberate reasoning. Jev does not write. It decides.&lt;/p&gt;




&lt;h2&gt;
  
  
  What a System One model actually is
&lt;/h2&gt;

&lt;p&gt;Every request to Jev has two parts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt; is the context you want a decision about. It can be a support ticket, a log line, a chat message, a CRM record, a product listing, or a description of a game frame. You can pass it as plain text or as a structured object with named fields, which lets your questions refer to specific fields by name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Questions&lt;/strong&gt; are the decisions you want made, each with its allowed answers defined in advance. Jev supports three kinds:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;What it returns&lt;/th&gt;
&lt;th&gt;Example question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Noul&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A single probability from 0 to 1 that a statement is true&lt;/td&gt;
&lt;td&gt;"Is this ticket urgent?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Choice&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The selected option, a probability for every option, and a separate confidence score&lt;/td&gt;
&lt;td&gt;"Which team handles this: billing, technical, sales, or spam?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Score&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A position on an ordered rubric you define, plus probabilities for each rung and a confidence score&lt;/td&gt;
&lt;td&gt;"Severity: cosmetic, workaround exists, or blocking?"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each option in a Choice or Score carries a short description written in plain language, such as "Charges, invoices, refunds" for a billing option. That description is how the model understands what each label means, so the quality of your descriptions matters more than the label names themselves. A Choice can have up to 255 options.&lt;/p&gt;

&lt;p&gt;Jev evaluates every question in one request, in parallel, against the same state. Adding a second or fifth question barely changes the response time. Because each question is judged independently, a long list of questions does not degrade the way a long LLM prompt does.&lt;/p&gt;

&lt;p&gt;The output is a structured record. For each question you get the answer, the full probability distribution over the options, and a confidence number. The record also tells you which model version answered and how many tokens the request used. There is no prose anywhere in the response and nothing to parse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgerjyrvm3i74spz9kewb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgerjyrvm3i74spz9kewb.png" alt="How Jev works: state and typed questions in, answers with probabilities out" width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;One request, every question evaluated in parallel, nothing to parse.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How to get Jev
&lt;/h2&gt;

&lt;p&gt;This changed in the model's first week. Jev launched on 15 September behind a waitlist. By around 20 September, TypeSafe announced on X that Jev was "now available to everyone, no waitlist," and pointed people straight at the console. Coverage attributed the change to developer demand outrunning the gated rollout.&lt;/p&gt;

&lt;p&gt;Getting started today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://console.typesafe.ai/" rel="noopener noreferrer"&gt;console.typesafe.ai&lt;/a&gt; and create an account. There is no application or approval step.&lt;/li&gt;
&lt;li&gt;New accounts receive $5 in free credit. At Jev's input price that works out to roughly 120 million input tokens, which is enough to classify a few hundred thousand short tickets before you pay anything.&lt;/li&gt;
&lt;li&gt;Create an API key in the console.&lt;/li&gt;
&lt;li&gt;Read the docs at &lt;a href="https://docs.typesafe.ai/" rel="noopener noreferrer"&gt;docs.typesafe.ai&lt;/a&gt;. The docs also publish a machine-readable index so you can hand them to a coding assistant.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;TypeSafe ships official SDKs for JavaScript and Python, and there is a first-party provider for the Vercel AI SDK. If you prefer no SDK, the API is a single HTTP endpoint that accepts a JSON body with your model choice, state, and questions.&lt;/p&gt;

&lt;p&gt;Three model routes are available: a stable default that always points at the latest release, a preview route for advance builds, and pinned version numbers for teams that need reproducible behaviour.&lt;/p&gt;

&lt;p&gt;Rate limits at launch are generous for a new service: 250,000 tokens per second and 1,200 requests per minute.&lt;/p&gt;

&lt;p&gt;One caveat worth knowing. TypeSafe has not said whether the open signup means full general availability with an SLA, or whether the service is still operationally early access with the gate removed. Plan production dependencies accordingly.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;The mental model is simple: describe the situation, list the decisions, get back numbers.&lt;/p&gt;

&lt;p&gt;Take the 2 a.m. support inbox. For each ticket you send the ticket text as state and ask three questions at once. A Choice for which department should own it, a Score for how severe it is, and a Noul for whether a human needs to reply within the hour. About 100 milliseconds later you have a department, a severity level, and a probability, each with a confidence score attached. Your code routes the ticket. No prompt engineering, no JSON repair, no retry loop.&lt;/p&gt;

&lt;p&gt;TypeSafe recommends three habits for building on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fan out.&lt;/strong&gt; Ask every independent question in the same call. Each extra question costs only its own tokens, and they are evaluated together. If you find yourself making a second call to ask a follow-up, you probably should have asked it the first time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gate on confidence.&lt;/strong&gt; The confidence score is separate from the probabilities and is the more important number. High confidence means act automatically. Medium confidence means show the decision to the user and ask them to confirm. Low confidence means escalate to a human or to a full LLM. This single pattern turns Jev from a classifier into a triage layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compose in code.&lt;/strong&gt; Do not ask one enormous question that bundles five factors. Ask five small Scores and weight them in your own application logic. You get transparency into which factor drove the outcome, and you can change the weights without touching the model.&lt;/p&gt;

&lt;p&gt;There is also a clear list of things Jev will not do, and TypeSafe is refreshingly direct about it. Jev does not write replies, explanations, or code. It cannot reliably count items or characters, do arithmetic, or compare dates. It accepts no images, audio, or video. It cannot summarise a document. And it is not an extractor: if you need a value pulled out of text, extract it first with a regular expression or an LLM, then let Jev decide what to do with it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sample prompts
&lt;/h2&gt;

&lt;p&gt;Jev does not take prompts in the chat sense. It takes state plus typed questions. Here are five patterns that map cleanly onto it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;State you send&lt;/th&gt;
&lt;th&gt;Questions you ask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support ticket routing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The ticket text, for example "App freezes when I open the camera on iPhone 15, started after the last update"&lt;/td&gt;
&lt;td&gt;Department as a Choice between billing, technical, sales, and spam. Urgency as a Score from low to critical. Needs a human within the hour as a Noul.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Content moderation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A user comment&lt;/td&gt;
&lt;td&gt;Is this spam or promotional as a Noul. Does it target another user as a Noul. Action as a Choice between allow, hide, and flag for review.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lead scoring in a CRM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Company name, the inbound message, and the pages the visitor viewed&lt;/td&gt;
&lt;td&gt;Intent as a Choice between browsing, comparing, and ready to buy. Fit as a Score from poor to strong. Next step as a Choice between none, email, and call today.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent tool selection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The user's latest turn plus the list of tools the agent has&lt;/td&gt;
&lt;td&gt;Next tool as a Choice over the tool names. Is the request fully satisfied as a Noul, to decide when the loop stops.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Game or robotics control loop&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A description of the current frame and the available inputs&lt;/td&gt;
&lt;td&gt;Next action as a Choice over the inputs, evaluated every tick&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last row is not hypothetical. TypeSafe demoed Jev playing Doom, with the model choosing an input on every frame. Latency in the 100 millisecond range is what makes that feasible, and it is the clearest illustration of the category: nobody needs an essay sixty times a second. Sometimes you just need the model to press the right button.&lt;/p&gt;




&lt;h2&gt;
  
  
  Isn't this just structured outputs?
&lt;/h2&gt;

&lt;p&gt;This is the first question every developer asks, and it is a fair one. JSON mode, tool calling, Zod schemas with the Vercel AI SDK, and libraries like Instructor all constrain an LLM's output to a shape you define. So what is different?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;LLM with structured outputs&lt;/th&gt;
&lt;th&gt;Jev&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;How the answer is produced&lt;/td&gt;
&lt;td&gt;Generated token by token, then validated against your schema&lt;/td&gt;
&lt;td&gt;Evaluated directly over the fixed answer space, with no generation step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type safety&lt;/td&gt;
&lt;td&gt;Enforced by a grammar, or by a retry loop after the fact&lt;/td&gt;
&lt;td&gt;Guaranteed by construction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Probabilities&lt;/td&gt;
&lt;td&gt;Not exposed, or only as raw log-probabilities you post-process yourself&lt;/td&gt;
&lt;td&gt;Returned for every option, plus a separate calibrated confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multiple questions&lt;/td&gt;
&lt;td&gt;Sequential, or one large schema the model fills in order&lt;/td&gt;
&lt;td&gt;All questions evaluated in parallel in one call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;Seconds&lt;/td&gt;
&lt;td&gt;Tens to hundreds of milliseconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can explain itself&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Structured outputs make an essay-writer fill in a form. Jev skips the essay. The practical result is that you get calibrated probabilities for free, which is what lets you build confidence gates and escalation paths without extra prompting or a second model call.&lt;/p&gt;




&lt;h2&gt;
  
  
  Difference in output
&lt;/h2&gt;

&lt;p&gt;This is the heart of it. Ask a frontier LLM to route the double-charge ticket and you get a short paragraph of reasoning, a bolded verdict, and then, if you asked nicely, a JSON object with the department in it. Now you strip the prose, find the JSON, parse it, check that "billing" is a real option, and hope the format does not drift between runs.&lt;/p&gt;

&lt;p&gt;Ask Jev and you get a record with one entry per question. For the department question the entry says the type was a Choice, the chosen option was billing, the probability of billing was 0.84 and of technical was 0.15, and the confidence was 0.6. Alongside sits the model version and the token count.&lt;/p&gt;

&lt;p&gt;Three things to notice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The answer is already typed.&lt;/strong&gt; The chosen option can only ever be one of the keys you defined. There is no path by which the model returns "billing and technical" or "it depends."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You get the whole distribution, not just the winner.&lt;/strong&gt; That 0.15 on technical is useful signal. It might mean the ticket deserves a copy to the engineering queue, or that your option descriptions overlap and need tightening.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confidence is a separate number.&lt;/strong&gt; Probabilities tell you which option. Confidence tells you whether to trust the call at all. A 0.84 probability with 0.6 confidence is a different situation from 0.84 with 0.95 confidence, and your code can treat them differently.&lt;/p&gt;

&lt;p&gt;What you do not get is a reason. Jev cannot explain itself, and for regulated domains that need an audit trail this is a real gap. TypeSafe's intended pattern is hybrid: let Jev make the cheap, fast, bounded decisions and send low-confidence or open-ended cases to a text model that can write down why.&lt;/p&gt;

&lt;p&gt;There is also an accuracy trade-off, and it is fair to name it. On TypeSafe's own benchmark, Jev scores 67.8 percent against 74.1 percent for the top reasoning model they compared against. Roughly six points behind, in exchange for the speed and cost below.&lt;/p&gt;




&lt;h2&gt;
  
  
  Difference in cost
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgs327j0mqv5qh0e9rizz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgs327j0mqv5qh0e9rizz.png" alt="Jev versus frontier LLMs on cost and latency per classification decision" width="800" height="384"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Per-case figures as reported by DataCamp, September 2026. Order of magnitude, not a benchmark.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Launch pricing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Jev&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input tokens&lt;/td&gt;
&lt;td&gt;$0.042 per million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output tokens&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free credit on signup&lt;/td&gt;
&lt;td&gt;$5, roughly 120 million input tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End-to-end latency&lt;/td&gt;
&lt;td&gt;70 to 500 milliseconds, typically around 100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Compared against frontier LLMs on a single classification case, using the figures DataCamp reported:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Cost per case&lt;/th&gt;
&lt;th&gt;Latency per case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jev&lt;/td&gt;
&lt;td&gt;$0.0004&lt;/td&gt;
&lt;td&gt;0.4 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Terra&lt;/td&gt;
&lt;td&gt;$0.0304&lt;/td&gt;
&lt;td&gt;10.1 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5&lt;/td&gt;
&lt;td&gt;$0.1761&lt;/td&gt;
&lt;td&gt;37.8 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At those numbers a million routed tickets cost about $400 on Jev versus about $30,000 on GPT-5.6 Terra. TypeSafe's own homepage summarises the gap as 193.6 times faster and 444.6 times cheaper for System One tasks. Your mileage will vary with state size, and the comparison is against full reasoning models rather than a small fine-tuned classifier, so read it as an order-of-magnitude story rather than a precise benchmark.&lt;/p&gt;

&lt;p&gt;One honest caveat from TypeSafe themselves: they cannot yet prove the pricing is not subsidised. A $40M seed round buys a lot of runway, and it is reasonable to expect the number to move once usage scales.&lt;/p&gt;




&lt;h2&gt;
  
  
  Should you care?
&lt;/h2&gt;

&lt;p&gt;If your AI usage is mostly "read this thing and pick one of N labels," yes. That workload is enormous, it is currently overserved by generation models, and it is where the margin is going to get squeezed first. With the waitlist gone and $5 of credit on signup, the cost of finding out is an afternoon.&lt;/p&gt;

&lt;p&gt;If your AI usage is mostly writing, reasoning, or anything that needs a rationale, Jev is not your model. But it might be the thing that decides &lt;em&gt;which&lt;/em&gt; of your expensive models to call, and that alone can cut a bill in half.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev" rel="noopener noreferrer"&gt;Introducing System One Models and Jev&lt;/a&gt; (TypeSafe AI blog)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typesafe.ai/" rel="noopener noreferrer"&gt;TypeSafe AI homepage and pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/typesafeai/status/2101786156572823624" rel="noopener noreferrer"&gt;TypeSafe AI on X: "Jev is now available to everyone. No waitlist."&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cryptobriefing.com/typesafe-jev-ai-public-access/" rel="noopener noreferrer"&gt;TypeSafe opens Jev AI to public after rapid adoption forces waitlist removal&lt;/a&gt; (Crypto Briefing)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.explainx.ai/blog/jev-general-availability-no-waitlist-2026" rel="noopener noreferrer"&gt;Jev General Availability: No Waitlist, $5 Free Credit&lt;/a&gt; (explainx.ai)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.hpcwire.com/aiwire/2026/09/16/typesafe-ai-emerges-from-stealth-with-40m-in-funding-with-new-model-for-composable-ai/" rel="noopener noreferrer"&gt;TypeSafe AI Emerges From Stealth With $40M in Funding&lt;/a&gt; (AIwire)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://flaviocopes.com/jev/" rel="noopener noreferrer"&gt;A deep dive into Jev&lt;/a&gt; (Flavio Copes)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.datacamp.com/blog/system-one-models-jev" rel="noopener noreferrer"&gt;Jev: TypeSafe's System One Model That Never Hallucinates&lt;/a&gt; (DataCamp)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tomshardware.com/tech-industry/artificial-intelligence/typesafe-ais-jev-offers-an-alternative-to-llms-that-claims-to-be-193x-faster-and-445x-cheaper-system-one-type-model-is-bespoke-for-probabilistic-decision-making" rel="noopener noreferrer"&gt;TypeSafe AI's Jev offers an alternative to LLMs&lt;/a&gt; (Tom's Hardware)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.theregister.com/ai-and-ml/2026/09/16/typesafe-ai-debuts-model-for-machines-that-plays-doom/5296711" rel="noopener noreferrer"&gt;TypeSafe AI debuts model for machines that plays Doom&lt;/a&gt; (The Register)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment, with complete code examples. Jev-style decision models slot straight into the routing and tool-selection patterns covered in the book.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, AI agents, and iOS development with AI&lt;/strong&gt;, practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>jev</category>
      <category>typesafeai</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Best AI Tools for Project Management in 2026</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Mon, 21 Sep 2026 13:15:02 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/best-ai-tools-for-project-management-in-2026-50h8</link>
      <guid>https://dev.to/iniyarajan86/best-ai-tools-for-project-management-in-2026-50h8</guid>
      <description>&lt;h2&gt;
  
  
  Best AI Tools for Project Management in 2026
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1w2cosai55pe1fduuck8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1w2cosai55pe1fduuck8.jpeg" alt="AI project management" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@thisisengineering" rel="noopener noreferrer"&gt;ThisIsEngineering&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You're juggling six browser tabs, three Slack threads, and a project board that hasn't been updated since last Tuesday. Sound familiar? If you're a developer, team lead, or product manager, the chaos of modern project management is real — and it's eating hours you don't have.&lt;/p&gt;

&lt;p&gt;I've been there. The daily standups that could've been a summary. The status reports assembled by hand. The endless back-and-forth trying to figure out who owns what. In 2026, there's genuinely no reason to do most of that manually anymore. AI tools for project management have matured to the point where they can automate the grunt work, surface insights you'd miss, and keep your team aligned without you micromanaging every detail.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/ai-workflow-automation-for-beginners-6ol"&gt;AI Workflow Automation for Beginners&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This chapter is your practical guide to making that happen. Let's get into it.&lt;/p&gt;


&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Project Management Needs AI Now&lt;/li&gt;
&lt;li&gt;The AI Project Management Stack I Actually Use&lt;/li&gt;
&lt;li&gt;Automating Task Summaries with Python&lt;/li&gt;
&lt;li&gt;Building a Browser-Based AI Agent for PM Tasks&lt;/li&gt;
&lt;li&gt;No-Code AI Automation with Make.com and Zapier&lt;/li&gt;
&lt;li&gt;How It All Connects: System Architecture&lt;/li&gt;
&lt;li&gt;Your AI-Powered PM Workflow: Step by Step&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why Project Management Needs AI Now
&lt;/h2&gt;

&lt;p&gt;Project management has always been a communication problem dressed up as a scheduling problem. The tools changed — we went from sticky notes to Jira to Notion — but the core pain stayed the same: keeping everyone on the same page without spending your entire day doing it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/best-ai-tools-for-productivity-2026-ida"&gt;Best AI Tools for Productivity 2026&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In 2026, AI changes the equation. Not by replacing your judgment, but by handling the repetitive information work underneath it. Think automatic meeting summaries, smart task prioritization, instant status reports pulled from your actual data, and AI agents that can move tickets, send updates, and flag blockers — all without human intervention.&lt;/p&gt;

&lt;p&gt;What's made this possible recently is the convergence of two trends. First, large language models got dramatically better at structured reasoning — they can now parse Jira exports, GitHub activity, and Slack logs and synthesize a coherent project update. Second, browser-native AI agents (think tools built on the Model Context Protocol, or MCP) can now operate inside your PM tools directly, without requiring a full API integration. That's a big deal for teams that live in the browser.&lt;/p&gt;


&lt;h2&gt;
  
  
  The AI Project Management Stack I Actually Use
&lt;/h2&gt;

&lt;p&gt;Here's what I've found works well in practice for a typical dev team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linear or Jira + AI summaries&lt;/strong&gt; — Your source of truth for tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion AI or Confluence AI&lt;/strong&gt; — For documentation that writes and updates itself&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Otter.ai or Fireflies.ai&lt;/strong&gt; — For meeting transcription and action-item extraction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude (Anthropic)&lt;/strong&gt; — For long-context analysis of project docs and sprint retrospectives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT or Gemini&lt;/strong&gt; — For fast drafts: status emails, stakeholder updates, risk logs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make.com or Zapier AI&lt;/strong&gt; — For gluing everything together with no-code workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need all of these at once. Start with one pain point — probably meeting summaries or status reports — and build from there.&lt;/p&gt;


&lt;h2&gt;
  
  
  Automating Task Summaries with Python
&lt;/h2&gt;

&lt;p&gt;One of the highest-leverage things you can do is automate your weekly status summary. Instead of spending 30 minutes pulling data from Jira or Linear every Friday, a small Python script + an LLM call does it in seconds.&lt;/p&gt;

&lt;p&gt;Here's a simplified version using the OpenAI API and a mock task list (in practice, you'd pull this from your PM tool's API):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-api-key-here&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# In production, fetch this from Jira/Linear/Asana API
&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PM-101&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Design new onboarding flow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;In Progress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assignee&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;due&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-09-25&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PM-102&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fix auth bug on mobile&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assignee&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bob&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;due&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-09-20&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PM-103&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write API docs for v3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Blocked&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assignee&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Carol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;due&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-09-22&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PM-104&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Set up staging environment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not Started&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assignee&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dave&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;due&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-09-28&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;task_json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
You are a project management assistant. Today is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
Given the following task list, write a concise weekly status update (max 200 words).
Highlight: what&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s done, what&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s in progress, what&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s blocked, and any risks.
Be specific. Use bullet points.

Task data:
&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_json&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is genuinely useful on day one. Schedule it as a cron job, pipe the output to Slack, and you've eliminated a recurring manual task. The &lt;code&gt;temperature=0.3&lt;/code&gt; keeps the output factual and consistent rather than creative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical tip:&lt;/strong&gt; Add a second LLM call that flags any tasks overdue by more than 2 days and suggests a reassignment. That's where the real time savings compound.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building a Browser-Based AI Agent for PM Tasks
&lt;/h2&gt;

&lt;p&gt;One trend I'm genuinely excited about in 2026 is browser-native AI agents. The idea is simple: instead of building a backend integration with your PM tool's API, an AI agent operates directly in the browser — filling forms, clicking buttons, reading page content — just like a human would.&lt;/p&gt;

&lt;p&gt;This matters for project management because most PM tools are web apps. An agent that never has to leave the browser can update tickets, add comments, move cards, and generate reports without any API key setup.&lt;/p&gt;

&lt;p&gt;Here's a lightweight JavaScript/TypeScript sketch of how you'd structure a task-update agent using a browser automation framework with MCP-style tool calls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Conceptual browser agent for PM task updates&lt;/span&gt;
&lt;span class="c1"&gt;// Uses a hypothetical MCP-compatible browser tool interface&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;newStatus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;In Progress&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Done&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blocked&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateTasksInBrowser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;BrowserAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Agent navigates to the task page&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://linear.app/team/issue/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Agent reads current state from DOM&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;currentStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.status-badge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Task &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;currentStatus&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; → &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newStatus&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Agent updates status via UI interaction&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.status-dropdown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;selectOption&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newStatus&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Optionally posts an AI-generated comment&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.add-comment-btn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.comment-input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.submit-comment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`✅ Updated task &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tasksToUpdate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PM-103&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;newStatus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blocked&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Waiting on API spec from backend team&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PM-104&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;newStatus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;In Progress&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// await updateTasksInBrowser(myAgent, tasksToUpdate);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern — AI agent + browser automation — is becoming one of the most practical approaches for teams that don't want to maintain complex API integrations. Tools like Playwright, combined with an LLM deciding &lt;em&gt;what&lt;/em&gt; to do, make this surprisingly accessible in 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  No-Code AI Automation with Make.com and Zapier
&lt;/h2&gt;

&lt;p&gt;Not everyone wants to write code, and honestly, for most PM automation, you don't need to. Make.com and Zapier have both shipped solid AI-native features in 2026 that connect your PM tools, communication platforms, and AI models with a visual workflow builder.&lt;/p&gt;

&lt;p&gt;Some workflows I'd set up on day one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Meeting → Action Items → Jira tickets&lt;/strong&gt;: Fireflies transcribes your standup → Make.com sends the transcript to Claude → Claude extracts action items → tickets auto-created in Jira.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack message → PM task&lt;/strong&gt;: A message tagged with &lt;code&gt;:task:&lt;/code&gt; in Slack → Zapier AI parses it → creates a Linear issue with assignee and due date inferred by the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily digest&lt;/strong&gt;: Every morning at 8am → pull all overdue tasks from Asana → format with GPT-4o → post to your team's Slack channel.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These take maybe an hour to set up. They run forever. That's the compounding value of AI automation for project management.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Quick plug:&lt;/strong&gt; If you want to go beyond tips and actually &lt;em&gt;build&lt;/em&gt; AI that handles tasks for you automatically — I wrote the playbook. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt; (185 pages, real code, production-ready)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How It All Connects: System Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICAgIEFb8J-ThSBNZWV0aW5ncyAmIFN0YW5kdXBzXSAtLT4gQlvwn46Z77iPIE90dGVyLmFpIC8gRmlyZWZsaWVzXQogICAgQiAtLT4gQ1vwn5OdIFRyYW5zY3JpcHQgKyBBY3Rpb24gSXRlbXNdCiAgICBDIC0tPiBEW_Cfp6AgQ2xhdWRlIC8gR1BULTRvXQogICAgRCAtLT4gRVvwn5OLIFN0cnVjdHVyZWQgVGFzayBEYXRhXQogICAgRSAtLT4gRlvwn5eC77iPIEppcmEgLyBMaW5lYXIgLyBBc2FuYV0KICAgIEYgLS0-IEdb8J-QjSBQeXRob24gU3VtbWFyeSBTY3JpcHRdCiAgICBHIC0tPiBIW_Cfk4ogV2Vla2x5IFN0YXR1cyBSZXBvcnRdCiAgICBIIC0tPiBJW_CfkqwgU2xhY2sgLyBFbWFpbCBEZWxpdmVyeV0KICAgIEYgLS0-IEpb8J-kliBCcm93c2VyIEFJIEFnZW50XQogICAgSiAtLT4gS1vwn5SEIEF1dG8tVXBkYXRlIFRpY2tldHNdCiAgICBMW-Kame-4jyBNYWtlLmNvbSAvIFphcGllciBBSV0gLS0-IEYKICAgIEwgLS0-IEQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICAgIEFb8J-ThSBNZWV0aW5ncyAmIFN0YW5kdXBzXSAtLT4gQlvwn46Z77iPIE90dGVyLmFpIC8gRmlyZWZsaWVzXQogICAgQiAtLT4gQ1vwn5OdIFRyYW5zY3JpcHQgKyBBY3Rpb24gSXRlbXNdCiAgICBDIC0tPiBEW_Cfp6AgQ2xhdWRlIC8gR1BULTRvXQogICAgRCAtLT4gRVvwn5OLIFN0cnVjdHVyZWQgVGFzayBEYXRhXQogICAgRSAtLT4gRlvwn5eC77iPIEppcmEgLyBMaW5lYXIgLyBBc2FuYV0KICAgIEYgLS0-IEdb8J-QjSBQeXRob24gU3VtbWFyeSBTY3JpcHRdCiAgICBHIC0tPiBIW_Cfk4ogV2Vla2x5IFN0YXR1cyBSZXBvcnRdCiAgICBIIC0tPiBJW_CfkqwgU2xhY2sgLyBFbWFpbCBEZWxpdmVyeV0KICAgIEYgLS0-IEpb8J-kliBCcm93c2VyIEFJIEFnZW50XQogICAgSiAtLT4gS1vwn5SEIEF1dG8tVXBkYXRlIFRpY2tldHNdCiAgICBMW-Kame-4jyBNYWtlLmNvbSAvIFphcGllciBBSV0gLS0-IEYKICAgIEwgLS0-IEQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="562" height="926"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This diagram shows how a modern AI-powered project management system flows. Your meetings feed into transcription tools, which feed into an LLM for summarization and task extraction, which populate your PM tool, which then powers both automated summaries and browser-based agents. Make.com or Zapier act as the connective tissue.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your AI-Powered PM Workflow: Step by Step
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICAgIEFb8J-Xk--4jyBTdGFydCBvZiBXZWVrXSAtLT4gQntEbyB5b3UgaGF2ZSBhIG1lZXRpbmc_fQogICAgQiAtLT58WWVzfCBDW_CfjpnvuI8gUmVjb3JkIHdpdGggRmlyZWZsaWVzXQogICAgQiAtLT58Tm98IERb8J-TpSBQdWxsIHRhc2sgbGlzdCBmcm9tIFBNIHRvb2xdCiAgICBDIC0tPiBFW_Cfp6AgQUkgZXh0cmFjdHMgYWN0aW9uIGl0ZW1zXQogICAgRSAtLT4gRlvwn5OLIEF1dG8tY3JlYXRlIHRpY2tldHMgaW4gSmlyYV0KICAgIEQgLS0-IEd7QW55IGJsb2NrZXJzIG9yIG92ZXJkdWU_fQogICAgRiAtLT4gRwogICAgRyAtLT58WWVzfCBIW_CfmqggQUkgZHJhZnRzIGVzY2FsYXRpb24gbWVzc2FnZV0KICAgIEcgLS0-fE5vfCBJW_Cfk4ogQUkgZ2VuZXJhdGVzIHN0YXR1cyBzdW1tYXJ5XQogICAgSCAtLT4gSlvwn5KsIFNlbmQgdG8gU2xhY2sgLyBFbWFpbF0KICAgIEkgLS0-IEoKICAgIEogLS0-IEtb4pyFIFJldmlldyAmIGFwcHJvdmUgaW4gMiBtaW51dGVzXQogICAgSyAtLT4gTFvwn5SBIFJlcGVhdCBGcmlkYXkgZm9yIHdlZWtseSBkaWdlc3Rd%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICAgIEFb8J-Xk--4jyBTdGFydCBvZiBXZWVrXSAtLT4gQntEbyB5b3UgaGF2ZSBhIG1lZXRpbmc_fQogICAgQiAtLT58WWVzfCBDW_CfjpnvuI8gUmVjb3JkIHdpdGggRmlyZWZsaWVzXQogICAgQiAtLT58Tm98IERb8J-TpSBQdWxsIHRhc2sgbGlzdCBmcm9tIFBNIHRvb2xdCiAgICBDIC0tPiBFW_Cfp6AgQUkgZXh0cmFjdHMgYWN0aW9uIGl0ZW1zXQogICAgRSAtLT4gRlvwn5OLIEF1dG8tY3JlYXRlIHRpY2tldHMgaW4gSmlyYV0KICAgIEQgLS0-IEd7QW55IGJsb2NrZXJzIG9yIG92ZXJkdWU_fQogICAgRiAtLT4gRwogICAgRyAtLT58WWVzfCBIW_CfmqggQUkgZHJhZnRzIGVzY2FsYXRpb24gbWVzc2FnZV0KICAgIEcgLS0-fE5vfCBJW_Cfk4ogQUkgZ2VuZXJhdGVzIHN0YXR1cyBzdW1tYXJ5XQogICAgSCAtLT4gSlvwn5KsIFNlbmQgdG8gU2xhY2sgLyBFbWFpbF0KICAgIEkgLS0-IEoKICAgIEogLS0-IEtb4pyFIFJldmlldyAmIGFwcHJvdmUgaW4gMiBtaW51dGVzXQogICAgSyAtLT4gTFvwn5SBIFJlcGVhdCBGcmlkYXkgZm9yIHdlZWtseSBkaWdlc3Rd%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1904" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a realistic daily loop. You're not removing yourself from the process — you're compressing the time you spend on information logistics from hours to minutes. The review step at the end is non-negotiable: always read what the AI produces before it goes to stakeholders.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: Which AI tools for project management work best with Jira?
&lt;/h3&gt;

&lt;p&gt;In my experience, tools that offer native Jira integration give you the best results. Atlassian's own Rovo AI (built into Jira as of 2026) handles sprint summaries and ticket creation well. For more flexibility, pairing the Jira API with a Python script and GPT-4o or Claude gives you full control over what gets summarized and how it's delivered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can AI tools for project management replace a human project manager?
&lt;/h3&gt;

&lt;p&gt;Not in any meaningful sense — and I'd be skeptical of any tool that claims otherwise. AI handles the information-processing layer: summaries, status reports, task extraction, and routing. The judgment calls — priority tradeoffs, stakeholder relationships, team dynamics — still require a human. Think of AI as a very capable PM assistant, not a replacement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I get my team to actually adopt AI PM tools?
&lt;/h3&gt;

&lt;p&gt;Start with one visible pain point that everyone complains about — usually meeting notes or status reports. Show the result, not the process. When the team sees a clean, accurate standup summary appear in Slack automatically on Monday morning, adoption follows naturally. Don't mandate it; demonstrate the value first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Is it safe to send project data to AI tools like ChatGPT or Claude?
&lt;/h3&gt;

&lt;p&gt;This is a legitimate concern. For anything with sensitive client data or IP, use enterprise-tier plans that explicitly guarantee no training on your data (both OpenAI and Anthropic offer this in 2026). Alternatively, run a local model like Llama 3 via Ollama for internal summaries — your data never leaves your machine.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Need a server? &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;Get $200 free credits on DigitalOcean&lt;/a&gt; to deploy your AI apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on building AI-powered workflows and automation — especially the LLM and agent side — &lt;a href="https://www.amazon.in/s?k=llm+engineering+ai+agents&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI and LLM engineering books&lt;/a&gt; are a solid starting point. They cover the foundational patterns (RAG, agents, structured outputs) that underpin everything in this chapter.&lt;/p&gt;

&lt;p&gt;For the Python scripting side, &lt;a href="https://www.amazon.in/s?k=python+programming&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these Python programming books&lt;/a&gt; will help you move fast on building the kind of automation scripts we covered — especially if you're newer to working with APIs and async workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/ai-workflow-automation-for-beginners-6ol"&gt;AI Workflow Automation for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/best-ai-tools-for-productivity-2026-ida"&gt;Best AI Tools for Productivity 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/daily-ai-habits-to-be-more-productive-54kf"&gt;Daily AI Habits to Be More Productive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;AI tools for project management aren't a future promise anymore. They're available today, they're practical, and the setup cost is lower than you think. The highest-leverage starting point: automate your status reports and meeting summaries first. That alone can reclaim several hours a week for most teams.&lt;/p&gt;

&lt;p&gt;From there, layer in no-code automation with Make.com or Zapier, and eventually experiment with browser-native agents for the tasks that don't have easy API access. Build incrementally. Review the AI's output before it goes out. And keep the human judgment — your judgment — at the center of the process.&lt;/p&gt;

&lt;p&gt;The teams winning at project management in 2026 aren't the ones with the most sophisticated tools. They're the ones who've eliminated the most unnecessary manual work.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aiprojectmanagement</category>
      <category>aiproductivity</category>
      <category>projectmanagementtools</category>
      <category>aiautomation</category>
    </item>
    <item>
      <title>Daily AI Habits to Be More Productive</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Sat, 19 Sep 2026 11:34:27 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/daily-ai-habits-to-be-more-productive-54kf</link>
      <guid>https://dev.to/iniyarajan86/daily-ai-habits-to-be-more-productive-54kf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8uyza34v30lwtv8t50nh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8uyza34v30lwtv8t50nh.jpeg" alt="AI productivity workspace" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@natri" rel="noopener noreferrer"&gt;Nao Triponez&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Daily AI Habits to Be More Productive
&lt;/h1&gt;

&lt;p&gt;You open your inbox on Monday morning. There are 47 unread emails, three Slack threads demanding your attention, a meeting in 20 minutes you haven't prepped for, and a project status update due by noon. Sound familiar? This is the exact scenario where most professionals either drown in reactive work or start building daily AI habits that fundamentally change how they operate.&lt;/p&gt;

&lt;p&gt;I've been tracking how developers and knowledge workers actually use AI tools in 2026 — not in demos, but in real workflows. The gap between people who use AI occasionally and those who've built consistent daily AI habits to be more productive is enormous. And the difference isn't access to better tools. It's habit design.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/ai-workflow-automation-for-beginners-6ol"&gt;AI Workflow Automation for Beginners&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This chapter is about building that system.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Habits Beat One-Off AI Prompts&lt;/li&gt;
&lt;li&gt;The Daily AI Workflow Stack&lt;/li&gt;
&lt;li&gt;Morning Routines: AI for Email and Planning&lt;/li&gt;
&lt;li&gt;Deep Work Hours: AI as a Research Partner&lt;/li&gt;
&lt;li&gt;End-of-Day Retros: AI for Reflection and Weekly Wins&lt;/li&gt;
&lt;li&gt;Automating the Repetitive with No-Code AI Tools&lt;/li&gt;
&lt;li&gt;A Python Script to Bootstrap Your AI Habit Loop&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why Habits Beat One-Off AI Prompts
&lt;/h2&gt;

&lt;p&gt;Most people treat AI like a search engine. They open ChatGPT when they're stuck, type something vague, get a mediocre answer, and close the tab. That's not a habit — that's a crutch.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/best-ai-tools-to-save-time-daily-3cc1"&gt;Best AI Tools to Save Time Daily&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The professionals seeing the biggest gains from AI in 2026 have done something different. They've wired AI into the rhythm of their day at specific trigger points: after waking up, before a meeting, at the end of a work sprint. Research from the productivity community consistently shows that consistency matters more than intensity. A 10-minute AI-assisted email triage every morning beats a two-hour AI session once a week.&lt;/p&gt;

&lt;p&gt;Building daily AI habits to be more productive isn't about using every feature of every tool. It's about reducing friction at the exact moments your brain is weakest — early morning decision fatigue, pre-meeting anxiety, post-lunch fog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk4UgTW9ybmluZyBUcmlnZ2VyXSAtLT4gQlvwn6egIEFJIEVtYWlsIFRyaWFnZV0KICBCIC0tPiBDW_Cfk4sgQUkgRGF5IFBsYW5uZXJdCiAgQyAtLT4gRFvwn5K7IERlZXAgV29yayBCbG9ja10KICBEIC0tPiBFW_CflI0gQUkgUmVzZWFyY2ggQXNzaXN0YW50XQogIEUgLS0-IEZb8J-TniBNZWV0aW5ncyArIEFJIE5vdGVzXQogIEYgLS0-IEdb8J-TiiBFbmQtb2YtRGF5IFJldHJvXQogIEcgLS0-IEhb4pyFIFdlZWtseSBXaW4gTG9nXQogIEggLS0-IEEKICBzdHlsZSBBIGZpbGw6IzYzNjZmMSxjb2xvcjojZmZmCiAgc3R5bGUgRCBmaWxsOiMwZWE1ZTksY29sb3I6I2ZmZgogIHN0eWxlIEcgZmlsbDojMTBiOTgxLGNvbG9yOiNmZmY%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk4UgTW9ybmluZyBUcmlnZ2VyXSAtLT4gQlvwn6egIEFJIEVtYWlsIFRyaWFnZV0KICBCIC0tPiBDW_Cfk4sgQUkgRGF5IFBsYW5uZXJdCiAgQyAtLT4gRFvwn5K7IERlZXAgV29yayBCbG9ja10KICBEIC0tPiBFW_CflI0gQUkgUmVzZWFyY2ggQXNzaXN0YW50XQogIEUgLS0-IEZb8J-TniBNZWV0aW5ncyArIEFJIE5vdGVzXQogIEYgLS0-IEdb8J-TiiBFbmQtb2YtRGF5IFJldHJvXQogIEcgLS0-IEhb4pyFIFdlZWtseSBXaW4gTG9nXQogIEggLS0-IEEKICBzdHlsZSBBIGZpbGw6IzYzNjZmMSxjb2xvcjojZmZmCiAgc3R5bGUgRCBmaWxsOiMwZWE1ZTksY29sb3I6I2ZmZgogIHN0eWxlIEcgZmlsbDojMTBiOTgxLGNvbG9yOiNmZmY%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="313" height="798"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Daily AI Workflow Stack
&lt;/h2&gt;

&lt;p&gt;Before we go granular, here's the stack I find most effective for knowledge workers in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude 3.7&lt;/strong&gt; for long-form writing, analysis, and nuanced professional communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT-4o&lt;/strong&gt; for quick iterations, code review, and brainstorming&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notion AI&lt;/strong&gt; for in-context note-taking and project documentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make.com&lt;/strong&gt; for no-code automation pipelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Otter.ai or Fireflies&lt;/strong&gt; for meeting transcription and summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need all of these. Start with one and build from there.&lt;/p&gt;


&lt;h2&gt;
  
  
  Morning Routines: AI for Email and Planning
&lt;/h2&gt;

&lt;p&gt;The first 30 minutes of your workday set the cognitive tone for everything that follows. This is where AI delivers its highest ROI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email triage with AI&lt;/strong&gt; is one of the simplest daily AI habits to be more productive, and it's criminally underused. Gmail's AI features in 2026 have gotten genuinely good at drafting context-aware replies — but the real power comes from building your own prompt templates. I keep a pinned note with three prompts I paste into Claude every morning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;"Summarize these 5 emails in one sentence each and flag anything needing a same-day response."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Draft a professional reply to this email that declines politely but leaves the door open."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"What are the three most important tasks I should complete today based on these threads?"&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last one is underrated. Feeding your email context into an AI planner is infinitely more effective than staring at a blank to-do list.&lt;/p&gt;

&lt;p&gt;For iOS users dealing with cluttered iPhone mail apps — especially the frustration of delegated accounts that can't be hidden — a quick AI-generated AppleScript or Shortcut workflow can auto-filter noise before it reaches your attention. Small friction wins compound.&lt;/p&gt;


&lt;h2&gt;
  
  
  Deep Work Hours: AI as a Research Partner
&lt;/h2&gt;

&lt;p&gt;Once you've handled reactive communication, the goal is to protect deep work time. This is where AI shifts from assistant to co-pilot.&lt;/p&gt;

&lt;p&gt;In my experience, the most valuable use of AI during deep work isn't writing for you — it's thinking alongside you. Paste a draft into Claude and ask: &lt;em&gt;"What assumptions am I making that could be wrong?"&lt;/em&gt; Or use ChatGPT to generate counterarguments to a proposal you're about to send. Negative feedback is uncomfortable but essential. AI delivers it without the social cost.&lt;/p&gt;

&lt;p&gt;The beauty and occasional terror of AI-generated critique is that it doesn't soften the blow for your ego. That's actually the point. A model that tells you your architecture decision has three obvious failure modes is more useful than a polite colleague who nods along.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk50gRHJhZnQgb3IgSWRlYV0gLS0-IEJ78J-noCBBSSBSZXZpZXd9CiAgQiAtLT58TmVlZHMgd29ya3wgQ1vwn5SEIFJldmlzZSB3aXRoIEFJIFN1Z2dlc3Rpb25zXQogIEIgLS0-fExvb2tzIHNvbGlkfCBEW-KchSBNb3ZlIHRvIEZpbmFsIFJldmlld10KICBDIC0tPiBFW_Cfk4ogQ2hlY2sgQWdhaW5zdCBHb2Fsc10KICBFIC0tPiBCCiAgRCAtLT4gRlvwn5qAIFNoaXAgb3IgU2hhcmVdCiAgc3R5bGUgQiBmaWxsOiM2MzY2ZjEsY29sb3I6I2ZmZgogIHN0eWxlIEYgZmlsbDojMTBiOTgxLGNvbG9yOiNmZmYKICBzdHlsZSBDIGZpbGw6I2Y1OWUwYixjb2xvcjojZmZm%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk50gRHJhZnQgb3IgSWRlYV0gLS0-IEJ78J-noCBBSSBSZXZpZXd9CiAgQiAtLT58TmVlZHMgd29ya3wgQ1vwn5SEIFJldmlzZSB3aXRoIEFJIFN1Z2dlc3Rpb25zXQogIEIgLS0-fExvb2tzIHNvbGlkfCBEW-KchSBNb3ZlIHRvIEZpbmFsIFJldmlld10KICBDIC0tPiBFW_Cfk4ogQ2hlY2sgQWdhaW5zdCBHb2Fsc10KICBFIC0tPiBCCiAgRCAtLT4gRlvwn5qAIFNoaXAgb3IgU2hhcmVdCiAgc3R5bGUgQiBmaWxsOiM2MzY2ZjEsY29sb3I6I2ZmZgogIHN0eWxlIEYgZmlsbDojMTBiOTgxLGNvbG9yOiNmZmYKICBzdHlsZSBDIGZpbGw6I2Y1OWUwYixjb2xvcjojZmZm%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1066" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For research tasks specifically — summarizing papers, pulling competitive insights, synthesizing documentation — build a habit of opening a dedicated AI chat session at the start of each deep work block. Treat it like a research assistant with a fresh context window. Give it your goal, your constraints, and the raw material. You'll be surprised how much faster you move.&lt;/p&gt;


&lt;h2&gt;
  
  
  End-of-Day Retros: AI for Reflection and Weekly Wins
&lt;/h2&gt;

&lt;p&gt;One of the most underrated daily AI habits to be more productive is the end-of-day retrospective. The productivity community has been buzzing about weekly retros — the "what was your win this week?" ritual — and AI makes this 10x more insightful.&lt;/p&gt;

&lt;p&gt;Here's a simple prompt I use every Friday afternoon:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Based on these notes from my week, identify: (1) my top three wins, (2) one pattern that slowed me down, and (3) one habit I should double down on next week."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI doesn't just summarize. It surfaces patterns you'd miss because you're too close to the work. Over time, this builds a personal productivity feedback loop that's genuinely data-driven.&lt;/p&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Quick plug:&lt;/strong&gt; If you want to go beyond tips and actually &lt;em&gt;build&lt;/em&gt; AI that handles tasks for you automatically — I wrote the playbook. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt; (185 pages, real code, production-ready)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Automating the Repetitive with No-Code AI Tools
&lt;/h2&gt;

&lt;p&gt;Not everything deserves your attention. Some tasks just need to happen.&lt;/p&gt;

&lt;p&gt;Make.com and Zapier AI in 2026 have matured into serious automation platforms with native AI nodes. A few workflows worth building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-summarize meeting transcripts&lt;/strong&gt; → drop into Notion project page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classify incoming support emails&lt;/strong&gt; → route to correct team member&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly digest&lt;/strong&gt; → pull metrics from three tools, summarize with AI, send to Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't developer-only workflows. Non-technical professionals are building these in Make.com without writing a line of code. The barrier is lower than ever.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Python Script to Bootstrap Your AI Habit Loop
&lt;/h2&gt;

&lt;p&gt;If you are a developer, here's a lightweight script to build a personal daily AI briefing using the OpenAI API. Run it every morning as a cron job.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_daily_briefing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%A, %B %d, %Y&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Today is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. You are my productivity assistant.

    My pending tasks:
    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

    Key emails to handle:
    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

    Please:
    1. Prioritize my top 3 tasks for the day with a one-line rationale
    2. Flag any email that needs a same-day reply
    3. Suggest one thing I should NOT do today to protect focus

    Keep it under 200 words. Be direct.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Finish Q3 performance review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review PR #247&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prep slides for Thursday demo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reply to vendor contract email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;emails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Legal team asking for contract sign-off by EOD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Newsletter subscription confirmation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Team asking for input on sprint planning&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;briefing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_daily_briefing&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;briefing&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Schedule this with a cron job at 8am, pipe the output to your terminal or a Slack DM, and you've got a personalized AI briefing before you've had your first coffee. Small habit. Real impact.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: What are the best daily AI habits to be more productive as a developer?
&lt;/h3&gt;

&lt;p&gt;The highest-leverage habits are morning email triage with a consistent prompt template, using AI to review and critique your own work during deep work blocks, and an end-of-day retro where you feed your notes to an AI and ask for pattern analysis. Start with just one of these and build consistency before adding more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I use ChatGPT or Claude in my daily workflow without getting distracted?
&lt;/h3&gt;

&lt;p&gt;Set specific trigger points for AI use rather than keeping a chat window open all day. For example: use AI at 9am for planning, at 2pm for writing review, and at 5pm for daily retro. Treating AI like a scheduled tool rather than a constant companion dramatically reduces distraction while preserving the productivity gains.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can non-developers build AI productivity habits without coding?
&lt;/h3&gt;

&lt;p&gt;Absolutely. Tools like Make.com, Notion AI, and Zapier AI in 2026 require zero code. The most impactful no-code AI habits include automated meeting summaries, AI-drafted email replies in Gmail, and weekly digest automations that pull from your existing tools and summarize with AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How long does it take to see real productivity gains from daily AI habits?
&lt;/h3&gt;

&lt;p&gt;In my experience, the first meaningful gains show up within the first week — especially from email triage and meeting summaries. The compounding benefits, like AI-surfaced patterns in your weekly retros, take four to six weeks of consistent use to become obvious. The key is consistency over intensity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building daily AI habits to be more productive isn't about chasing every new model release or stacking a dozen tools. It's about picking two or three high-leverage moments in your day and installing AI at those exact pressure points. Morning planning. Deep work review. End-of-day reflection. Automate the repetitive. Protect your attention for the work only you can do.&lt;/p&gt;

&lt;p&gt;The professionals winning with AI in 2026 aren't the ones with the most sophisticated setups. They're the ones who show up with the same prompts, the same rituals, the same feedback loops — every single day.&lt;/p&gt;

&lt;p&gt;Start with one habit. Make it boring. Make it consistent. The results will be anything but.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/ai-workflow-automation-for-beginners-6ol"&gt;AI Workflow Automation for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/best-ai-tools-to-save-time-daily-3cc1"&gt;Best AI Tools to Save Time Daily&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/chatgpt-prompts-for-productivity-that-actually-work-28gh"&gt;ChatGPT Prompts for Productivity That Actually Work&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on building AI-powered workflows and automation pipelines, &lt;a href="https://www.amazon.in/s?k=ai+coding+tools+developer&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI coding productivity books&lt;/a&gt; are a solid starting point — particularly the titles focused on prompt engineering for real work rather than toy demos. For hosting your personal AI scripts and cron jobs, &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; is where I deploy my own AI side projects — affordable, fast to spin up, and reliable enough for daily-use automations.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aiproductivity</category>
      <category>dailyaihabits</category>
      <category>chatgptworkflow</category>
      <category>aiautomation</category>
    </item>
    <item>
      <title>AI Assistant for Work Tasks: Stop Doing It Manually</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 11:13:41 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/ai-assistant-for-work-tasks-stop-doing-it-manually-3h2m</link>
      <guid>https://dev.to/iniyarajan86/ai-assistant-for-work-tasks-stop-doing-it-manually-3h2m</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwio5cjy6e75jab633xzy.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwio5cjy6e75jab633xzy.jpeg" alt="AI productivity workspace" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@solenfeyissa" rel="noopener noreferrer"&gt;Solen Feyissa&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A developer I know spent three hours every Monday morning triaging his inbox, summarizing weekend Slack threads, and writing status updates for his team's project board. He was good at his job — but he was drowning in the overhead &lt;em&gt;of&lt;/em&gt; his job. Then he spent one afternoon wiring up an AI assistant workflow. Now Monday mornings take thirty minutes. The rest of that time? He actually writes code.&lt;/p&gt;

&lt;p&gt;If you're reading this in 2026 and still doing your administrative work by hand, this chapter is your wake-up call. Using an &lt;strong&gt;AI assistant for work tasks&lt;/strong&gt; isn't a luxury reserved for tech-forward companies or developer-hackers with spare time. It's a practical, learnable shift in how you approach your workday — and it pays back immediately.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Most Professionals Still Underuse AI&lt;/li&gt;
&lt;li&gt;The AI Work Task Stack: What Goes Where&lt;/li&gt;
&lt;li&gt;Automating Repetitive Work with Code&lt;/li&gt;
&lt;li&gt;No-Code AI Automation for Everyone Else&lt;/li&gt;
&lt;li&gt;Prompt Engineering for Everyday Work&lt;/li&gt;
&lt;li&gt;Using AI for Research and Data Analysis&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why Most Professionals Still Underuse AI
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable truth: most people use their AI assistant the same way they used Google in 2005 — type a question, read the answer, close the tab. That's not a workflow. That's a lookup.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/best-ai-tools-for-productivity-2026-ida"&gt;Best AI Tools for Productivity 2026&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The real power of an AI assistant for work tasks comes from &lt;em&gt;integration&lt;/em&gt; — embedding AI into the actual flow of your day so it handles the repetitive cognitive overhead while you focus on judgment, creativity, and decisions that actually require you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/prompt-engineering-for-everyday-tasks-3gi8"&gt;Prompt Engineering for Everyday Tasks&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem isn't capability. Models like Claude, GPT-4o, and Gemini 1.5 Pro are genuinely powerful in 2026. The problem is that most professionals haven't sat down to map their own work and identify which parts are ripe for AI delegation.&lt;/p&gt;

&lt;p&gt;Start there. Before you install another tool, open a blank document and list every task you did last week that felt mechanical. Email drafts. Meeting summaries. Status reports. Data formatting. Research summaries. That list is your AI roadmap.&lt;/p&gt;


&lt;h2&gt;
  
  
  The AI Work Task Stack: What Goes Where
&lt;/h2&gt;

&lt;p&gt;Think of your AI-assisted workflow as a layered system. Different tools handle different layers — and knowing which layer a task belongs to is half the battle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk6UgUmF3IElucHV0XG5FbWFpbHMsIFNsYWNrLCBOb3RlcywgRGF0YV0gLS0-IEJb8J-noCBBSSBQcm9jZXNzaW5nIExheWVyXG5DbGF1ZGUgLyBHUFQtNG8gLyBHZW1pbmldCiAgQiAtLT4gQ3vimpnvuI8gVGFzayBUeXBlP30KICBDIC0tPnxXcml0aW5nICYgU3VtbWFyaWVzfCBEW-Kcje-4jyBEcmFmdHMsIFJlcG9ydHMsIFVwZGF0ZXNdCiAgQyAtLT58UmVzZWFyY2ggJiBBbmFseXNpc3wgRVvwn5OKIEluc2lnaHRzLCBDb21wYXJpc29ucywgU3VtbWFyaWVzXQogIEMgLS0-fEF1dG9tYXRpb24gVHJpZ2dlcnN8IEZb8J-UlyBaYXBpZXIgLyBNYWtlLmNvbSAvIG44bl0KICBGIC0tPiBHW_Cfk6wgQWN0aW9uczogRW1haWwsIE5vdGlvbiwgU2xhY2ssIENhbGVuZGFyXQogIEQgLS0-IEhb8J-RpCBIdW1hbiBSZXZpZXcgJiBTZW5kXQogIEUgLS0-IEgKICBHIC0tPiBICiAgSCAtLT4gSVvinIUgRG9uZSDigJQgTW92ZSBPbl0%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk6UgUmF3IElucHV0XG5FbWFpbHMsIFNsYWNrLCBOb3RlcywgRGF0YV0gLS0-IEJb8J-noCBBSSBQcm9jZXNzaW5nIExheWVyXG5DbGF1ZGUgLyBHUFQtNG8gLyBHZW1pbmldCiAgQiAtLT4gQ3vimpnvuI8gVGFzayBUeXBlP30KICBDIC0tPnxXcml0aW5nICYgU3VtbWFyaWVzfCBEW-Kcje-4jyBEcmFmdHMsIFJlcG9ydHMsIFVwZGF0ZXNdCiAgQyAtLT58UmVzZWFyY2ggJiBBbmFseXNpc3wgRVvwn5OKIEluc2lnaHRzLCBDb21wYXJpc29ucywgU3VtbWFyaWVzXQogIEMgLS0-fEF1dG9tYXRpb24gVHJpZ2dlcnN8IEZb8J-UlyBaYXBpZXIgLyBNYWtlLmNvbSAvIG44bl0KICBGIC0tPiBHW_Cfk6wgQWN0aW9uczogRW1haWwsIE5vdGlvbiwgU2xhY2ssIENhbGVuZGFyXQogIEQgLS0-IEhb8J-RpCBIdW1hbiBSZXZpZXcgJiBTZW5kXQogIEUgLS0-IEgKICBHIC0tPiBICiAgSCAtLT4gSVvinIUgRG9uZSDigJQgTW92ZSBPbl0%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="896" height="895"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your inbox feeds the top. AI processes it in the middle. Outputs either go directly to action (via automation) or to you for a quick review. The key insight here is that &lt;strong&gt;you become the final approver, not the first processor&lt;/strong&gt;. That inversion alone reclaims hours every week.&lt;/p&gt;

&lt;p&gt;For writing tasks, Claude tends to excel at longer-form, nuanced prose — think project proposals or performance review drafts. ChatGPT (GPT-4o) is fast and excellent for quick rewrites and bullet-point summaries. For meeting notes and real-time transcription, tools like Otter.ai and Fireflies have matured considerably in 2026 and now offer tight integrations with Notion and Linear.&lt;/p&gt;


&lt;h2&gt;
  
  
  Automating Repetitive Work with Code
&lt;/h2&gt;

&lt;p&gt;If you're a developer, you have an unfair advantage. You can build lightweight AI scripts that run on a schedule and handle the boring parts of your day automatically.&lt;/p&gt;

&lt;p&gt;Here's a Python example that pulls your unread emails, summarizes each one using the OpenAI API, and writes a digest to a Markdown file — ready for your morning review.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;imaplib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_unread_emails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;mail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;imaplib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;IMAP4_SSL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inbox&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;UNSEEN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;emails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(RFC822)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;message_from_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_multipart&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_content_type&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text/plain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_payload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                    &lt;span class="k"&gt;break&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_payload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;1500&lt;/span&gt;&lt;span class="p"&gt;]})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;emails&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarize_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a concise work assistant. Summarize emails in 2 sentences max, highlighting any action required.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Subject: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;build_digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;digest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;# Morning Email Digest — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%B %d, %Y&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;summary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;summarize_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;digest&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;### &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;digest.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;digest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Digest saved to digest.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="n"&gt;emails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_unread_emails&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;imap.gmail.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;you@gmail.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_password&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;build_digest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;emails&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Schedule this with a cron job or a tool like n8n, and your inbox is pre-processed before you even open it. That's not magic — that's just good engineering applied to your own workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  No-Code AI Automation for Everyone Else
&lt;/h2&gt;

&lt;p&gt;Not a developer? No problem. The no-code automation landscape in 2026 is genuinely excellent. Tools like Zapier, Make.com, and n8n offer native AI steps — you can call GPT-4o or Claude directly inside a workflow without writing a single line of code.&lt;/p&gt;

&lt;p&gt;A practical example: set up a Zapier automation that triggers when a new email arrives in a specific label, sends the body to Claude for summarization, and posts the summary to a Slack channel or a Notion database. Setup time is under twenty minutes. Time saved? Compounding.&lt;/p&gt;

&lt;p&gt;The same logic applies to meeting notes. Connect your calendar to Otter.ai, let it transcribe your calls automatically, then pipe the transcript through an AI summarization step that extracts action items and drops them into your project management tool of choice — Linear, Asana, or Notion.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Quick plug:&lt;/strong&gt; If you want to go beyond tips and actually &lt;em&gt;build&lt;/em&gt; AI that handles tasks for you automatically — I wrote the playbook. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt; (185 pages, real code, production-ready)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Prompt Engineering for Everyday Work
&lt;/h2&gt;

&lt;p&gt;Your AI assistant is only as good as the instructions you give it. Most people prompt AI like they're texting a friend. The better approach is to treat your prompt like a job brief.&lt;/p&gt;

&lt;p&gt;Here's a simple prompt template you can adapt for almost any work task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;prompt_template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
You are a {role} helping me with {task_type}.

Context: {relevant_background}

Task: {specific_instruction}

Constraints:
- Tone: {tone}
- Length: {length}
- Format: {format}

Output:
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prompt_template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;senior technical writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;writing a project status update&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;relevant_background&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;We shipped the auth module. Two bugs remain open. Team morale is high.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;specific_instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a 3-sentence status update for a non-technical stakeholder.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;professional but friendly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3 sentences&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plain paragraph, no bullet points&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structured approach gives the AI everything it needs to produce something usable on the first pass. You spend less time editing and more time shipping.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using AI for Research and Data Analysis
&lt;/h2&gt;

&lt;p&gt;One of the most underrated use cases for an AI assistant in work tasks is research acceleration. Whether you're benchmarking competitors, summarizing a technical specification, or analyzing query performance from your Postgres logs, AI dramatically compresses the time between raw information and actionable insight.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk4IgUmF3IERhdGEgU291cmNlc1xuUG9zdGdyZXMgTG9ncywgUmVwb3J0cywgUERGc10gLS0-IEJ78J-noCBBSSBBbmFseXNpc30KICBCIC0tPnxTdHJ1Y3R1cmVkIERhdGF8IENb8J-TiiBQYXR0ZXJuIFJlY29nbml0aW9uXG4mIEFub21hbHkgRGV0ZWN0aW9uXQogIEIgLS0-fFVuc3RydWN0dXJlZCBUZXh0fCBEW_Cfk50gU3VtbWFyaWVzICZcbktleSBUYWtlYXdheXNdCiAgQyAtLT4gRVvwn5KhIEluc2lnaHQgUmVwb3J0XQogIEQgLS0-IEUKICBFIC0tPiBGe0RvIHlvdSBuZWVkXG5kZWVwZXIgYW5hbHlzaXM_fQogIEYgLS0-fFllc3wgR1vwn5SNIEZvbGxvdy11cCBQcm9tcHRzXG5vciBDb2RlIFF1ZXJpZXNdCiAgRiAtLT58Tm98IEhb4pyFIFNoYXJlIHdpdGggVGVhbVxub3IgVGFrZSBBY3Rpb25dCiAgRyAtLT4gQg%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk4IgUmF3IERhdGEgU291cmNlc1xuUG9zdGdyZXMgTG9ncywgUmVwb3J0cywgUERGc10gLS0-IEJ78J-noCBBSSBBbmFseXNpc30KICBCIC0tPnxTdHJ1Y3R1cmVkIERhdGF8IENb8J-TiiBQYXR0ZXJuIFJlY29nbml0aW9uXG4mIEFub21hbHkgRGV0ZWN0aW9uXQogIEIgLS0-fFVuc3RydWN0dXJlZCBUZXh0fCBEW_Cfk50gU3VtbWFyaWVzICZcbktleSBUYWtlYXdheXNdCiAgQyAtLT4gRVvwn5KhIEluc2lnaHQgUmVwb3J0XQogIEQgLS0-IEUKICBFIC0tPiBGe0RvIHlvdSBuZWVkXG5kZWVwZXIgYW5hbHlzaXM_fQogIEYgLS0-fFllc3wgR1vwn5SNIEZvbGxvdy11cCBQcm9tcHRzXG5vciBDb2RlIFF1ZXJpZXNdCiAgRiAtLT58Tm98IEhb4pyFIFNoYXJlIHdpdGggVGVhbVxub3IgVGFrZSBBY3Rpb25dCiAgRyAtLT4gQg%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1659" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take Postgres, for example. If you've run a slow query log and you're staring at hundreds of lines of output, paste a representative sample into your AI assistant and ask it to identify patterns, suggest indexes, or explain what's causing the bottleneck. You still need to validate the suggestions — but AI gets you to the right questions faster than reading documentation from scratch.&lt;/p&gt;

&lt;p&gt;The same applies to competitive research, summarizing long PDFs, or distilling a week of meeting notes into a single strategic brief. Speed of understanding is a real competitive advantage, and AI hands it to you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: What is the best AI assistant for work tasks in 2026?
&lt;/h3&gt;

&lt;p&gt;There's no single winner — it depends on your task type. Claude excels at long documents and nuanced writing; GPT-4o is fast and great for quick rewrites; Gemini 1.5 Pro integrates tightly with Google Workspace. Most power users run two or three depending on context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I automate repetitive work tasks with AI without coding?
&lt;/h3&gt;

&lt;p&gt;Use Zapier or Make.com — both offer native AI action steps in 2026 that let you call language models directly in a workflow. Connect your email, calendar, or project tool, add an AI summarization step, and route the output wherever you need it. No code required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Is prompt engineering hard to learn for everyday AI use?
&lt;/h3&gt;

&lt;p&gt;Not at all. The core idea is simple: give the AI a role, a task, context, and constraints. A structured prompt template (like the one in this article) gets you 80% of the way there immediately. You refine as you go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can I use AI to help analyze data from my database?
&lt;/h3&gt;

&lt;p&gt;Yes — paste query output or log samples directly into your AI assistant and ask for pattern analysis, optimization suggestions, or plain-English explanations. Tools like ChatGPT's code interpreter can also run Python analysis directly on uploaded CSV exports from Postgres or similar databases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The developers and professionals winning in 2026 aren't necessarily smarter or working longer hours. They've just stopped doing manually what an AI assistant can handle in seconds. Your job isn't to resist that shift — it's to design your workflow around it deliberately.&lt;/p&gt;

&lt;p&gt;Start small. Automate one task this week. Build a prompt template for your most common writing request. Wire up one Zapier flow. The compounding effect of these small changes is real, and it starts the moment you stop treating AI like a search engine and start treating it like a capable, always-on work partner.&lt;/p&gt;

&lt;p&gt;You already have the tools. Now it's time to actually use them.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/best-ai-tools-for-productivity-2026-ida"&gt;Best AI Tools for Productivity 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/prompt-engineering-for-everyday-tasks-3gi8"&gt;Prompt Engineering for Everyday Tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/how-to-use-ai-for-meeting-notes-step-by-step-1pmd"&gt;How to Use AI for Meeting Notes (Step-by-Step)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;Need a server? &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;Get $200 free credits on DigitalOcean&lt;/a&gt; to deploy your AI apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on using AI to transform your daily workflow, &lt;a href="https://www.amazon.in/s?k=ai+coding+tools+developer&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI coding productivity books&lt;/a&gt; are a great starting point — especially if you're a developer looking to combine coding skills with AI-assisted automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aiproductivity</category>
      <category>automation</category>
      <category>workflow</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>Best AI Tools to Save Time Daily</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Thu, 17 Sep 2026 11:49:08 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/best-ai-tools-to-save-time-daily-3cc1</link>
      <guid>https://dev.to/iniyarajan86/best-ai-tools-to-save-time-daily-3cc1</guid>
      <description>&lt;h2&gt;
  
  
  Best AI Tools to Save Time Daily
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fodhj03hvu5bioj2jjdff.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fodhj03hvu5bioj2jjdff.jpeg" alt="AI productivity workspace" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@felicity-tai" rel="noopener noreferrer"&gt;Felicity Tai&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's a misconception I keep running into: most people think using AI tools to save time daily means replacing your entire workflow with some magic automation. It doesn't. The real win is smaller — shaving 10 minutes here, eliminating a repetitive task there, getting a first draft instead of staring at a blank page. Stack those micro-savings and you're looking at hours reclaimed every week.&lt;/p&gt;

&lt;p&gt;I've been experimenting with AI productivity tools seriously since early 2026, and the landscape has shifted fast. Voice interfaces, real-time transcription, and no-code automation have matured to a point where non-developers can build genuinely powerful workflows. This chapter walks you through exactly how to do that.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/chatgpt-prompts-for-productivity-that-actually-work-28gh"&gt;ChatGPT Prompts for Productivity That Actually Work&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Small AI Habits Beat Big AI Projects&lt;/li&gt;
&lt;li&gt;The AI Daily Workflow Stack&lt;/li&gt;
&lt;li&gt;Automating Repetitive Tasks with No-Code AI&lt;/li&gt;
&lt;li&gt;Real-Time Voice AI for Meetings and Notes&lt;/li&gt;
&lt;li&gt;Code Examples: AI Automation in Practice&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why Small AI Habits Beat Big AI Projects
&lt;/h2&gt;

&lt;p&gt;Everyone wants to build the perfect AI system. Most people never ship it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/ai-workflow-automation-for-beginners-6ol"&gt;AI Workflow Automation for Beginners&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The developers I've seen get the most out of AI tools to save time daily aren't the ones building elaborate agents — they're the ones who've automated their Tuesday standup summary, their weekly status email, and their meeting recap. Boring? Yes. Effective? Absolutely.&lt;/p&gt;

&lt;p&gt;Think of it like compound interest. A 15-minute task you do 5 times a week is 65 hours a year. Automate it and you've bought yourself nearly two full work weeks. That's the mindset shift that matters.&lt;/p&gt;

&lt;p&gt;The AI tools worth your attention in 2026 fall into a few clear categories: writing assistants, meeting intelligence tools, no-code automation platforms, and voice AI interfaces. Let's break down how to actually use each one.&lt;/p&gt;


&lt;h2&gt;
  
  
  The AI Daily Workflow Stack
&lt;/h2&gt;

&lt;p&gt;Here's the system architecture I've landed on — and that I've seen work across different roles, from product managers to solo developers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk6UgSW5ib3ggJiBJbnB1dHNdIC0tPiBCW_Cfp6AgQUkgVHJpYWdlIExheWVyXQogIEIgLS0-IENb4pyN77iPIFdyaXRpbmcgQXNzaXN0YW50XQogIEIgLS0-IERb8J-TiyBNZWV0aW5nIFN1bW1hcml6ZXJdCiAgQiAtLT4gRVvimpnvuI8gQXV0b21hdGlvbiBFbmdpbmVdCiAgQyAtLT4gRlvwn5OkIERyYWZ0cyAmIERvY3NdCiAgRCAtLT4gR1vwn5OKIEFjdGlvbiBJdGVtcyBEQl0KICBFIC0tPiBIW_CflJQgTm90aWZpY2F0aW9ucyAmIFRhc2tzXQogIEcgLS0-IElb8J-Xgu-4jyBQcm9qZWN0IE1hbmFnZW1lbnQgVG9vbF0KICBIIC0tPiBJCiAgRiAtLT4gSQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk6UgSW5ib3ggJiBJbnB1dHNdIC0tPiBCW_Cfp6AgQUkgVHJpYWdlIExheWVyXQogIEIgLS0-IENb4pyN77iPIFdyaXRpbmcgQXNzaXN0YW50XQogIEIgLS0-IERb8J-TiyBNZWV0aW5nIFN1bW1hcml6ZXJdCiAgQiAtLT4gRVvimpnvuI8gQXV0b21hdGlvbiBFbmdpbmVdCiAgQyAtLT4gRlvwn5OkIERyYWZ0cyAmIERvY3NdCiAgRCAtLT4gR1vwn5OKIEFjdGlvbiBJdGVtcyBEQl0KICBFIC0tPiBIW_CflJQgTm90aWZpY2F0aW9ucyAmIFRhc2tzXQogIEcgLS0-IElb8J-Xgu-4jyBQcm9qZWN0IE1hbmFnZW1lbnQgVG9vbF0KICBIIC0tPiBJCiAgRiAtLT4gSQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="769" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This isn't a product — it's a pattern. The idea is that everything flowing into your day (emails, Slack messages, meeting requests, research tasks) first hits an AI triage layer. From there it routes to the right tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Writing assistant&lt;/strong&gt; (Claude, ChatGPT, Gemini): First drafts of emails, proposals, documentation. I prompt these with context-rich templates, not vague one-liners.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meeting summarizer&lt;/strong&gt; (Otter.ai, Fireflies, or Gemini Live): Real-time transcription and post-meeting action item extraction. Gemini's Live API in 2026 has made this dramatically more accurate for technical conversations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automation engine&lt;/strong&gt; (Make.com, Zapier AI): The connective tissue. When a meeting ends, a summary gets posted to Notion. When an email arrives with a specific trigger word, a draft reply gets queued. No code required.&lt;/p&gt;


&lt;h2&gt;
  
  
  Automating Repetitive Tasks with No-Code AI
&lt;/h2&gt;

&lt;p&gt;Let's get concrete. Here's the decision logic I use when evaluating whether to automate a task:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk50gSWRlbnRpZnkgUmVwZXRpdGl2ZSBUYXNrXSAtLT4gQntEbyB5b3UgZG8gaXQgM3ggcGVyIHdlZWs_fQogIEIgLS0-fFllc3wgQ3tEb2VzIGl0IGZvbGxvdyBhIHBhdHRlcm4_fQogIEIgLS0-fE5vfCBEW-KdjCBOb3Qgd29ydGggYXV0b21hdGluZyB5ZXRdCiAgQyAtLT58WWVzfCBFe0RvZXMgaXQgaW52b2x2ZSB0ZXh0IG9yIGRhdGE_fQogIEMgLS0-fE5vfCBGW_CfpJQgTmVlZHMgbWFudWFsIHByb2Nlc3MgZGVzaWduIGZpcnN0XQogIEUgLS0-fFllc3wgR1vinIUgQXV0b21hdGUgd2l0aCBNYWtlLmNvbSBvciBaYXBpZXIgQUldCiAgRSAtLT58Tm98IEhb8J-UpyBDb25zaWRlciBhIHNpbXBsZSBzY3JpcHRdCiAgRyAtLT4gSVvwn5qAIFNhdmUgaG91cnMgd2Vla2x5XQogIEggLS0-IEk%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk50gSWRlbnRpZnkgUmVwZXRpdGl2ZSBUYXNrXSAtLT4gQntEbyB5b3UgZG8gaXQgM3ggcGVyIHdlZWs_fQogIEIgLS0-fFllc3wgQ3tEb2VzIGl0IGZvbGxvdyBhIHBhdHRlcm4_fQogIEIgLS0-fE5vfCBEW-KdjCBOb3Qgd29ydGggYXV0b21hdGluZyB5ZXRdCiAgQyAtLT58WWVzfCBFe0RvZXMgaXQgaW52b2x2ZSB0ZXh0IG9yIGRhdGE_fQogIEMgLS0-fE5vfCBGW_CfpJQgTmVlZHMgbWFudWFsIHByb2Nlc3MgZGVzaWduIGZpcnN0XQogIEUgLS0-fFllc3wgR1vinIUgQXV0b21hdGUgd2l0aCBNYWtlLmNvbSBvciBaYXBpZXIgQUldCiAgRSAtLT58Tm98IEhb8J-UpyBDb25zaWRlciBhIHNpbXBsZSBzY3JpcHRdCiAgRyAtLT4gSVvwn5qAIFNhdmUgaG91cnMgd2Vla2x5XQogIEggLS0-IEk%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1831" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key filter: does it happen at least three times a week and follow a predictable pattern? If yes, it's almost certainly automatable with no-code AI tools today.&lt;/p&gt;

&lt;p&gt;A practical example: I set up a Make.com scenario that monitors a Gmail label, extracts the key request using an AI module, and creates a formatted Notion task — all without writing a single line of code. Takes about 20 minutes to set up. Saves roughly 8 minutes per email. Do the math over a month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt engineering tip&lt;/strong&gt;: When feeding text into these automation tools, always include role context. Instead of "summarize this email," use "You are a senior project manager. Summarize this email in 3 bullet points, flag any deadlines mentioned, and suggest one follow-up action."&lt;/p&gt;


&lt;h2&gt;
  
  
  Real-Time Voice AI for Meetings and Notes
&lt;/h2&gt;

&lt;p&gt;This is the area that's moved fastest in 2026. Google's Gemini Live API (building on the Gemini 3.5 Transcribe capabilities) now handles real-time voice transcription with speaker diarization that's genuinely useful — even in noisy environments and cross-talk-heavy standups.&lt;/p&gt;

&lt;p&gt;For developers building internal tools, you can wire this up surprisingly quickly. Here's a minimal Python snippet that streams audio to a transcription endpoint and surfaces action items:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.genai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;transcribe_and_extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_stream&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Start a live session with Gemini
&lt;/span&gt;    &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LiveConnectConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;response_modalities&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TEXT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;system_instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a meeting assistant. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Transcribe speech and extract action items &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                           &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;with owner names and deadlines.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;aio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-live&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Stream audio chunks
&lt;/span&gt;        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;audio_stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_realtime_input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;audio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Blob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mime_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio/pcm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Collect structured output
&lt;/span&gt;        &lt;span class="n"&gt;response_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;receive&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;response_text&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;

        &lt;span class="c1"&gt;# Parse action items from response
&lt;/span&gt;        &lt;span class="n"&gt;action_items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parse_action_items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;action_items&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_action_items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Extract structured action items from transcript.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# In practice, use a second LLM call to structure this
&lt;/span&gt;    &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ACTION:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;item&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ACTION:&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Run it
&lt;/span&gt;&lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;transcribe_and_extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;your_audio_stream&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern — stream audio, extract structure, push to a task system — is becoming a standard building block for internal productivity tools in 2026.&lt;/p&gt;

&lt;p&gt;For non-developers, the same outcome is achievable with Otter.ai or Fireflies connected to your calendar. They join calls automatically, produce summaries, and can push action items to Asana or Linear via Zapier.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Quick plug:&lt;/strong&gt; If you want to go beyond tips and actually &lt;em&gt;build&lt;/em&gt; AI that handles tasks for you automatically — I wrote the playbook. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt; (185 pages, real code, production-ready)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Code Examples: AI Automation in Practice
&lt;/h2&gt;

&lt;p&gt;Let me show two more quick examples. First, a JavaScript snippet for auto-generating a standup summary from a list of completed GitHub issues:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateStandupSummary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;completedIssues&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;issueList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;completedIssues&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`- [&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; (&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    You are a senior developer writing a daily standup update.
    Based on these completed GitHub issues, write a concise standup 
    in 3 sections: Done, In Progress, Blockers. Keep it under 120 words.
    Be specific and use plain language.

    Issues:\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;issueList&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example usage&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;issues&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PROJ-142&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Fix auth token expiry bug&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;closed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PROJ-145&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Add pagination to API&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;in review&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nf"&gt;generateStandupSummary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a Swift snippet for anyone building a macOS menu bar app that summarizes your clipboard content on demand — a surprisingly useful daily tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;Foundation&lt;/span&gt;

&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;ClipboardSummarizer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;string&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"https://api.openai.com/v1/chat/completions"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;

    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;URLRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;httpMethod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"POST"&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bearer &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;apiKey&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;forHTTPHeaderField&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;forHTTPHeaderField&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"gpt-4o"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;
                &lt;span class="s"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Summarize this in 2 sentences for a busy professional: &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;]],&lt;/span&gt;
            &lt;span class="s"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;httpBody&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="kt"&gt;JSONSerialization&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;withJSONObject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;_&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="kt"&gt;URLSession&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="kt"&gt;JSONDecoder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;OpenAIResponse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;"No summary available."&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Small tools like this compound. One keystroke to summarize a long article you've copied. Done.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: What are the best AI tools to save time daily for non-developers?
&lt;/h3&gt;

&lt;p&gt;For non-developers, the highest-ROI tools in 2026 are Claude or ChatGPT for writing and research, Otter.ai or Fireflies for meeting summaries, and Make.com for no-code automation. Start with one use case — like auto-summarizing your inbox — and expand from there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I use ChatGPT or Claude to save time on email?
&lt;/h3&gt;

&lt;p&gt;Create a reusable prompt template that includes your role, the email context, and the tone you want. Something like: "You are [your job title]. Write a professional reply to this email that [goal]. Keep it under 100 words." Paste the email in, get a draft, edit lightly. Most people can cut email time by half with this habit alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can Zapier AI or Make.com really replace manual repetitive tasks?
&lt;/h3&gt;

&lt;p&gt;For text-based, pattern-driven tasks — yes, reliably. Both platforms now have native AI modules that can classify, summarize, and route information without code. The limitation is tasks that require judgment calls or access to proprietary internal systems that lack APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Is prompt engineering necessary for everyday productivity use?
&lt;/h3&gt;

&lt;p&gt;You don't need to be an expert, but a few principles go a long way. Always include role context, specify the format you want (bullet points, table, paragraph), and set a length limit. These three habits alone produce dramatically better outputs than vague one-sentence prompts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on building AI-powered productivity workflows — especially the no-code and prompt engineering side — &lt;a href="https://www.amazon.in/s?k=ai+coding+tools+developer&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI coding productivity books&lt;/a&gt; are a solid next step. They cover real-world implementation patterns, not just theory.&lt;/p&gt;

&lt;p&gt;For hosting any of the small automation scripts or tools you build from this chapter, I deploy mine on &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; — the setup is fast and the pricing stays predictable even as you scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/chatgpt-prompts-for-productivity-that-actually-work-28gh"&gt;ChatGPT Prompts for Productivity That Actually Work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/ai-workflow-automation-for-beginners-6ol"&gt;AI Workflow Automation for Beginners&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/how-to-use-ai-for-meeting-notes-step-by-step-1pmd"&gt;How to Use AI for Meeting Notes (Step-by-Step)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The most effective AI users I've encountered in 2026 aren't building grand autonomous systems. They're chipping away at friction. An automated standup here. A meeting summary there. A clipboard shortcut that saves two minutes of reading. These AI tools to save time daily work best when they fit invisibly into what you already do — not when they demand a new workflow from scratch.&lt;/p&gt;

&lt;p&gt;Pick one task from your week that you'd rather not do manually. Automate it this week. Then do it again next week. That's the whole strategy.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aiproductivity</category>
      <category>aitools</category>
      <category>savetime</category>
      <category>workflowautomation</category>
    </item>
    <item>
      <title>AI in Customer Service: The Real Transformation</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Tue, 15 Sep 2026 12:17:56 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/ai-in-customer-service-the-real-transformation-204g</link>
      <guid>https://dev.to/iniyarajan86/ai-in-customer-service-the-real-transformation-204g</guid>
      <description>&lt;p&gt;Nearly 70% of customer service interactions will be handled without a human agent by the end of 2026, according to industry forecasts. That number stopped me cold the first time I read it. Not because it's alarming — but because, in my experience watching companies deploy AI support systems, the reality on the ground is far more nuanced and interesting than any headline statistic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwftz4nfaviws31ymf0ze.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwftz4nfaviws31ymf0ze.jpeg" alt="AI customer support" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@yankrukov" rel="noopener noreferrer"&gt;Yan Krukau&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI in customer service and support isn't just about chatbots answering FAQs anymore. It's about intelligent triage systems, sentiment-aware escalation engines, and multimodal assistants that can read a screenshot, understand context, and generate a fix — all before a human agent even opens their queue. This chapter digs into what that transformation actually looks like in 2026, with practical code, real architecture decisions, and honest takes on where AI still falls flat.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why Customer Service Is AI's Best Testing Ground&lt;/li&gt;
&lt;li&gt;The Architecture Behind Modern AI Support Systems&lt;/li&gt;
&lt;li&gt;What AI Does Well in Customer Support&lt;/li&gt;
&lt;li&gt;Where AI in Customer Support Still Struggles&lt;/li&gt;
&lt;li&gt;Building a Simple AI Triage Bot in Python&lt;/li&gt;
&lt;li&gt;Integrating AI Support in a Mobile App with Swift&lt;/li&gt;
&lt;li&gt;The Escalation Decision Flow&lt;/li&gt;
&lt;li&gt;Practical Tips for Developers Building AI Support Tools&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why Customer Service Is AI's Best Testing Ground
&lt;/h2&gt;

&lt;p&gt;Customer service is where AI gets stress-tested like nowhere else. High volume. Emotionally charged users. Ambiguous requests. Edge cases that no training dataset fully anticipated. It's the domain that reveals exactly what language models can and can't do — and that's what makes it so fascinating to follow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/ai-in-customer-service-and-support-2026-guide-103j"&gt;AI in Customer Service and Support: 2026 Guide&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There's a broader conversation happening right now about whether AI is outgrowing the benchmarks we use to measure it. Evaluation frameworks built on static datasets struggle to capture performance in dynamic, real-world conversations. Customer support is a live leaderboard. Response quality, resolution rate, customer satisfaction scores — these are metrics that don't lie.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/ai-for-hr-and-recruiting-what-actually-works-1egh"&gt;AI for HR and Recruiting: What Actually Works&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've found that companies deploying AI in customer service and support end up learning more about their LLMs in three months of production than in six months of internal benchmarking. The edge cases surface fast.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Architecture Behind Modern AI Support Systems
&lt;/h2&gt;

&lt;p&gt;Before writing a single line of code, it helps to understand how these systems are wired together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_CfkaQgQ3VzdG9tZXIgTWVzc2FnZV0gLS0-IEJb8J-noCBJbnRlbnQgQ2xhc3NpZmllcl0KICBCIC0tPiBDe_Cfk4ogQ29uZmlkZW5jZSBTY29yZX0KICBDIC0tPnxIaWdofCBEW_CfpJYgQUkgUmVzcG9uc2UgRW5naW5lXQogIEMgLS0-fExvd3wgRVvwn5SAIEVzY2FsYXRpb24gUm91dGVyXQogIEQgLS0-IEZb8J-TmiBLbm93bGVkZ2UgQmFzZSAvIFJBR10KICBGIC0tPiBHW-KchSBHZW5lcmF0ZWQgUmVzcG9uc2VdCiAgRSAtLT4gSFvwn5Go4oCN8J-SvCBIdW1hbiBBZ2VudCBRdWV1ZV0KICBHIC0tPiBJW_Cfk7EgQ3VzdG9tZXIgSW50ZXJmYWNlXQogIEggLS0-IEkKICBEIC0tPiBKW-Kame-4jyBBY3Rpb24gRXhlY3V0b3JdCiAgSiAtLT4gS1vwn5SXIENSTSAvIFRpY2tldGluZyBTeXN0ZW1dCiAgSyAtLT4gSQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_CfkaQgQ3VzdG9tZXIgTWVzc2FnZV0gLS0-IEJb8J-noCBJbnRlbnQgQ2xhc3NpZmllcl0KICBCIC0tPiBDe_Cfk4ogQ29uZmlkZW5jZSBTY29yZX0KICBDIC0tPnxIaWdofCBEW_CfpJYgQUkgUmVzcG9uc2UgRW5naW5lXQogIEMgLS0-fExvd3wgRVvwn5SAIEVzY2FsYXRpb24gUm91dGVyXQogIEQgLS0-IEZb8J-TmiBLbm93bGVkZ2UgQmFzZSAvIFJBR10KICBGIC0tPiBHW-KchSBHZW5lcmF0ZWQgUmVzcG9uc2VdCiAgRSAtLT4gSFvwn5Go4oCN8J-SvCBIdW1hbiBBZ2VudCBRdWV1ZV0KICBHIC0tPiBJW_Cfk7EgQ3VzdG9tZXIgSW50ZXJmYWNlXQogIEggLS0-IEkKICBEIC0tPiBKW-Kame-4jyBBY3Rpb24gRXhlY3V0b3JdCiAgSiAtLT4gS1vwn5SXIENSTSAvIFRpY2tldGluZyBTeXN0ZW1dCiAgSyAtLT4gSQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="850" height="870"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key insight here is the confidence score gate. A well-tuned AI support system doesn't try to answer everything — it knows when to step aside. That handoff logic is often where developers underinvest, and it's precisely where customer experience breaks down.&lt;/p&gt;

&lt;p&gt;The knowledge base layer typically uses Retrieval-Augmented Generation (RAG). Instead of relying purely on what the model learned during training, you're feeding it real-time, company-specific documentation. Product updates, policy changes, pricing — it all stays current without retraining.&lt;/p&gt;


&lt;h2&gt;
  
  
  What AI Does Well in Customer Support
&lt;/h2&gt;

&lt;p&gt;Let me be direct about where AI genuinely earns its place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier-1 ticket deflection&lt;/strong&gt; is the obvious win. Password resets, order status checks, basic troubleshooting steps — AI handles these at scale, instantly, at 3am. No queue. No hold music. Customers get answers; human agents get headroom for complex work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sentiment detection and tone adaptation&lt;/strong&gt; is underrated. Modern models don't just parse words — they read emotional temperature. An angry customer gets a different response pattern than a confused one. In my experience, this alone improves resolution satisfaction more than speed does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multilingual support&lt;/strong&gt; used to require separate teams or clunky translation layers. Today, a single AI support system fluently handles dozens of languages without context loss. For global SaaS products, this is transformative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proactive support&lt;/strong&gt; is the frontier. AI systems that monitor user behavior patterns and reach out before a problem is reported. Think: "We noticed your export failed three times — here's the fix" before the user even opens a ticket.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where AI in Customer Support Still Struggles
&lt;/h2&gt;

&lt;p&gt;Here's where I'll push back against the hype.&lt;/p&gt;

&lt;p&gt;Complex, multi-party disputes are still messy. When a billing issue involves a third-party payment processor, a subscription tier change, and a currency conversion error, AI tends to give confident-sounding wrong answers. That's arguably worse than "I don't know."&lt;/p&gt;

&lt;p&gt;Emotion-heavy situations — a grieving customer, a frustrated small business owner, someone who's been burned repeatedly — require genuine empathy that current models simulate but don't truly provide. Users can feel the difference. The uncanny valley of AI empathy is real.&lt;/p&gt;

&lt;p&gt;And there's the memory problem. Most production AI support systems are stateless by default. Each conversation starts fresh. Customers who've explained their situation twice already and have to do it again for an AI are not impressed. Persistent memory architecture helps, but it adds complexity and raises privacy questions.&lt;/p&gt;


&lt;h2&gt;
  
  
  Building a Simple AI Triage Bot in Python
&lt;/h2&gt;

&lt;p&gt;Here's a practical starting point — a lightweight intent classifier and response router using the OpenAI API and a basic confidence threshold:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
You are a customer support triage assistant.
Classify the user message into one of these intents:
- billing_issue
- technical_support
- account_access
- feature_request
- general_inquiry

Respond ONLY with a JSON object:
{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;intent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;intent&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &amp;lt;0.0-1.0&amp;gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;one sentence summary&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;}
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="n"&gt;ESCALATION_THRESHOLD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;triage_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;SYSTEM_PROMPT&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;ESCALATION_THRESHOLD&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;escalate_to_human&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;route_to_&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;intent&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;_handler&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;

&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I was charged twice for my subscription this month and I can&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t log in&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;outcome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;triage_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few things worth noting: low temperature (0.2) keeps the classification consistent. The escalation threshold is tunable — in my experience, starting at 0.75 and adjusting based on your actual resolution data gives you the best balance. And notice that a message touching billing AND account access will correctly surface ambiguity through a lower confidence score, triggering escalation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Integrating AI Support in a Mobile App with Swift
&lt;/h2&gt;

&lt;p&gt;For iOS developers building in-app support experiences, here's a clean pattern for sending support queries to an AI backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;Foundation&lt;/span&gt;

&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;SupportQuery&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Codable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;SupportResponse&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Codable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;requiresHuman&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Bool&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;actor&lt;/span&gt; &lt;span class="kt"&gt;AISupportClient&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;string&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"https://your-api.example.com/support/triage"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;URLSession&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt;

    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;sendQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SupportQuery&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SupportResponse&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;URLRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;httpMethod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"POST"&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;forHTTPHeaderField&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;httpBody&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="kt"&gt;JSONEncoder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;guard&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;httpResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="k"&gt;as?&lt;/span&gt; &lt;span class="kt"&gt;HTTPURLResponse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="n"&gt;httpResponse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="kt"&gt;URLError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;badServerResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="kt"&gt;JSONDecoder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SupportResponse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage in a SwiftUI ViewModel&lt;/span&gt;
&lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;handleUserMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SupportQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nv"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;currentUser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"platform"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"iOS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"appVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"4.2.1"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;supportClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requiresHuman&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;showLiveAgentOption&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;displayAIReply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;showFallbackSupport&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using Swift's &lt;code&gt;actor&lt;/code&gt; model here isn't just good practice — it prevents race conditions when users rapidly fire off messages. Always pass app version and platform context. It helps your backend give more relevant answers and gives your support team useful debugging data when things go sideways.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;The thread connecting all of this:&lt;/strong&gt; AI agents. Every industry use case above is being built on autonomous agent frameworks. I wrote the complete developer guide. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Escalation Decision Flow
&lt;/h2&gt;

&lt;p&gt;The escalation logic deserves its own diagram. This is where the customer experience either holds together or falls apart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk6kgSW5jb21pbmcgTWVzc2FnZV0gLS0-IEJ78J-noCBJbnRlbnQgQ29uZmlkZW5jZX0KICBCIC0tPnziiaUgMC43NXwgQ1vwn6SWIEFJIEhhbmRsZXNdCiAgQiAtLT58PCAwLjc1fCBEW-KaoO-4jyBGbGFnIGZvciBSZXZpZXddCiAgQyAtLT4gRXvwn5ikIFNlbnRpbWVudCBDaGVja30KICBFIC0tPnxOZWdhdGl2ZXwgRlvwn5SAIE9mZmVyIEh1bWFuIE9wdGlvbl0KICBFIC0tPnxOZXV0cmFsIC8gUG9zaXRpdmV8IEdb4pyFIERlbGl2ZXIgQUkgUmVzcG9uc2VdCiAgRiAtLT4gSHvwn5GkIFVzZXIgQWNjZXB0cz99CiAgSCAtLT58WWVzfCBJW_CfkajigI3wn5K8IExpdmUgQWdlbnRdCiAgSCAtLT58Tm98IEcKICBEIC0tPiBJCiAgSSAtLT4gSlvwn5OdIExvZyBPdXRjb21lXQogIEcgLS0-IEo%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk6kgSW5jb21pbmcgTWVzc2FnZV0gLS0-IEJ78J-noCBJbnRlbnQgQ29uZmlkZW5jZX0KICBCIC0tPnziiaUgMC43NXwgQ1vwn6SWIEFJIEhhbmRsZXNdCiAgQiAtLT58PCAwLjc1fCBEW-KaoO-4jyBGbGFnIGZvciBSZXZpZXddCiAgQyAtLT4gRXvwn5ikIFNlbnRpbWVudCBDaGVja30KICBFIC0tPnxOZWdhdGl2ZXwgRlvwn5SAIE9mZmVyIEh1bWFuIE9wdGlvbl0KICBFIC0tPnxOZXV0cmFsIC8gUG9zaXRpdmV8IEdb4pyFIERlbGl2ZXIgQUkgUmVzcG9uc2VdCiAgRiAtLT4gSHvwn5GkIFVzZXIgQWNjZXB0cz99CiAgSCAtLT58WWVzfCBJW_CfkajigI3wn5K8IExpdmUgQWdlbnRdCiAgSCAtLT58Tm98IEcKICBEIC0tPiBJCiAgSSAtLT4gSlvwn5OdIExvZyBPdXRjb21lXQogIEcgLS0-IEo%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1904" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The sentiment check after a high-confidence response is a pattern I think more teams should adopt. Just because AI is confident doesn't mean the customer is happy. Running a lightweight sentiment analysis after the initial response — and proactively offering a human if frustration is detected — dramatically improves CSAT scores.&lt;/p&gt;




&lt;h2&gt;
  
  
  Practical Tips for Developers Building AI Support Tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Log everything with intent.&lt;/strong&gt; Every AI response, confidence score, and outcome. You need this data to tune your escalation thresholds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Build feedback loops from day one.&lt;/strong&gt; A simple thumbs up/down on AI responses gives you labeled data to improve your system over time. Don't retrofit this later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Watch your memory overhead in context windows.&lt;/strong&gt; In my experience, teams load excessive conversation history into context and then wonder why their API costs exploded. Be ruthless about what context actually matters. (Relevant aside: one PHP developer recently traced a 25MB memory spike to adding a single key to an array — the same kind of unexpected cost surface exists in AI context management.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Test adversarially.&lt;/strong&gt; Have team members try to confuse, mislead, or frustrate your AI support bot. Edge cases in customer service are not edge cases — they're Tuesday afternoon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Define your escalation contract.&lt;/strong&gt; Document exactly when AI should hand off to a human. Make it explicit, version-controlled, and review it monthly as your AI's capabilities evolve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Never fake empathy at scale.&lt;/strong&gt; If your AI can't genuinely help with an emotional situation, admit it quickly and connect the user to a human. The damage from a tone-deaf AI response compounds fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: How do I measure ROI on AI in customer service?
&lt;/h3&gt;

&lt;p&gt;Track ticket deflection rate (tickets resolved without human involvement), average handle time for escalated tickets, and CSAT scores across AI-handled vs. human-handled interactions. Compare these against your support team's capacity cost before and after deployment — that delta is your ROI story.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: What's the best LLM for customer support applications in 2026?
&lt;/h3&gt;

&lt;p&gt;It depends on your latency and cost requirements. GPT-4o and Claude 3.5 Sonnet are strong general-purpose choices for nuanced support conversations. For high-volume, latency-sensitive tier-1 deflection, smaller fine-tuned models (Mistral-class) often outperform large models on cost without sacrificing quality on well-scoped tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I prevent AI from giving confidently wrong answers to customers?
&lt;/h3&gt;

&lt;p&gt;This is the hardest problem in production AI support. Use RAG grounded in your verified documentation, implement confidence thresholds that trigger escalation, and add a post-response verification step for high-stakes domains like billing or legal. Never let AI generate free-form policy explanations without grounding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Should I build my own AI support system or use a platform like Intercom or Zendesk AI?
&lt;/h3&gt;

&lt;p&gt;If you have fewer than 10,000 monthly support tickets, start with a platform — the integration depth and pre-built workflows save months. If you have complex internal systems, domain-specific knowledge, or strict data residency requirements, building on top of an LLM API gives you control that platforms can't match.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on building production AI agents and support systems, &lt;a href="https://www.amazon.in/s?k=llm+engineering+ai+agents&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI and LLM engineering books&lt;/a&gt; are a strong starting point — particularly for understanding context management, RAG architecture, and evaluation frameworks that actually hold up in production.&lt;/p&gt;

&lt;p&gt;For deploying your AI support backend, &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; is where I host my own AI side projects — straightforward pricing, solid managed databases, and App Platform handles containerized Python services without the overhead of AWS configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/ai-in-customer-service-and-support-2026-guide-103j"&gt;AI in Customer Service and Support: 2026 Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/ai-for-hr-and-recruiting-what-actually-works-1egh"&gt;AI for HR and Recruiting: What Actually Works&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;AI in customer service and support is not a cost-cutting play wearing a customer experience costume. The best implementations I've seen treat AI as a force multiplier for human agents — handling the repetitive, accelerating the complex, and knowing exactly when to step back.&lt;/p&gt;

&lt;p&gt;The teams getting this right in 2026 share one trait: they measure obsessively, escalate honestly, and resist the temptation to automate everything just because they can. Build the system that earns trust, one resolved ticket at a time.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aicustomerservice</category>
      <category>customersupportautomation</category>
      <category>llmapplications</category>
      <category>aidomains</category>
    </item>
    <item>
      <title>ElevenLabs Review: Best Text to Speech AI in 2026?</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Mon, 14 Sep 2026 12:59:35 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/elevenlabs-review-best-text-to-speech-ai-in-2026-4pkf</link>
      <guid>https://dev.to/iniyarajan86/elevenlabs-review-best-text-to-speech-ai-in-2026-4pkf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5b1ixj8ilrzglzrwm1zw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5b1ixj8ilrzglzrwm1zw.jpeg" alt="text to speech AI" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@airamdphoto" rel="noopener noreferrer"&gt;Airam Dato-on&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  ElevenLabs Review: Best Text to Speech AI in 2026?
&lt;/h1&gt;

&lt;p&gt;You've spent hours recording a voiceover, only to realize you mispronounced a name halfway through. Or maybe you're building a productivity app and need realistic narration without hiring a voice actor. Or you're a developer who wants to add AI-generated audio to a pipeline without wrangling a dozen APIs.&lt;/p&gt;

&lt;p&gt;I've been there. And in my experience, ElevenLabs is the first text to speech tool that made me stop and think: &lt;em&gt;this sounds like a real person.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/elevenlabs-review-best-text-to-speech-ai-3enb"&gt;ElevenLabs Review: Best Text to Speech AI?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This ElevenLabs review covers everything — the voice quality, pricing, API usability, where it genuinely shines, where it frustrates, and how it compares to other AI text to speech tools in 2026. Whether you're a developer, content creator, or just someone who wants to stop re-recording, this chapter of &lt;em&gt;The AI Tools Guide&lt;/em&gt; is for you.&lt;/p&gt;


&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What Is ElevenLabs?&lt;/li&gt;
&lt;li&gt;Voice Quality: The Big Differentiator&lt;/li&gt;
&lt;li&gt;How ElevenLabs Works (Architecture)&lt;/li&gt;
&lt;li&gt;Using the ElevenLabs API: A Developer's Walkthrough&lt;/li&gt;
&lt;li&gt;ElevenLabs Pricing: Is It Worth It?&lt;/li&gt;
&lt;li&gt;Pros and Cons of ElevenLabs in 2026&lt;/li&gt;
&lt;li&gt;ElevenLabs vs. the Competition&lt;/li&gt;
&lt;li&gt;Should You Use ElevenLabs? A Decision Flow&lt;/li&gt;
&lt;li&gt;Practical Tips for Getting the Best Results&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  What Is ElevenLabs?
&lt;/h2&gt;

&lt;p&gt;ElevenLabs is an AI voice synthesis platform founded in 2022 that has, by 2026, become the go-to standard for realistic text to speech generation. It lets you convert any written text into natural-sounding audio using a library of pre-built voices — or clone your own voice with as little as a one-minute sample.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/best-ai-search-engine-2026-the-real-comparison-e75"&gt;Best AI Search Engine 2026: The Real Comparison&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Beyond simple narration, ElevenLabs has expanded into full dubbing workflows, voice design (creating fictional voices from scratch), and a robust API that developers are integrating into everything from AI avatars to notification systems. Think of it less as a "text to speech widget" and more as a voice infrastructure layer.&lt;/p&gt;

&lt;p&gt;It's used by podcasters, game developers, e-learning platforms, and increasingly by AI app builders who want their products to &lt;em&gt;speak&lt;/em&gt; rather than just display text.&lt;/p&gt;


&lt;h2&gt;
  
  
  Voice Quality: The Big Differentiator
&lt;/h2&gt;

&lt;p&gt;Let me be direct: ElevenLabs voice quality is not in the same league as Google's WaveNet, Amazon Polly, or even Microsoft Azure TTS — it's noticeably better.&lt;/p&gt;

&lt;p&gt;The difference isn't subtle. Where older text to speech engines produce that tell-tale robotic cadence, ElevenLabs captures breath patterns, micro-pauses, and emotional inflection. The voices don't just say words. They &lt;em&gt;deliver&lt;/em&gt; them.&lt;/p&gt;

&lt;p&gt;In 2026, the platform offers over 3,000 voices across 32 languages. The flagship models — Turbo v2.5 and Multilingual v3 — handle everything from casual conversational tones to formal documentary narration. Voice cloning is where things get genuinely impressive. Upload a clean audio sample, and within minutes you have a synthetic voice that preserves the subtle characteristics of the original speaker.&lt;/p&gt;

&lt;p&gt;Is it perfect? No. On very long passages, occasional odd stresses slip through. Technical jargon and uncommon proper nouns can trip it up. But these are edge cases, not systemic failures.&lt;/p&gt;


&lt;h2&gt;
  
  
  How ElevenLabs Works (Architecture)
&lt;/h2&gt;

&lt;p&gt;Understanding the architecture helps you use the tool better and debug issues when things go sideways.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk50gVGV4dCBJbnB1dF0gLS0-IEJb8J-noCBMYW5ndWFnZSBNb2RlbCBMYXllcl0KICBCIC0tPiBDW_Cfjq0gVm9pY2UgU3R5bGUgU2VsZWN0b3JdCiAgQyAtLT4gRFvimpnvuI8gTmV1cmFsIFRUUyBFbmdpbmVdCiAgRCAtLT4gRXvwn5SNIFF1YWxpdHkgQ2hlY2t9CiAgRSAtLT58UGFzc3wgRlvwn461IEF1ZGlvIE91dHB1dCBNUDMvUENNXQogIEUgLS0-fEZhaWx8IEdb8J-UhCBSZWdlbmVyYXRpb24gTG9vcF0KICBHIC0tPiBECiAgRiAtLT4gSFvwn5OhIEFQSSBSZXNwb25zZSAvIFN0cmVhbV0KICBIIC0tPiBJW_Cfk7EgWW91ciBBcHAgLyBQaXBlbGluZV0KICBKW_Cfl6PvuI8gVm9pY2UgQ2xvbmUgTGlicmFyeV0gLS0-IEMKICBLW_CfjqggVm9pY2UgRGVzaWduIFRvb2xdIC0tPiBD%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_Cfk50gVGV4dCBJbnB1dF0gLS0-IEJb8J-noCBMYW5ndWFnZSBNb2RlbCBMYXllcl0KICBCIC0tPiBDW_Cfjq0gVm9pY2UgU3R5bGUgU2VsZWN0b3JdCiAgQyAtLT4gRFvimpnvuI8gTmV1cmFsIFRUUyBFbmdpbmVdCiAgRCAtLT4gRXvwn5SNIFF1YWxpdHkgQ2hlY2t9CiAgRSAtLT58UGFzc3wgRlvwn461IEF1ZGlvIE91dHB1dCBNUDMvUENNXQogIEUgLS0-fEZhaWx8IEdb8J-UhCBSZWdlbmVyYXRpb24gTG9vcF0KICBHIC0tPiBECiAgRiAtLT4gSFvwn5OhIEFQSSBSZXNwb25zZSAvIFN0cmVhbV0KICBIIC0tPiBJW_Cfk7EgWW91ciBBcHAgLyBQaXBlbGluZV0KICBKW_Cfl6PvuI8gVm9pY2UgQ2xvbmUgTGlicmFyeV0gLS0-IEMKICBLW_CfjqggVm9pY2UgRGVzaWduIFRvb2xdIC0tPiBD%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="799" height="946"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At its core, ElevenLabs uses a multi-stage neural pipeline. Your text goes through a language model that handles prosody — rhythm, stress, and intonation. That model feeds into the voice selector layer, which applies a specific speaker embedding. The neural TTS engine then synthesizes the raw audio waveform, checks it against an internal quality model, and either streams it or queues a regeneration.&lt;/p&gt;

&lt;p&gt;For developers, the most important thing to understand is the streaming capability. ElevenLabs supports real-time audio streaming, which means you can start playing audio before the full synthesis is complete. That's critical for conversational AI apps, AI avatars, or any interface where latency matters.&lt;/p&gt;


&lt;h2&gt;
  
  
  Using the ElevenLabs API: A Developer's Walkthrough
&lt;/h2&gt;

&lt;p&gt;The ElevenLabs API is clean and well-documented. Here's a practical Python example for generating speech and saving it as an MP3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="c1"&gt;# ElevenLabs TTS API - Text to Speech example
&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ELEVENLABS_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;VOICE_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;21m00Tcm4TlvDq8ikWAM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Rachel - a default ElevenLabs voice
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_speech&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.mp3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.elevenlabs.io/v1/text-to-speech/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;VOICE_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accept&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio/mpeg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;xi-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eleven_turbo_v2_5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Fastest model in 2026
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;voice_settings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stability&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;# 0 = more expressive, 1 = more consistent
&lt;/span&gt;            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;similarity_boost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;style&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;# Adds stylistic expression
&lt;/span&gt;            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;use_speaker_boost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Audio saved to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="nf"&gt;generate_speech&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ElevenLabs makes your app sound human. No voiceover sessions required.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For streaming — which I strongly recommend for any real-time use case like an AI avatar or a notification voice system — the SDK handles chunked audio delivery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;elevenlabs.client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ElevenLabs&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;elevenlabs&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ElevenLabs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ELEVENLABS_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;stream_speech&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rachel&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Stream audio in real-time — ideal for AI avatar voice output
    or notification avatar systems where latency matters.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;audio_stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eleven_turbo_v2_5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;audio_stream&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Plays audio as it's generated
&lt;/span&gt;
&lt;span class="c1"&gt;# Great for voxel avatar notifications or live AI assistant responses
&lt;/span&gt;&lt;span class="nf"&gt;stream_speech&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your deployment to DigitalOcean completed successfully.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The streaming approach cuts perceived latency dramatically. In my experience with conversational pipelines, the difference between streamed and non-streamed audio feels like the gap between a fast reply and an awkward silence.&lt;/p&gt;




&lt;h2&gt;
  
  
  ElevenLabs Pricing: Is It Worth It?
&lt;/h2&gt;

&lt;p&gt;Here's the honest breakdown as of 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free tier&lt;/strong&gt;: 10,000 characters/month. Good for testing, not for production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starter ($5/month)&lt;/strong&gt;: 30,000 characters. Fine for a hobbyist podcast or personal project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creator ($22/month)&lt;/strong&gt;: 100,000 characters + voice cloning. This is where most indie developers live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro ($99/month)&lt;/strong&gt;: 500,000 characters, commercial license, professional cloning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale and above&lt;/strong&gt;: Custom pricing for enterprise/API-heavy workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The character-based pricing model is sensible once you do the math — 100,000 characters is roughly 10-12 hours of audio. For most content pipelines, Creator tier handles the load comfortably.&lt;/p&gt;

&lt;p&gt;The thing that trips developers up is API call overhead. Every request counts against your quota. If you're building something that re-generates the same phrase repeatedly (debugging loops, I'm looking at you), you'll burn through credits fast. Cache your audio files. Seriously.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Worth knowing:&lt;/strong&gt; If you ever want to build your own AI tool instead of paying for all of them — I wrote a hands-on guide covering agents, RAG, and deployment end-to-end. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pros and Cons of ElevenLabs in 2026
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎙️ Industry-leading voice realism — the gap between ElevenLabs and competitors is still significant&lt;/li&gt;
&lt;li&gt;🌍 32 languages with genuinely multilingual voices (not just translated English cadence)&lt;/li&gt;
&lt;li&gt;🔌 Developer-friendly API with streaming, webhooks, and a solid Python/JS SDK&lt;/li&gt;
&lt;li&gt;🎨 Voice Design tool lets you create custom fictional voices from scratch&lt;/li&gt;
&lt;li&gt;🔄 Dubbing workflow for video content is genuinely useful&lt;/li&gt;
&lt;li&gt;📈 Consistent improvements — the team ships fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💸 Costs add up quickly at scale — large API pipelines can get expensive&lt;/li&gt;
&lt;li&gt;🐛 Occasional odd pronunciation on technical jargon or uncommon names (a bug that only surfaces in niche domains)&lt;/li&gt;
&lt;li&gt;⏳ Free tier is too restrictive for serious evaluation&lt;/li&gt;
&lt;li&gt;🔒 Voice cloning raises legitimate ethical concerns — the platform has safeguards, but misuse remains a systemic issue in the industry&lt;/li&gt;
&lt;li&gt;📶 Latency on non-streamed requests can be noticeable for real-time apps&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ElevenLabs vs. the Competition
&lt;/h2&gt;

&lt;p&gt;How does ElevenLabs stack up against other AI text to speech options in 2026?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;ElevenLabs&lt;/th&gt;
&lt;th&gt;Google TTS&lt;/th&gt;
&lt;th&gt;Amazon Polly&lt;/th&gt;
&lt;th&gt;Whisper (OpenAI)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Voice realism&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;td&gt;STT only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice cloning&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming API&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multilingual&lt;/td&gt;
&lt;td&gt;✅ 32 langs&lt;/td&gt;
&lt;td&gt;✅ 40+ langs&lt;/td&gt;
&lt;td&gt;✅ 30+ langs&lt;/td&gt;
&lt;td&gt;✅ 99 langs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;✅ Limited&lt;/td&gt;
&lt;td&gt;✅ Generous&lt;/td&gt;
&lt;td&gt;✅ Generous&lt;/td&gt;
&lt;td&gt;✅ Open source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing at scale&lt;/td&gt;
&lt;td&gt;💸 Moderate-high&lt;/td&gt;
&lt;td&gt;💰 Low&lt;/td&gt;
&lt;td&gt;💰 Low&lt;/td&gt;
&lt;td&gt;🆓 Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Whisper is worth a mention even though it's speech-to-text, not TTS — many developers combine Whisper (transcription) with ElevenLabs (synthesis) to build full voice pipelines. They complement each other well.&lt;/p&gt;

&lt;p&gt;For pure text to speech, ElevenLabs is the quality leader. If you need scale on a budget, Google or Polly are more cost-efficient but noticeably less natural.&lt;/p&gt;




&lt;h2&gt;
  
  
  Should You Use ElevenLabs? A Decision Flow
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_CfpJQgTmVlZCBUVFMgZm9yIHlvdXIgcHJvamVjdD9dIC0tPiBCe0J1ZGdldCBhdmFpbGFibGU_fQogIEIgLS0-fEZyZWUgLyBNaW5pbWFsfCBDW0dvb2dsZSBUVFMgb3IgUG9sbHldCiAgQiAtLT58WWVzLCBxdWFsaXR5IG1hdHRlcnN8IER7Vm9pY2UgcmVhbGlzbSBjcml0aWNhbD99CiAgRCAtLT58Tm90IHJlYWxseXwgRVtHb29nbGUgVFRTIOKAlCBjaGVhcGVyIGF0IHNjYWxlXQogIEQgLS0-fFllcywgaHVtYW4tbGlrZSB2b2ljZSBuZWVkZWR8IEZ7Q3VzdG9tIHZvaWNlIG9yIGNsb25lP30KICBGIC0tPnxQcmUtYnVpbHQgdm9pY2VzIE9LfCBHW-KchSBFbGV2ZW5MYWJzIENyZWF0b3IgUGxhbl0KICBGIC0tPnxOZWVkIGJyYW5kZWQgLyBjbG9uZWQgdm9pY2V8IEhb4pyFIEVsZXZlbkxhYnMgUHJvIFBsYW5dCiAgRyAtLT4gSVvwn46Z77iPIEJ1aWxkIHlvdXIgYXVkaW8gcGlwZWxpbmVdCiAgSCAtLT4gSQogIEMgLS0-IEpb4pqZ77iPIEdvb2QgZW5vdWdoIGZvciB1dGlsaXR5IFRUU10KICBFIC0tPiBKCiAgSSAtLT4gS1vwn5qAIFNoaXAgaXRd%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_CfpJQgTmVlZCBUVFMgZm9yIHlvdXIgcHJvamVjdD9dIC0tPiBCe0J1ZGdldCBhdmFpbGFibGU_fQogIEIgLS0-fEZyZWUgLyBNaW5pbWFsfCBDW0dvb2dsZSBUVFMgb3IgUG9sbHldCiAgQiAtLT58WWVzLCBxdWFsaXR5IG1hdHRlcnN8IER7Vm9pY2UgcmVhbGlzbSBjcml0aWNhbD99CiAgRCAtLT58Tm90IHJlYWxseXwgRVtHb29nbGUgVFRTIOKAlCBjaGVhcGVyIGF0IHNjYWxlXQogIEQgLS0-fFllcywgaHVtYW4tbGlrZSB2b2ljZSBuZWVkZWR8IEZ7Q3VzdG9tIHZvaWNlIG9yIGNsb25lP30KICBGIC0tPnxQcmUtYnVpbHQgdm9pY2VzIE9LfCBHW-KchSBFbGV2ZW5MYWJzIENyZWF0b3IgUGxhbl0KICBGIC0tPnxOZWVkIGJyYW5kZWQgLyBjbG9uZWQgdm9pY2V8IEhb4pyFIEVsZXZlbkxhYnMgUHJvIFBsYW5dCiAgRyAtLT4gSVvwn46Z77iPIEJ1aWxkIHlvdXIgYXVkaW8gcGlwZWxpbmVdCiAgSCAtLT4gSQogIEMgLS0-IEpb4pqZ77iPIEdvb2QgZW5vdWdoIGZvciB1dGlsaXR5IFRUU10KICBFIC0tPiBKCiAgSSAtLT4gS1vwn5qAIFNoaXAgaXRd%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1904" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use this flow to cut through the noise. ElevenLabs is the right choice when voice quality is a product differentiator, not just a utility feature.&lt;/p&gt;




&lt;h2&gt;
  
  
  Practical Tips for Getting the Best Results
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tip 1: Tune stability and similarity_boost for your use case.&lt;/strong&gt; Lower stability (0.3-0.4) produces more expressive, emotionally varied output — great for storytelling. Higher stability (0.7-0.9) gives you consistent, professional narration — better for e-learning or documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip 2: Use SSML-style punctuation cues.&lt;/strong&gt; ElevenLabs doesn't fully support SSML, but strategic use of ellipses, em-dashes, and commas guides the prosody engine. A pause mid-sentence? Use an em-dash. A dramatic beat? Three dots work surprisingly well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip 3: Cache generated audio aggressively.&lt;/strong&gt; If your app re-generates the same phrase, you're burning credits for no reason. Store the MP3, serve it from cache. This is the most common rookie mistake I see in AI pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip 4: Test edge cases early.&lt;/strong&gt; Uncommon names, acronyms, and technical terminology are where ElevenLabs stumbles — similar to that classic debugging scenario where a bug only appears in edge cases. Spell out acronyms phonetically in your input text ("API" → "A.P.I.") to force correct pronunciation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip 5: Use streaming for anything interactive.&lt;/strong&gt; If you're building an AI avatar, a notification voice system, or a conversational agent, stream the audio. The latency improvement is immediately noticeable to users.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: How accurate is ElevenLabs voice cloning?
&lt;/h3&gt;

&lt;p&gt;ElevenLabs voice cloning requires a minimum of one minute of clean audio and produces results that are remarkably close to the original speaker's timbre, pacing, and tone. Quality improves significantly with longer, cleaner samples — 5-10 minutes of varied speech gives you a much more robust clone that handles unexpected inputs better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can I use ElevenLabs for commercial projects?
&lt;/h3&gt;

&lt;p&gt;Yes, but the commercial license tier matters. The Creator plan ($22/month) includes limited commercial use, while the Pro plan ($99/month) unlocks full commercial rights including redistribution. Always check the current terms for your specific use case, especially if you're cloning real voices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How does ElevenLabs compare to Whisper for text to speech?
&lt;/h3&gt;

&lt;p&gt;They're not competitors — Whisper is a speech-to-text (transcription) model from OpenAI, while ElevenLabs is a text-to-speech synthesis platform. Many developers use them together: Whisper transcribes incoming audio, processes it through an LLM, and ElevenLabs synthesizes the response. They're complements, not alternatives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Is ElevenLabs API good for real-time applications?
&lt;/h3&gt;

&lt;p&gt;Yes, with the right setup. The streaming API significantly reduces perceived latency and is the recommended approach for conversational AI, AI avatars, and notification systems. Non-streamed requests have noticeable delay at longer text lengths, so plan your architecture accordingly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you're integrating ElevenLabs into an AI-powered product — especially a voice agent or LLM pipeline — &lt;a href="https://www.amazon.in/s?k=llm+engineering+ai+agents&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these AI and LLM engineering books&lt;/a&gt; are a solid foundation for understanding how to architect the full stack around a TTS layer, not just the voice generation piece.&lt;/p&gt;

&lt;p&gt;For deployment: I run all my AI side projects on &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt;, which handles the audio file storage, API hosting, and scaling without unnecessary complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/elevenlabs-review-best-text-to-speech-ai-3enb"&gt;ElevenLabs Review: Best Text to Speech AI?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/best-ai-search-engine-2026-the-real-comparison-e75"&gt;Best AI Search Engine 2026: The Real Comparison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/best-ai-tools-for-small-business-in-2026-1c42"&gt;Best AI Tools for Small Business in 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;ElevenLabs is the best AI text to speech platform available in 2026 if voice quality is a priority. It's not the cheapest. It's not the most forgiving with technical jargon. But when you need audio that sounds like a human said it, it's the tool I reach for first.&lt;/p&gt;

&lt;p&gt;For developers building voice-enabled apps, AI avatars, or content pipelines — the API is solid, the streaming capability is production-ready, and the voice library is genuinely extensive. The pricing is fair at small-to-medium scale and starts to sting only at enterprise volume.&lt;/p&gt;

&lt;p&gt;The bottom line: if your product &lt;em&gt;speaks&lt;/em&gt;, ElevenLabs should be on your shortlist. Evaluate it on the Creator plan, cache your audio, and tune those voice settings. You'll ship something that sounds like it cost ten times more to produce.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>elevenlabs</category>
      <category>texttospeech</category>
      <category>aitools</category>
      <category>developertools</category>
    </item>
    <item>
      <title>AI for Graphic Designers: A Practical Guide</title>
      <dc:creator>Iniyarajan</dc:creator>
      <pubDate>Sun, 13 Sep 2026 12:29:34 +0000</pubDate>
      <link>https://dev.to/iniyarajan86/ai-for-graphic-designers-a-practical-guide-1o4j</link>
      <guid>https://dev.to/iniyarajan86/ai-for-graphic-designers-a-practical-guide-1o4j</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1rnbsh30ejnll413clit.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1rnbsh30ejnll413clit.jpeg" alt="AI graphic design" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by &lt;a href="https://www.pexels.com/@googledeepmind" rel="noopener noreferrer"&gt;Google DeepMind&lt;/a&gt; on &lt;a href="https://pexels.com" rel="noopener noreferrer"&gt;Pexels&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  AI for Graphic Designers: A Practical Guide to Working Smarter
&lt;/h1&gt;

&lt;p&gt;Last month, a designer friend texted me in a mild panic. She had a branding project due in 48 hours — logo concepts, color palettes, mockups, the works — and her usual process of sketching, iterating, and polishing would take at least five days. She asked if AI could actually help, or if it was just hype. Forty-eight hours later, she delivered. On time. The client loved it. That conversation is exactly why I wanted to write this guide.&lt;/p&gt;

&lt;p&gt;AI for graphic designers isn't about replacing creativity. It's about compressing the tedious parts — the blank-canvas paralysis, the color theory second-guessing, the repetitive asset exports — so designers can spend more time on actual creative decisions. In 2026, this is no longer experimental. It's standard practice in studios ranging from solo freelancers to large agencies.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Related&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/midjourney-vs-dall-e-vs-stable-diffusion-2026-guide-1ina"&gt;Midjourney vs DALL-E vs Stable Diffusion: 2026 Guide&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This guide walks you through how to integrate AI tools into your design workflow, with real code examples for automation, practical tips you can apply today, and an honest look at where AI genuinely helps versus where human judgment still wins.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why AI Is Transforming Graphic Design&lt;/li&gt;
&lt;li&gt;Core AI Tools Every Designer Should Know&lt;/li&gt;
&lt;li&gt;Automating Design Tasks with Python&lt;/li&gt;
&lt;li&gt;Building a Smart Color Palette Generator&lt;/li&gt;
&lt;li&gt;Using AI APIs to Generate Design Briefs&lt;/li&gt;
&lt;li&gt;The AI-Assisted Design Workflow&lt;/li&gt;
&lt;li&gt;Where Human Judgment Still Wins&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Resources I Recommend&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Why AI Is Transforming Graphic Design
&lt;/h2&gt;

&lt;p&gt;Graphic design has always been part craft, part problem-solving. The craft part — developing an eye, understanding space, rhythm, and hierarchy — still belongs entirely to humans. But the problem-solving scaffolding? That's where AI for graphic designers is genuinely reshaping the field.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Also read&lt;/strong&gt;: &lt;a href="https://dev.to/iniyarajan86/how-to-use-ai-to-write-faster-in-2026-52ce"&gt;How to Use AI to Write Faster in 2026&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Consider what eats designer time in a typical project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research and mood-boarding&lt;/li&gt;
&lt;li&gt;Generating initial concept directions&lt;/li&gt;
&lt;li&gt;Color palette exploration&lt;/li&gt;
&lt;li&gt;Resizing and exporting assets for multiple platforms&lt;/li&gt;
&lt;li&gt;Writing project briefs and client-facing copy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my experience, these tasks can consume 40–60% of a project's hours. None of them require the highest level of creative judgment. They require iteration, pattern recognition, and knowledge of conventions — exactly what AI excels at.&lt;/p&gt;

&lt;p&gt;The design community in 2026 has largely moved past the "will AI replace designers?" debate. The real question is: which designers are using AI effectively, and which ones are leaving productivity on the table?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_CfjqggRGVzaWduIFByb2plY3QgU3RhcnRzXSAtLT4gQlvwn5OLIEFJIEdlbmVyYXRlcyBCcmllZiAmIE1vb2QgQm9hcmRdCiAgQiAtLT4gQ1vwn6egIERlc2lnbmVyIFJldmlld3MgJiBSZWZpbmVzIERpcmVjdGlvbl0KICBDIC0tPiBEW_CflrzvuI8gQUkgR2VuZXJhdGVzIEluaXRpYWwgQ29uY2VwdCBWYXJpYXRpb25zXQogIEQgLS0-IEV74pyFIERlc2lnbmVyIEFwcHJvdmVzIERpcmVjdGlvbj99CiAgRSAtLT58WWVzfCBGW-Kame-4jyBEZXNpZ25lciBSZWZpbmVzIGluIEZpZ21hIC8gSWxsdXN0cmF0b3JdCiAgRSAtLT58Tm98IEQKICBGIC0tPiBHW_Cfk6YgQUkgQXV0b21hdGVzIEFzc2V0IEV4cG9ydCAmIFJlc2l6aW5nXQogIEcgLS0-IEhb8J-agCBEZWxpdmVyeSB0byBDbGllbnRd%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggVEQKICBBW_CfjqggRGVzaWduIFByb2plY3QgU3RhcnRzXSAtLT4gQlvwn5OLIEFJIEdlbmVyYXRlcyBCcmllZiAmIE1vb2QgQm9hcmRdCiAgQiAtLT4gQ1vwn6egIERlc2lnbmVyIFJldmlld3MgJiBSZWZpbmVzIERpcmVjdGlvbl0KICBDIC0tPiBEW_CflrzvuI8gQUkgR2VuZXJhdGVzIEluaXRpYWwgQ29uY2VwdCBWYXJpYXRpb25zXQogIEQgLS0-IEV74pyFIERlc2lnbmVyIEFwcHJvdmVzIERpcmVjdGlvbj99CiAgRSAtLT58WWVzfCBGW-Kame-4jyBEZXNpZ25lciBSZWZpbmVzIGluIEZpZ21hIC8gSWxsdXN0cmF0b3JdCiAgRSAtLT58Tm98IEQKICBGIC0tPiBHW_Cfk6YgQUkgQXV0b21hdGVzIEFzc2V0IEV4cG9ydCAmIFJlc2l6aW5nXQogIEcgLS0-IEhb8J-agCBEZWxpdmVyeSB0byBDbGllbnRd%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="System Architecture" width="294" height="1190"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Core AI Tools Every Designer Should Know
&lt;/h2&gt;

&lt;p&gt;Before writing a single line of code, it helps to know the landscape. Here are the categories that matter most for designers right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generative image tools&lt;/strong&gt; (Midjourney, Adobe Firefly, Stable Diffusion) are mature in 2026. They're best for ideation, not final production — think mood boards and concept directions, not print-ready files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-powered design platforms&lt;/strong&gt; like Figma's AI features and Canva's Magic Studio have quietly become essential. They handle layout suggestions, copy generation, and brand consistency checks inside tools designers already live in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API-based AI integration&lt;/strong&gt; is where things get interesting for technically-minded designers and their developer collaborators. Connecting OpenAI, Anthropic, or local LLMs to your design workflow unlocks custom automation that off-the-shelf tools can't match.&lt;/p&gt;


&lt;h2&gt;
  
  
  Automating Design Tasks with Python
&lt;/h2&gt;

&lt;p&gt;One of the most underused capabilities in AI-assisted design is batch automation. Imagine resizing 200 product images, applying brand overlays, and exporting them in five formats — automatically.&lt;/p&gt;

&lt;p&gt;Here's a Python script using the Pillow library combined with an AI-generated layout instruction set to automate asset preparation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;PIL&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ImageFont&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="c1"&gt;# Configuration — swap these for your brand
&lt;/span&gt;&lt;span class="n"&gt;BRAND_COLOR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Deep navy
&lt;/span&gt;&lt;span class="n"&gt;OVERLAY_OPACITY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;       &lt;span class="c1"&gt;# 0-255
&lt;/span&gt;&lt;span class="n"&gt;OUTPUT_SIZES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instagram_square&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;twitter_banner&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;linkedin_post&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;627&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;apply_brand_overlay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;brand_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Apply a branded overlay to an image and export in multiple sizes.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;original&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RGBA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;format_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;OUTPUT_SIZES&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="c1"&gt;# Resize with aspect-ratio-preserving crop
&lt;/span&gt;        &lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;original&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;thumbnail&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LANCZOS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;crop&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;

        &lt;span class="c1"&gt;# Create semi-transparent brand overlay
&lt;/span&gt;        &lt;span class="n"&gt;overlay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RGBA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;BRAND_COLOR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OVERLAY_OPACITY&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;alpha_composite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RGBA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;overlay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Add brand text
&lt;/span&gt;        &lt;span class="n"&gt;draw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageDraw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Draw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;font_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;brand_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;230&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;anchor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="c1"&gt;# Save
&lt;/span&gt;        &lt;span class="n"&gt;out_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;format_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RGB&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PNG&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;optimize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ Saved &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;format_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; → &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;out_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Run it
&lt;/span&gt;&lt;span class="nf"&gt;apply_brand_overlay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;product_hero.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./exports&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YourBrand.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This kind of script — which you can trigger from a simple CLI or wrap in a small web UI — eliminates hours of manual Photoshop work per project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building a Smart Color Palette Generator
&lt;/h2&gt;

&lt;p&gt;Color decisions are emotionally loaded and time-consuming. AI can accelerate this dramatically. Here's a Python script that queries an LLM to generate brand-appropriate color palettes based on a design brief:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# Set OPENAI_API_KEY in your environment
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_color_palette&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;brand_brief&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;num_colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Generate a harmonious color palette from a brand description.
    Returns hex codes with usage guidance.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    You are a senior brand designer. Given this brand brief, generate a cohesive
    color palette with exactly &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;num_colors&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; colors.

    Brand brief: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;brand_brief&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

    Respond ONLY with valid JSON in this format:
    {{
      &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;palette&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: [
        {{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Primary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hex&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#1A1A48&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;usage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Main brand color, headers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;}},
&lt;/span&gt;&lt;span class="gp"&gt;        ...&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rationale&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;One sentence explaining the palette choice.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="n"&gt;response_format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json_object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;

&lt;span class="c1"&gt;# Example usage
&lt;/span&gt;&lt;span class="n"&gt;brief&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A sustainable outdoor gear brand targeting millennials. Values: adventure, eco-consciousness, durability.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;palette&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_color_palette&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;brief&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;🎨 Palette Rationale: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;palette&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rationale&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;palette&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;palette&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hex&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  →  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;usage&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combine this with a simple Figma plugin that reads JSON and populates your style library, and you've automated the early-stage color exploration entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using AI APIs to Generate Design Briefs
&lt;/h2&gt;

&lt;p&gt;Here's a JavaScript example for a simple Node.js tool that takes a client intake form and generates a structured design brief — a task that normally takes 30–45 minutes of back-and-forth:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Anthropic&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@anthropic-ai/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateDesignBrief&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clientInput&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;companyName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;industry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetAudience&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;projectType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;keywords&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;clientInput&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;claude-opus-4-5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You are a senior creative director. Generate a concise, actionable design brief.

Client: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;companyName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
Industry: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;industry&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
Target Audience: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;targetAudience&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
Project Type: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;projectType&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
Keywords/Tone: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;keywords&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;

Output a structured brief with sections: Objective, Audience Insights, Visual Direction, Deliverables, and Constraints. Keep it under 300 words. Be specific and opinionated.`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example call&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;brief&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateDesignBrief&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;companyName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Verdant Co.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;industry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sustainable Skincare&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;targetAudience&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Women 28-45, eco-conscious, premium buyers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;projectType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Brand identity + packaging&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;keywords&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;clean, botanical, trustworthy, minimal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;📋 Generated Design Brief:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;brief&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This brief then becomes the input to your color palette generator. Chaining these tools is where the real productivity gains compound.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;The thread connecting all of this:&lt;/strong&gt; AI agents. Every industry use case above is being built on autonomous agent frameworks. I wrote the complete developer guide. &lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Building AI Agents →&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The AI-Assisted Design Workflow
&lt;/h2&gt;

&lt;p&gt;Here's how a modern AI-assisted design workflow actually flows in practice:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk50gQ2xpZW50IEludGFrZSBGb3JtXSAtLT4gQnvwn6SWIEFJIEJyaWVmIEdlbmVyYXRvcn0KICBCIC0tPnxTdHJ1Y3R1cmVkIEJyaWVmfCBDW_CfjqggQUkgQ29sb3IgUGFsZXR0ZSBUb29sXQogIEIgLS0-fE1vb2QgJiBUb25lfCBEW_CflrzvuI8gR2VuZXJhdGl2ZSBJbWFnZSBJZGVhdGlvbl0KICBDIC0tPiBFW_Cfp5HigI3wn46oIERlc2lnbmVyIFJldmlld3MgaW4gRmlnbWFdCiAgRCAtLT4gRQogIEUgLS0-IEZ74pyFIERpcmVjdGlvbiBBcHByb3ZlZD99CiAgRiAtLT58WWVzfCBHW-Kame-4jyBSZWZpbmVtZW50ICYgUHJvZHVjdGlvbl0KICBGIC0tPnxOb3wgSFvwn5SEIEl0ZXJhdGUgd2l0aCBBSSBWYXJpYXRpb25zXQogIEggLS0-IEUKICBHIC0tPiBJW_Cfk6YgQUkgQmF0Y2ggRXhwb3J0IFNjcmlwdF0KICBJIC0tPiBKW_CfmoAgQ2xpZW50IERlbGl2ZXJ5XQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmermaid.ink%2Fimg%2FZ3JhcGggTFIKICBBW_Cfk50gQ2xpZW50IEludGFrZSBGb3JtXSAtLT4gQnvwn6SWIEFJIEJyaWVmIEdlbmVyYXRvcn0KICBCIC0tPnxTdHJ1Y3R1cmVkIEJyaWVmfCBDW_CfjqggQUkgQ29sb3IgUGFsZXR0ZSBUb29sXQogIEIgLS0-fE1vb2QgJiBUb25lfCBEW_CflrzvuI8gR2VuZXJhdGl2ZSBJbWFnZSBJZGVhdGlvbl0KICBDIC0tPiBFW_Cfp5HigI3wn46oIERlc2lnbmVyIFJldmlld3MgaW4gRmlnbWFdCiAgRCAtLT4gRQogIEUgLS0-IEZ74pyFIERpcmVjdGlvbiBBcHByb3ZlZD99CiAgRiAtLT58WWVzfCBHW-Kame-4jyBSZWZpbmVtZW50ICYgUHJvZHVjdGlvbl0KICBGIC0tPnxOb3wgSFvwn5SEIEl0ZXJhdGUgd2l0aCBBSSBWYXJpYXRpb25zXQogIEggLS0-IEUKICBHIC0tPiBJW_Cfk6YgQUkgQmF0Y2ggRXhwb3J0IFNjcmlwdF0KICBJIC0tPiBKW_CfmoAgQ2xpZW50IERlbGl2ZXJ5XQ%3Ftheme%3Ddark%26bgColor%3D1a1a2e" alt="Process Flowchart" width="1904" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key insight here: AI touches the beginning (research, brief, ideation) and the end (export, resizing) of the workflow. The middle — the actual design decisions, the composition, the emotional judgment — stays human.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical tips you can apply immediately:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use AI to generate 3–5 mood board directions before opening any design tool. This prevents the blank-canvas paralysis that kills creative momentum.&lt;/li&gt;
&lt;li&gt;Store your brand guidelines as a structured prompt template. Feed it to your LLM as a system prompt so every AI output is already brand-filtered.&lt;/li&gt;
&lt;li&gt;Automate your asset export pipeline. If you're manually exporting to five formats, you're wasting hours every week.&lt;/li&gt;
&lt;li&gt;Use AI-generated copy as placeholder text during layout. It's far more realistic than Lorem Ipsum and helps clients give better feedback.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Where Human Judgment Still Wins
&lt;/h2&gt;

&lt;p&gt;AI for graphic designers is genuinely powerful. But it has real blind spots.&lt;/p&gt;

&lt;p&gt;AI doesn't understand cultural nuance the way a human designer does. A color palette that's perfectly harmonious by algorithmic standards might carry unintended associations in a specific regional market. AI doesn't know that.&lt;/p&gt;

&lt;p&gt;Typography pairing remains an area where experienced designers outperform AI suggestions. The tools are improving, but the subtle tension between typefaces — the thing that makes a design feel considered — is still a human skill.&lt;/p&gt;

&lt;p&gt;Most importantly: client relationships are human work. Understanding what a client actually wants versus what they say they want, reading the room in a presentation, knowing when to push back on a bad brief — AI can't do any of that.&lt;/p&gt;

&lt;p&gt;Use AI to go faster. Use your judgment to go better.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: What is the best AI tool for graphic designers in 2026?
&lt;/h3&gt;

&lt;p&gt;There isn't a single best tool — it depends on the task. Adobe Firefly integrates tightly with Creative Cloud for image generation and generative fill. Figma's AI features are best for layout and UI work. For automation and custom workflows, Python scripts using OpenAI or Anthropic APIs give you the most flexibility. Most working designers use a combination of all three.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Can AI generate production-ready design assets?
&lt;/h3&gt;

&lt;p&gt;For most categories, not quite yet. AI-generated images work well for ideation, mood boards, and backgrounds, but often require manual cleanup for precise print-ready or vector work. AI-generated copy and color palettes, however, can go directly into production after a quick designer review. The gap is closing fast, though — in my experience, the quality in 2026 is dramatically better than two years ago.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How do I use the OpenAI API for design automation?
&lt;/h3&gt;

&lt;p&gt;Start with the Python &lt;code&gt;openai&lt;/code&gt; library. Set your &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; as an environment variable, then use &lt;code&gt;client.chat.completions.create()&lt;/code&gt; to send structured prompts requesting JSON output. The color palette generator example in this article is a good starting template. Use &lt;code&gt;response_format: { type: "json_object" }&lt;/code&gt; to get clean, parseable output you can pipe directly into design tools or export scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Will AI replace graphic designers?
&lt;/h3&gt;

&lt;p&gt;The honest answer in 2026: no, but it's already replacing designers who don't adapt. AI compresses the time it takes to do foundation work — research, ideation, asset prep. Designers who embrace these tools can take on more projects, deliver faster, and focus their energy on the creative decisions that actually differentiate their work. The designers most at risk are those doing purely repetitive production work with no creative differentiation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources I Recommend
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper on building AI-powered tools and integrations like the ones in this guide, &lt;a href="https://www.amazon.in/s?k=python+programming&amp;amp;tag=iniyarajan86-21" rel="noopener noreferrer"&gt;these Python programming books&lt;/a&gt; are a solid foundation — particularly anything covering APIs and automation, which translates directly to the design workflow scripts we built here.&lt;/p&gt;

&lt;p&gt;For deploying your own AI design automation tools as lightweight web apps, &lt;a href="https://m.do.co/c/f0a5b173fd4c" rel="noopener noreferrer"&gt;DigitalOcean&lt;/a&gt; is where I host side projects like these — simple, affordable, and fast to spin up.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Might Also Like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/midjourney-vs-dall-e-vs-stable-diffusion-2026-guide-1ina"&gt;Midjourney vs DALL-E vs Stable Diffusion: 2026 Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/how-to-use-ai-to-write-faster-in-2026-52ce"&gt;How to Use AI to Write Faster in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/iniyarajan86/elevenlabs-review-best-text-to-speech-ai-3enb"&gt;ElevenLabs Review: Best Text to Speech AI?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;My designer friend didn't just meet her deadline — she told me the AI-assisted process made her feel more creative, not less. Removing the friction of blank-canvas starts and repetitive exports gave her more mental space for the decisions that actually mattered.&lt;/p&gt;

&lt;p&gt;AI for graphic designers in 2026 is a genuine productivity multiplier. The tools are mature, the APIs are accessible, and the workflow patterns are well-established. The only thing left is to actually build them into your practice.&lt;/p&gt;

&lt;p&gt;Start small. Automate one thing this week — your asset export, your color exploration, your brief generation. See how it changes the texture of your work. Then build from there.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Go Deeper: Building AI Agents: A Practical Developer's Guide
&lt;/h2&gt;

&lt;p&gt;185 pages covering autonomous systems, RAG, multi-agent workflows, and production deployment — with complete code examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://iniyarajan.gumroad.com/l/building-ai-agents" rel="noopener noreferrer"&gt;Get the ebook →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Enjoyed this article?
&lt;/h2&gt;

&lt;p&gt;I write daily about &lt;strong&gt;AI tools, productivity, and how AI is changing the way we work&lt;/strong&gt; — practical tips you can use right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on &lt;a href="https://dev.to/iniyarajan86"&gt;Dev.to&lt;/a&gt; for daily articles&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://iniyarajanhashnodedev.hashnode.dev" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; for in-depth tutorials&lt;/li&gt;
&lt;li&gt;Follow me on &lt;a href="https://medium.com/@iniyarajan" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; for more stories&lt;/li&gt;
&lt;li&gt;Connect on &lt;a href="https://twitter.com/iniyaniOS" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; for quick tips&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If this helped you, drop a like and share it with a fellow developer!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aigraphicdesign</category>
      <category>designautomation</category>
      <category>aitools</category>
      <category>creativeworkflow</category>
    </item>
  </channel>
</rss>
