<?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: Philip Hern</title>
    <description>The latest articles on DEV Community by Philip Hern (@shrouwoods).</description>
    <link>https://dev.to/shrouwoods</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%2F3858493%2F9a8ff83c-d5c3-493f-9943-b91a2f0a61d8.jpg</url>
      <title>DEV Community: Philip Hern</title>
      <link>https://dev.to/shrouwoods</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shrouwoods"/>
    <language>en</language>
    <item>
      <title>one agent, one repo, one writer at a time</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Mon, 10 Aug 2026 11:38:53 +0000</pubDate>
      <link>https://dev.to/shrouwoods/one-agent-one-repo-one-writer-at-a-time-1o1f</link>
      <guid>https://dev.to/shrouwoods/one-agent-one-repo-one-writer-at-a-time-1o1f</guid>
      <description>&lt;p&gt;i wrote about &lt;a href="https://philliant.com/posts/20260808-parallel-subagents-when-to-use-them-vs-skills/" rel="noopener noreferrer"&gt;when parallel subagents beat regular skills&lt;/a&gt; and how the parent should keep shared writes serial. this post is the simpler rule underneath that pattern.&lt;/p&gt;

&lt;p&gt;only one agent should make file edits in a single repository at a time.&lt;/p&gt;

&lt;p&gt;that sounds conservative until you watch what happens when you break it. two agents, two unrelated files, no obvious overlap, and both still get worse at the job. the problem is not git merge conflicts alone. the problem is that agents do not snapshot the repo once and freeze it. they keep scanning for context while the tree is moving.&lt;/p&gt;

&lt;h2&gt;
  
  
  quick answer
&lt;/h2&gt;

&lt;p&gt;treat each repository as having &lt;strong&gt;one write lane&lt;/strong&gt;. let many agents read and analyze in parallel if the units are independent, but keep &lt;strong&gt;all file mutations&lt;/strong&gt; on one agent at a time, usually the parent conversation that launched the work.&lt;/p&gt;

&lt;p&gt;if agent a is editing a model file in one folder and agent b is editing metadata in another, agent b may still re-read shared config, search the repo for patterns, or infer conventions from files agent a is actively changing. the reads interleave with the writes. each agent builds a plan from a repo state that stops being true before the plan finishes.&lt;/p&gt;

&lt;p&gt;the fix is boring and effective. workers stay read-mostly. one agent applies edits serially. finish the write lane before you open a second one.&lt;/p&gt;

&lt;h2&gt;
  
  
  who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;people running parallel subagents or multiple cursor chats against the same codebase&lt;/li&gt;
&lt;li&gt;teams that noticed "correct but wrong" suggestions after concurrent agent sessions&lt;/li&gt;
&lt;li&gt;builders who want parallel speed on reviews without paying for parallel confusion on writes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  why this matters
&lt;/h2&gt;

&lt;p&gt;an agent's plan is only as good as the repo snapshot it believes it has. that belief is fragile.&lt;/p&gt;

&lt;p&gt;while an agent works, it searches, re-opens files, follows imports, checks conventions, and compares against neighboring examples. that is a feature. it is how the agent grounds advice in the actual codebase instead of generic patterns.&lt;/p&gt;

&lt;p&gt;but the same behavior becomes a bug when another agent is writing at the same time. the repo is a moving target. a config file changes mid-review. a new export appears while a worker is still reasoning from the old module layout. a parent dispatches two writers and each assumes the other's changes either already landed or never will.&lt;/p&gt;

&lt;p&gt;the failure modes are predictable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;stale context&lt;/strong&gt;: agent b reads version 1, agent a writes version 2, agent b proposes edits against version 1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;duplicated or conflicting edits&lt;/strong&gt;: two agents "fix" the same convention in different ways because each inferred a different baseline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;phantom dependencies&lt;/strong&gt;: an agent plans around a file that another agent renamed, deleted, or never finished creating&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;overconfident summaries&lt;/strong&gt;: each agent reports success against its local view while the combined result is incoherent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;none of this requires both agents to touch the same path. shared config, search results, import graphs, and convention scans are enough coupling.&lt;/p&gt;

&lt;h2&gt;
  
  
  reads in parallel, writes in series
&lt;/h2&gt;

&lt;p&gt;this is the split i use in practice.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;activity&lt;/th&gt;
&lt;th&gt;concurrency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;standards review across independent folders&lt;/td&gt;
&lt;td&gt;parallel read-only workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;documentation drift audit by doc area&lt;/td&gt;
&lt;td&gt;parallel read-only workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sanity check by category&lt;/td&gt;
&lt;td&gt;parallel read-only workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;scaffolding or editing files in one repo&lt;/td&gt;
&lt;td&gt;one writer at a time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;shared config, lockfiles, catalog indexes&lt;/td&gt;
&lt;td&gt;parent applies serially after aggregation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git staging, commits, pushes&lt;/td&gt;
&lt;td&gt;one agent, human-gated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;parallelism buys wall-clock time when the work is &lt;strong&gt;analysis against a stable tree&lt;/strong&gt;. serial writes keep the tree stable enough for analysis to mean something.&lt;/p&gt;

&lt;p&gt;if you already use the pattern from my &lt;a href="https://philliant.com/posts/20260808-parallel-subagents-when-to-use-them-vs-skills/" rel="noopener noreferrer"&gt;parallel subagents post&lt;/a&gt;, this is the same boundary with the guardrail turned up. workers analyze. the parent decides and applies. do not hand multiple agents write access to the same repo and assume file separation is enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  what about different files in different folders?
&lt;/h2&gt;

&lt;p&gt;different paths are not different universes.&lt;/p&gt;

&lt;p&gt;agents routinely cross folder boundaries to learn how the repo works. they read shared configuration, follow references, compare naming across layers, and search for prior work. a worker assigned to "folder x only" still pulls context from folder y when y is where the canonical example lives.&lt;/p&gt;

&lt;p&gt;so "agent a owns sql, agent b owns yml" is not a safe split by itself if both repos share conventions, generated artifacts, or a catalog that lists both. the write lane is the &lt;strong&gt;repository&lt;/strong&gt;, not the file glob you wished you had assigned.&lt;/p&gt;

&lt;p&gt;the safe exceptions are narrow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;truly separate repositories with no shared build or release surface&lt;/li&gt;
&lt;li&gt;read-only parallel audits where no worker mutates anything&lt;/li&gt;
&lt;li&gt;one writer plus several readers, with readers forbidden from applying patches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;everything else gets the single-writer rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  how this fits multiple chats, cloud agents, and multitask
&lt;/h2&gt;

&lt;p&gt;the constraint is operational, not philosophical. however many agents you use, count active &lt;strong&gt;writers&lt;/strong&gt; per repo, not open tabs.&lt;/p&gt;

&lt;p&gt;practical habits that work for me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;one editing conversation per repo&lt;/strong&gt; unless the previous write pass is fully landed and verified&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;background review is fine&lt;/strong&gt; if it stays read-only and you treat its output as provisional until the write lane is free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;do not mix a local write session with a cloud agent editing the same repo&lt;/strong&gt; even on different branches if both can touch working tree state you care about&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;queue the next write&lt;/strong&gt; instead of overlapping it. reviews can run while you wait. writes should not&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;if you use worktrees to isolate concurrent experiments, treat each worktree as its own repo surface for this rule. one writer per worktree still holds. the goal is to stop interleaved mutation and re-scanning on the same logical codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  a simple decision table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;situation&lt;/th&gt;
&lt;th&gt;allowed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;three subagents review five folders, no edits&lt;/td&gt;
&lt;td&gt;yes, parallel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;one parent edits while subagents review&lt;/td&gt;
&lt;td&gt;yes, if subagents are read-only and you accept provisional findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;two agents edit different files in one repo&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;two agents edit two repos that share a release contract&lt;/td&gt;
&lt;td&gt;treat as one write surface unless you truly isolate them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;parent aggregates findings, then applies patches itself&lt;/td&gt;
&lt;td&gt;yes, this is the default good pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;trivial one-line fix while a large agent job runs&lt;/td&gt;
&lt;td&gt;still no if the large job can write. finish or pause one lane&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;parallel agents are good at doing the same trusted review many times at once. they are bad at sharing a write lane they cannot see changing in real time.&lt;/p&gt;

&lt;p&gt;so i keep the concurrency on reads and the discipline on writes. one repository, one agent mutating files at a time. let everyone else look, compare, and report back. when it is time to change the tree, pick a single agent, apply the edits, verify, and only then open the lane again.&lt;/p&gt;

&lt;p&gt;that is less exciting than letting five agents "each take a corner," and it is much closer to what actually happens when five agents are all trying to learn the same repo at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  faq
&lt;/h2&gt;

&lt;h3&gt;
  
  
  can two agents edit if they use different branches?
&lt;/h3&gt;

&lt;p&gt;only if their working surfaces are fully isolated and you accept that each agent still will not see the other's in-flight edits. for most local agent workflows, that isolation is weaker than it looks. i still default to one writer.&lt;/p&gt;

&lt;h3&gt;
  
  
  is read-only parallel work safe while another agent writes?
&lt;/h3&gt;

&lt;p&gt;mostly yes, with one caveat. treat review output as provisional until the write lane closes. a read-only worker may analyze files that change before the parent aggregates results.&lt;/p&gt;

&lt;h3&gt;
  
  
  does this mean i cannot use parallel subagents at all?
&lt;/h3&gt;

&lt;p&gt;no. use them for read-mostly work such as reviews, audits, and sanity checks. keep the write lane in the parent. see the &lt;a href="https://philliant.com/posts/20260808-parallel-subagents-when-to-use-them-vs-skills/" rel="noopener noreferrer"&gt;parallel subagents guide&lt;/a&gt; for the full pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  what if the edits really are in completely unrelated packages?
&lt;/h3&gt;

&lt;p&gt;if there is no shared config, no shared catalog, no cross-package search path, and no release step that combines them, you might get away with parallel writes. i still queue writes anyway because the exceptions are rarer than they feel in the moment.&lt;/p&gt;

&lt;h3&gt;
  
  
  how does this relate to guardrails?
&lt;/h3&gt;

&lt;p&gt;guardrails define what an agent is allowed to do. this rule defines what you should let multiple agents do at the same time within those permissions. i keep both. see &lt;a href="https://philliant.com/posts/20260531-the-guardrails-i-actually-use-with-ai-agents/" rel="noopener noreferrer"&gt;the guardrails i actually use with ai agents&lt;/a&gt; for the wider kit.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cursor.com/changelog/2-4" rel="noopener noreferrer"&gt;subagents in cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/changelog/04-24-26" rel="noopener noreferrer"&gt;multitask, worktrees, and multi-root workspaces&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260808-parallel-subagents-when-to-use-them-vs-skills/" rel="noopener noreferrer"&gt;parallel subagents: when to use them vs regular skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260531-the-guardrails-i-actually-use-with-ai-agents/" rel="noopener noreferrer"&gt;the guardrails i actually use with ai agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260716-efficient-cursor-directory-for-token-efficiency/" rel="noopener noreferrer"&gt;an efficient .cursor directory: less context, better agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/cursor/" rel="noopener noreferrer"&gt;cursor series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cursor</category>
      <category>subagents</category>
      <category>workflow</category>
      <category>ai</category>
    </item>
    <item>
      <title>parallel subagents: when to use them vs regular skills</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Mon, 10 Aug 2026 11:38:52 +0000</pubDate>
      <link>https://dev.to/shrouwoods/parallel-subagents-when-to-use-them-vs-regular-skills-en</link>
      <guid>https://dev.to/shrouwoods/parallel-subagents-when-to-use-them-vs-regular-skills-en</guid>
      <description>&lt;p&gt;i have been using cursor skills for a while to turn repeated work into runbooks the agent can follow on demand. that pattern still works. what changed is that some tasks are not slow because the steps are hard. they are slow because the same review or audit has to run five times across five folders, five categories, or five doc areas, and a single agent does them sequentially.&lt;/p&gt;

&lt;p&gt;parallel subagents fix that kind of problem. they do not replace skills. they wrap them.&lt;/p&gt;

&lt;p&gt;if you already reorganized your &lt;code&gt;.cursor&lt;/code&gt; directory for &lt;a href="https://philliant.com/posts/20260716-efficient-cursor-directory-for-token-efficiency/" rel="noopener noreferrer"&gt;token efficiency&lt;/a&gt;, think of this post as the next decision. skills stay the canonical playbook. subagents decide when to run several copies of that playbook at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  quick answer
&lt;/h2&gt;

&lt;p&gt;use a &lt;strong&gt;skill&lt;/strong&gt; when one agent should follow one bounded workflow end to end, such as reviewing one file, scaffolding one model, or running one sanity check category you explicitly scoped.&lt;/p&gt;

&lt;p&gt;use a &lt;strong&gt;parallel subagent&lt;/strong&gt; when the same underlying skill applies to several &lt;strong&gt;independent units&lt;/strong&gt; and wall-clock time matters. the parent agent dispatches one subagent per unit, each subagent gets its own context window, and the parent aggregates the results afterward.&lt;/p&gt;

&lt;p&gt;the rule i use is if the units can run without reading each other's partial output, parallelize. if they share one mutable target or one sequential decision chain, keep it in one agent with one skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;people who already use cursor skills and notice multi-folder audits taking forever&lt;/li&gt;
&lt;li&gt;teams with repeatable review or maintenance workflows split across layers, packages, or doc areas&lt;/li&gt;
&lt;li&gt;builders who want faster end-of-task verification without giving up human control over writes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  why this matters
&lt;/h2&gt;

&lt;p&gt;a skill makes work &lt;strong&gt;repeatable&lt;/strong&gt;. a parallel subagent makes repeatable work &lt;strong&gt;concurrent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;that distinction sounds small until you run a standards review across five model layers, a sanity check across five categories, or a documentation audit across five doc zones. one agent can do all of it correctly and still feel painfully slow, because each unit waits for the previous one to finish.&lt;/p&gt;

&lt;p&gt;parallel subagents change the timing. wall-clock cost becomes closer to the slowest unit instead of the sum of all units. you still pay token cost across multiple agents, so this is not free. it is a trade. you spend more tokens to buy back waiting time on work you already trust enough to decompose.&lt;/p&gt;

&lt;h2&gt;
  
  
  definitions: skills vs subagents
&lt;/h2&gt;

&lt;p&gt;before choosing, it helps to know which artifact does what.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;artifact&lt;/th&gt;
&lt;th&gt;lives in&lt;/th&gt;
&lt;th&gt;job&lt;/th&gt;
&lt;th&gt;typical trigger&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;skill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.cursor/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;step-by-step runbook for one workflow&lt;/td&gt;
&lt;td&gt;parent agent loads it when the task matches the skill description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;parallel subagent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.cursor/agents/&amp;lt;name&amp;gt;.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;orchestration wrapper that dispatches the same skill across independent units&lt;/td&gt;
&lt;td&gt;parent agent launches subagents when scope spans multiple units&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;skills answer "how do i do this task correctly?"&lt;/p&gt;

&lt;p&gt;subagents answer "how do i run that task many times at once without losing control?"&lt;/p&gt;

&lt;p&gt;neither one replaces rules. rules stay passive guardrails. skills and subagents are active workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  when to use a regular skill
&lt;/h2&gt;

&lt;p&gt;reach for the underlying skill directly when the scope is &lt;strong&gt;one unit&lt;/strong&gt; or when the work is &lt;strong&gt;inherently serial&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;good skill cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;review one sql file or one yml file&lt;/li&gt;
&lt;li&gt;scaffold one new model and its metadata&lt;/li&gt;
&lt;li&gt;run one documentation update for one page&lt;/li&gt;
&lt;li&gt;sanity-check one small change where formal multi-category review would be ceremony&lt;/li&gt;
&lt;li&gt;any task where the next step depends on the output of the previous step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;skills are also the right place to keep the canonical checklist, references, done criteria, and acceptance language. the skill is the source of truth. the subagent should not duplicate that content. it should point to it.&lt;/p&gt;

&lt;p&gt;if you are unsure whether the scope is truly one unit, start with the skill. parallel orchestration adds coordination overhead. only use it when the parallelization is obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  when to use a parallel subagent
&lt;/h2&gt;

&lt;p&gt;reach for a parallel subagent when all of these are true:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the same skill applies to multiple units&lt;/li&gt;
&lt;li&gt;the units are independent enough to review or audit separately&lt;/li&gt;
&lt;li&gt;you want results aggregated into one report&lt;/li&gt;
&lt;li&gt;the task is substantial enough that serial execution takes too long&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;good parallel subagent cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;standards review across every layer in a data platform repo&lt;/li&gt;
&lt;li&gt;yml review across the same layers as the paired sql review&lt;/li&gt;
&lt;li&gt;end-of-task sanity checks split by category such as correctness, compatibility, edge cases, conventions, and overall review&lt;/li&gt;
&lt;li&gt;documentation drift audits split by doc area&lt;/li&gt;
&lt;li&gt;dependency audits split by surface such as runtime, packages, ci, and container base image&lt;/li&gt;
&lt;li&gt;entity sync work when several new backend entities need the same scaffolding pattern at once&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;bad parallel subagent cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a one-line typo fix&lt;/li&gt;
&lt;li&gt;a single-file edit where you already know the answer&lt;/li&gt;
&lt;li&gt;a workflow that must mutate the same shared file from multiple angles at once&lt;/li&gt;
&lt;li&gt;anything where step two genuinely requires step one's write to exist first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the last point matters. parallel subagents are for &lt;strong&gt;read-mostly&lt;/strong&gt; or &lt;strong&gt;analyze-then-decide&lt;/strong&gt; work. when multiple units need to edit the same shared config, the parent should collect findings first and apply shared writes &lt;strong&gt;serially&lt;/strong&gt; afterward.&lt;/p&gt;

&lt;h2&gt;
  
  
  the pattern i use: one skill, one orchestrator, many workers
&lt;/h2&gt;

&lt;p&gt;my parallel setup has three layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  layer 1: the underlying skill
&lt;/h3&gt;

&lt;p&gt;this is the real playbook. it contains the checklist, canonical references, output format, and done criteria for one unit of work.&lt;/p&gt;

&lt;p&gt;examples in my repos include skills for sql standards review, yml standards review, sanity checks, documentation audits, and entity sync scaffolding. each one knows how to handle &lt;strong&gt;one&lt;/strong&gt; scoped slice.&lt;/p&gt;

&lt;h3&gt;
  
  
  layer 2: the parallel subagent
&lt;/h3&gt;

&lt;p&gt;this file lives in &lt;code&gt;.cursor/agents/&lt;/code&gt; and does not replace the skill. it defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the default unit breakdown, such as one subagent per model layer or one subagent per sanity category&lt;/li&gt;
&lt;li&gt;which underlying skill each worker should follow&lt;/li&gt;
&lt;li&gt;the output contract each worker must return&lt;/li&gt;
&lt;li&gt;when &lt;strong&gt;not&lt;/strong&gt; to use parallel mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;naming helps. i use a &lt;code&gt;-parallel&lt;/code&gt; suffix on orchestrator subagents so the choice is obvious in the catalog.&lt;/p&gt;

&lt;h3&gt;
  
  
  layer 3: shared orchestration mechanics
&lt;/h3&gt;

&lt;p&gt;i keep one small shared skill for dispatch rules every parallel wrapper follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;use the explicit scope from the user. if the scope is one unit, call the underlying skill directly and skip orchestration.&lt;/li&gt;
&lt;li&gt;dispatch one self-contained prompt per unit in a single parent message. each prompt should include paths, the canonical skill, the expected output format, and write boundaries.&lt;/li&gt;
&lt;li&gt;aggregate results in the parent. label failed or partial units clearly. retry a transient failure once if that is useful.&lt;/li&gt;
&lt;li&gt;apply changes only when authorized. keep shared-file writes serial in the parent. never let workers mutate git state on their own.&lt;/li&gt;
&lt;li&gt;run proportionate final verification once at the end. skip formal orchestration for trivial edits.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;that shared layer keeps every parallel subagent consistent without copying the same coordination instructions into five different files.&lt;/p&gt;

&lt;h2&gt;
  
  
  how the parent should dispatch work
&lt;/h2&gt;

&lt;p&gt;the parent agent is the conductor, not another worker.&lt;/p&gt;

&lt;p&gt;a good dispatch prompt for each unit includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the exact scope for that unit only&lt;/li&gt;
&lt;li&gt;a link or name for the canonical skill to follow&lt;/li&gt;
&lt;li&gt;read-only vs write permission for that unit&lt;/li&gt;
&lt;li&gt;the response format you want back, such as pass or concern, file list, violation counts, or missing coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a bad dispatch prompt says "review everything" and hopes the subagent guesses the boundary.&lt;/p&gt;

&lt;p&gt;i send all dispatches in one parent turn when possible so the units actually run concurrently. then i aggregate in a fixed order. for reviews, i surface correctness and compatibility findings before style nits. for audits, i surface missing files and contract breaks before commentary.&lt;/p&gt;

&lt;h2&gt;
  
  
  what should stay serial
&lt;/h2&gt;

&lt;p&gt;parallel subagents are not an excuse to let five agents edit the same shared file at once.&lt;/p&gt;

&lt;p&gt;keep these in the parent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writes to shared source files used by multiple units&lt;/li&gt;
&lt;li&gt;git staging, commits, pushes, or merges&lt;/li&gt;
&lt;li&gt;choosing which findings become actual code changes&lt;/li&gt;
&lt;li&gt;final compile, lint, or check commands that validate the combined result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;workers analyze. the parent decides and applies.&lt;/p&gt;

&lt;p&gt;that boundary is why parallel mode works well for reviews, audits, and sanity checks, and why i still use a single skill for a straightforward write workflow unless the units truly touch different files with no overlap.&lt;/p&gt;

&lt;h2&gt;
  
  
  a practical decision table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;situation&lt;/th&gt;
&lt;th&gt;use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;one file, one model, one doc page&lt;/td&gt;
&lt;td&gt;underlying skill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;trivial edit, docs-only change, formatting&lt;/td&gt;
&lt;td&gt;no formal workflow, or a very small inline ask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;same review repeated across independent folders&lt;/td&gt;
&lt;td&gt;parallel subagent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;end-of-task verification across multiple categories&lt;/td&gt;
&lt;td&gt;parallel subagent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;several new entities needing the same scaffold pattern&lt;/td&gt;
&lt;td&gt;parallel subagent, with shared files updated serially in the parent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;step b requires step a's write to exist&lt;/td&gt;
&lt;td&gt;single agent, single skill, serial steps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;background merge-ready pr hygiene&lt;/td&gt;
&lt;td&gt;cloud or babysit workflows, not this pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  how to build your first parallel subagent
&lt;/h2&gt;

&lt;p&gt;you do not need a perfect fleet on day one. this sequence worked for me.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) stabilize the underlying skill first
&lt;/h3&gt;

&lt;p&gt;if the single-unit workflow is still fuzzy, parallelizing it will just produce five fuzzy answers faster. get the checklist, references, and output contract right in the skill before you wrap it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) identify real units of independence
&lt;/h3&gt;

&lt;p&gt;ask where the task naturally splits. model layers, doc areas, sanity categories, dependency surfaces, and service entities are all common unit boundaries. the split should be obvious enough that you can write one paragraph of scope per unit without overlap.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) create the orchestrator file in &lt;code&gt;.cursor/agents/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;frontmatter should answer when to use it and when &lt;strong&gt;not&lt;/strong&gt; to use it. point to the underlying skill and the shared orchestration skill instead of restating both.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) define the default scope table
&lt;/h3&gt;

&lt;p&gt;a small table in the subagent file beats prose. one row per unit, with the path or category and what the worker should return.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) test on a medium-sized real change
&lt;/h3&gt;

&lt;p&gt;run the parallel subagent once at the end of a substantial change set, not on every keystroke. check whether aggregation is readable and whether any shared-file write would have collided if workers had been allowed to edit freely.&lt;/p&gt;

&lt;h3&gt;
  
  
  6) link it from your local cursor index
&lt;/h3&gt;

&lt;p&gt;add one row to your &lt;code&gt;.cursor&lt;/code&gt; catalog so future sessions route correctly. "use the skill for one unit, use the parallel subagent for many" should be discoverable without remembering filenames.&lt;/p&gt;

&lt;h2&gt;
  
  
  how this fits with cursor's &lt;code&gt;/multitask&lt;/code&gt; direction
&lt;/h2&gt;

&lt;p&gt;cursor has been moving toward async subagents and better multitask orchestration in the product itself. the repo pattern i describe here is the durable part regardless of ui changes.&lt;/p&gt;

&lt;p&gt;skills remain the canonical instructions. subagents remain explicit orchestration boundaries. the parent remains responsible for aggregation and shared writes. whether the platform dispatches workers through &lt;code&gt;/multitask&lt;/code&gt;, the agents window, or a manual multi-launch in chat, the decision rule stays the same.&lt;/p&gt;

&lt;p&gt;parallelize independent units. keep shared mutation serial.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;skills taught my agents &lt;strong&gt;how&lt;/strong&gt; to do repeatable work well. parallel subagents taught them &lt;strong&gt;when&lt;/strong&gt; to do several copies of that work at the same time without turning one conversation into a queue.&lt;/p&gt;

&lt;p&gt;default to the skill. escalate to a parallel subagent when the scope spans independent units and the wait time starts to hurt. keep orchestration rules in one shared place, keep workers read-mostly, and let the parent own the merge.&lt;/p&gt;

&lt;p&gt;that is the split that has saved me the most time on reviews and end-of-task checks without giving up control.&lt;/p&gt;

&lt;h2&gt;
  
  
  faq
&lt;/h2&gt;

&lt;h3&gt;
  
  
  should i duplicate my skill checklist inside the subagent?
&lt;/h3&gt;

&lt;p&gt;no. the skill stays canonical. the subagent should only define unit boundaries, dispatch instructions, aggregation order, and when to skip parallel mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  do parallel subagents cost more?
&lt;/h3&gt;

&lt;p&gt;usually yes, because several agents run at once and each carries its own context. you are trading token spend for wall-clock time. use them on substantial tasks where that trade is worth it.&lt;/p&gt;

&lt;h3&gt;
  
  
  can i parallelize writes?
&lt;/h3&gt;

&lt;p&gt;only when units touch completely separate files with no shared contract surface. even then, i prefer read-first parallel analysis and serial application in the parent. it is slower to apply than to analyze, but much safer.&lt;/p&gt;

&lt;h3&gt;
  
  
  what if one subagent fails?
&lt;/h3&gt;

&lt;p&gt;the parent should mark that unit failed or partial, continue aggregating the rest, and retry once if the failure looks transient. do not silently treat a missing unit as a clean pass.&lt;/p&gt;

&lt;h3&gt;
  
  
  when should i skip parallel mode entirely?
&lt;/h3&gt;

&lt;p&gt;skip it for trivial edits, single-file work, docs-only formatting, and any task where formal verification would be more expensive than the change itself. parallel orchestration is for substantial scope, not habit.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cursor.com/changelog/2-4" rel="noopener noreferrer"&gt;subagents in cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/help/customization/skills" rel="noopener noreferrer"&gt;skills in cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/changelog/04-24-26" rel="noopener noreferrer"&gt;multitask, worktrees, and multi-root workspaces&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260716-efficient-cursor-directory-for-token-efficiency/" rel="noopener noreferrer"&gt;an efficient .cursor directory: less context, better agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260314-how-to-use-ai-to-create-ai-rules-skills-and-commands/" rel="noopener noreferrer"&gt;how to use ai to create ai rules, skills, and commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260315-starter-templates-for-ai-rules-skills-and-commands/" rel="noopener noreferrer"&gt;starter templates for ai rules, skills, and commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260629-cursor-automations-for-housekeeping-and-hygiene/" rel="noopener noreferrer"&gt;cursor automations for housekeeping and hygiene&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260531-the-guardrails-i-actually-use-with-ai-agents/" rel="noopener noreferrer"&gt;the guardrails i actually use with ai agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/cursor/" rel="noopener noreferrer"&gt;cursor series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cursor</category>
      <category>subagents</category>
      <category>skills</category>
      <category>workflow</category>
    </item>
    <item>
      <title>low thinking mode is actually better</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Tue, 04 Aug 2026 12:58:03 +0000</pubDate>
      <link>https://dev.to/shrouwoods/low-thinking-mode-is-actually-better-52ja</link>
      <guid>https://dev.to/shrouwoods/low-thinking-mode-is-actually-better-52ja</guid>
      <description>&lt;h2&gt;
  
  
  quick answer
&lt;/h2&gt;

&lt;p&gt;when working with top-tier reasoning models, defaulting to low or minimal thinking mode usually yields better results than maxing out reasoning effort. my experience indicares that max thinking budgets often lead models down rabbit holes where they overthink simple requests, hallucinate broader context, and perform unprompted refactors outside your task scope. keeping powerful models on a leash gives you faster execution, lower cost, cleaner scope control, and tighter feedback loops.&lt;/p&gt;

&lt;h2&gt;
  
  
  who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;developers using reasoning models inside cursor, vsc, or api tools who keep catching models changing code they were not asked to touch&lt;/li&gt;
&lt;li&gt;builders who want faster iteration cycles without sacrificing the baseline intelligence of top-tier models&lt;/li&gt;
&lt;li&gt;anyone looking to reduce model latency and token costs while improving output predictability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  why this matters
&lt;/h2&gt;

&lt;p&gt;when reasoning models first arrived, the common assumption was that more thinking time always meant higher quality. in practice, giving a model several minutes to contemplate a request often changes its behavior in an unwanted way.&lt;/p&gt;

&lt;p&gt;after minutes contemplating a simple file edit, the model seems to feel obligated to justify all that processing time. it begins inspecting surrounding methods, rewriting styles, "cleaning up" code that was not broken, and refactoring contracts you deliberately wanted preserved. by treating every small prompt like a multi-stage architecture problem, extended thinking degrades task precision and introduces scope drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  the trade-offs: low thinking vs deep reasoning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  minimal thinking mode (default)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;fast responses that preserve fast feedback loops&lt;/li&gt;
&lt;li&gt;strict adherence to prompt scope with minimal side effects&lt;/li&gt;
&lt;li&gt;lower API cost and reduced token consumption&lt;/li&gt;
&lt;li&gt;requires clear, well-bounded human instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  deep reasoning mode (opt-in)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;necessary for subtle logic bugs, ambiguous specs, or greenfield architecture&lt;/li&gt;
&lt;li&gt;higher latency and noticeable waiting periods between iterations&lt;/li&gt;
&lt;li&gt;prone to unprompted refactoring and scope expansion on small tasks&lt;/li&gt;
&lt;li&gt;expensive to run repeatedly on routine edits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  when to switch up to deep thinking
&lt;/h2&gt;

&lt;p&gt;low thinking mode should be your default starting point, but deep thinking still has a place. switch to higher reasoning tiers only when:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;you are diagnosing a subtle concurrency or state bug where quick pattern matching fails&lt;/li&gt;
&lt;li&gt;you are drafting an architecture spec or designing a new data vault contract from scratch&lt;/li&gt;
&lt;li&gt;the initial low-thinking output missed a core logical dependency that you do not want to hand-guide&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;for 90% of daily coding, refactoring, and file maintenance, pairing a top model with its lowest thinking preset gives you the intelligence you need without the unsolicited rewrites you do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  faq
&lt;/h2&gt;

&lt;h3&gt;
  
  
  does low thinking mode mean using a smaller or cheaper model?
&lt;/h3&gt;

&lt;p&gt;no. the strategy is to use the strongest, most capable model available, but run it with its lowest reasoning effort preset. you keep the model's underlying knowledge and instruction-following quality while disabling the extended internal monologue that leads to overthinking.&lt;/p&gt;

&lt;h3&gt;
  
  
  what should i do if low thinking mode misses something?
&lt;/h3&gt;

&lt;p&gt;if a fast response misses a subtle requirement, try sharpening the prompt with explicit constraints first. if the underlying problem is genuinely complex, that is your signal to deliberately toggle the model into a deeper thinking tier for that specific prompt, then switch back once the barrier is cleared.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260320-deep-dive-ai-models-i-use/" rel="noopener noreferrer"&gt;ai models i actually use in cursor (2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260314-ai-br-ai-n-fr-ai/" rel="noopener noreferrer"&gt;ai br-ai-n fr-ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260320-deep-dive-ai-models-i-use/" rel="noopener noreferrer"&gt;ai models i actually use in cursor (2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260314-ai-br-ai-n-fr-ai/" rel="noopener noreferrer"&gt;ai br-ai-n fr-ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260319-practical-ai-workflow-jira-github-mcp/" rel="noopener noreferrer"&gt;a practical ai workflow: jira, github, and mcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260318-from-prototype-to-production-ai/" rel="noopener noreferrer"&gt;from prototype to production: my early adopter view of ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>models</category>
      <category>workflow</category>
      <category>cursor</category>
    </item>
    <item>
      <title>im on a boat</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Mon, 03 Aug 2026 13:48:42 +0000</pubDate>
      <link>https://dev.to/shrouwoods/im-on-a-boat-4a0c</link>
      <guid>https://dev.to/shrouwoods/im-on-a-boat-4a0c</guid>
      <description>&lt;h2&gt;
  
  
  thesis
&lt;/h2&gt;

&lt;p&gt;i am on a boat, and the first thing i notice is not the scenery. it is how badly i needed to be unreachable from my regular work. this website is my hobby, so do not conflate the two. i am not writing this to perform productivity on vacation. i am writing it because sitting in an internet cafe on day one of an alaskan cruise made something obvious that i keep avoiding at home. i talk about giving things room to breathe, but i rarely give them the space i know they need. an extended vacation is one of the few ways i can force the disconnection i am bad at choosing on my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  context
&lt;/h2&gt;

&lt;p&gt;i have argued for this before. in &lt;a href="https://philliant.com/posts/20260606-room-to-breathe/" rel="noopener noreferrer"&gt;room to breathe&lt;/a&gt; i wrote about stepping off the improvement treadmill so i could understand what i shipped before piling on the next change. in &lt;a href="https://philliant.com/posts/20260627-what-room-to-breathe-makes-room-for/" rel="noopener noreferrer"&gt;what room to breathe makes room for&lt;/a&gt; i followed up with the idea that the pause is not idle, it is where bigger, slower ideas finally get air. i believe all of that. i just do not live it consistently. at my desk, there is always one more thing i could tweak, one more pass that feels cheap because the tools make it feel cheap. the cruise did not fix my personality. it removed the option to pretend i will disconnect later.&lt;/p&gt;

&lt;h2&gt;
  
  
  argument
&lt;/h2&gt;

&lt;h3&gt;
  
  
  i preach the pause but skip it
&lt;/h3&gt;

&lt;p&gt;the gap between what i know and what i do is embarrassing. i can describe &lt;a href="https://philliant.com/posts/20260320-brain-defrag-time-away-from-screens/" rel="noopener noreferrer"&gt;brain defrag&lt;/a&gt; time, protected space, letting a solution run before i rework it again. i can explain why &lt;a href="https://philliant.com/posts/20260406-little-by-little-a-little-becomes-a-lot/" rel="noopener noreferrer"&gt;little by little&lt;/a&gt; beats an endless sprint. then i go right back to hovering over the same projects like a gardener who cannot stop watering and trimming long enough for anything to actually grow. you cannot constantly fuss with a plant and expect it to develop roots. sometimes you have to step back and let it grow on its own schedule, not yours.&lt;/p&gt;

&lt;h3&gt;
  
  
  forced disconnection is the tool i need
&lt;/h3&gt;

&lt;p&gt;that is why real disconnection matters, and why an extended vacation is not a luxury for me, it is a structural requirement. i am not good at disconnecting in small doses. a free evening turns into "just one more hour." a weekend turns into catching up. only something as blunt as a cruise, days away from my normal setup, makes the boundary stick. the forced disconnection is not punishment. it is the only reliable way my projects get the room to breathe that they desperately deserve and need, because i will not grant it voluntarily often enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  the work gets time away from me too
&lt;/h3&gt;

&lt;p&gt;yes, i can sit here and reflect on my time away from work. that part is easy to narrate. the more striking realization is the time alone my work will have away from me. my projects do not only need me to stop touching them. they need stretches where i am not re-reading, re-scoping, or "improving" them every day. without that distance, i am the constant weather. with it, they get to settle, surprise me, or fail in ways i would never see if i never left the room. the vacation is not just rest for me. it is rest for the work from my restlessness.&lt;/p&gt;

&lt;h3&gt;
  
  
  tension or counterpoint
&lt;/h3&gt;

&lt;p&gt;the obvious objection is that needing a cruise to disconnect is a personal failure, not a lesson worth publishing. fair. a healthier person might protect boundaries without leaving the continent. i am not arguing that everyone needs a boat. i am admitting that i do, or something like it, because softer boundaries do not hold for me. there is also the irony of posting from an internet cafe about disconnecting. i see it. this post is the exception that proves the rule, a short note from the edge of offline, not proof that i have mastered balance.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;so i am trying to treat the next stretch as protected time, mostly for everything that is not this page. the day job gets silence. the hobby projects get silence too, even the ones i love, because love is exactly what makes me hover. when i get back, i expect some of them to look different in my head simply because i was not in the room every day telling them what to become. that is the point. i needed time away from work, but my work needed time away from me just as much.&lt;/p&gt;

&lt;h2&gt;
  
  
  related on this site
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260606-room-to-breathe/" rel="noopener noreferrer"&gt;room to breathe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260627-what-room-to-breathe-makes-room-for/" rel="noopener noreferrer"&gt;what room to breathe makes room for&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260320-brain-defrag-time-away-from-screens/" rel="noopener noreferrer"&gt;brain defrag: time away from screens (and from "one more" with ai)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>notes</category>
      <category>rest</category>
      <category>travel</category>
      <category>vacation</category>
    </item>
    <item>
      <title>chapter 4 of ai-assisted data engineering is live</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Mon, 20 Jul 2026 14:00:41 +0000</pubDate>
      <link>https://dev.to/shrouwoods/chapter-4-of-ai-assisted-data-engineering-is-live-3hm9</link>
      <guid>https://dev.to/shrouwoods/chapter-4-of-ai-assisted-data-engineering-is-live-3hm9</guid>
      <description>&lt;h2&gt;
  
  
  thesis
&lt;/h2&gt;

&lt;p&gt;chapter 4 of &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt; is live. it is called &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/04-the-editor-and-the-workspace/" rel="noopener noreferrer"&gt;the editor and the workspace&lt;/a&gt;, and it opens the setup part of the book, where judgment gets an environment that can carry context instead of starting from a blank prompt every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  context
&lt;/h2&gt;

&lt;p&gt;after three chapters about ownership, judgment, and production standards, chapter 4 gets practical. the fastest way to work with agents is to shape the workspace once so the agent sees the system the way the work actually crosses it. it follows &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/03-from-prototype-to-production/" rel="noopener noreferrer"&gt;chapter 3&lt;/a&gt;, continuing the weekly release cadence for the book.&lt;/p&gt;

&lt;h2&gt;
  
  
  argument
&lt;/h2&gt;

&lt;h3&gt;
  
  
  what chapter 4 covers
&lt;/h3&gt;

&lt;p&gt;this chapter covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;why a multi-repo workspace makes the agent more useful&lt;/li&gt;
&lt;li&gt;which editor settings and shortcuts matter more than tool fashion&lt;/li&gt;
&lt;li&gt;how one rule and one skill can raise the quality floor&lt;/li&gt;
&lt;li&gt;why setup should be verified before serious work depends on it&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  why it belongs here
&lt;/h3&gt;

&lt;p&gt;chapter 4 sits here because the book is building one layer at a time. the early chapters established judgment and ownership. each release after that adds another practical surface where those standards either hold or fail.&lt;/p&gt;

&lt;p&gt;it is easy to dismiss setup as tinkering. the chapter argues the opposite. setup is where repeated judgment becomes reusable context, and that makes every later agent run less fragile.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;this is another monday release in the serialized run. chapter 5 is next in the queue, and it will publish the following monday if the schedule holds. the full book landing page stays at &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt;, and the companion channel stays at &lt;a href="https://youtube.com/@philliant" rel="noopener noreferrer"&gt;philliant on youtube&lt;/a&gt; for any longer explanation that works better out loud.&lt;/p&gt;

&lt;h2&gt;
  
  
  further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Integrated_development_environment" rel="noopener noreferrer"&gt;integrated development environment&lt;/a&gt;, the broader idea of an editor as an integrated work surface&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related on this site
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260713-ai-assisted-data-engineering-chapter-3/" rel="noopener noreferrer"&gt;chapter 3 announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260630-youtube-channel-companion-to-the-writing/" rel="noopener noreferrer"&gt;philliant on youtube is the companion to the writing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/commentary/" rel="noopener noreferrer"&gt;commentary series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>workflow</category>
      <category>editor</category>
      <category>tools</category>
    </item>
    <item>
      <title>capability is not a reason to act</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Mon, 20 Jul 2026 13:56:34 +0000</pubDate>
      <link>https://dev.to/shrouwoods/capability-is-not-a-reason-to-act-1m08</link>
      <guid>https://dev.to/shrouwoods/capability-is-not-a-reason-to-act-1m08</guid>
      <description>&lt;h2&gt;
  
  
  thesis
&lt;/h2&gt;

&lt;p&gt;having an ai agent at my side can feel like having a genie with unlimited wishes. i can ask it to adopt the newest pattern, add another automation, reorganize a system, or squeeze one more improvement out of something that already works. the old cost of turning an idea into action has fallen dramatically, but that does not make every idea worth acting on. capability is not a reason to act. before i use another wish, i still need to decide whether i need what i am asking for, whether it fits my situation, and whether i am prepared to understand and own the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  context
&lt;/h2&gt;

&lt;p&gt;scarcity used to impose restraint for me. a change took enough time and effort that i naturally asked whether it was worth doing. ai weakens that filter. when an agent can research a trend, draft an implementation, update the documentation, and check the result in one sitting, trying the idea feels almost free.&lt;/p&gt;

&lt;p&gt;almost free is not free. every generated change creates something for me to review, learn, maintain, and eventually troubleshoot. the agent can keep producing without rest, but i cannot keep absorbing without limit. the genie has unlimited wishes. i still have one human-sized mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  argument
&lt;/h2&gt;

&lt;h3&gt;
  
  
  the ability to do something says nothing about its value
&lt;/h3&gt;

&lt;p&gt;an agent can make an idea possible without making it useful. those are separate judgments. the model answers "can this be done?" very quickly, but only i can answer "does this need to be done here?"&lt;/p&gt;

&lt;p&gt;that second question should come first. what problem am i solving? who benefits? what happens if i leave the current system alone? what new responsibility will the change create? if i cannot give a clear answer, implementation speed is irrelevant. i am using capability to manufacture work rather than solve a need.&lt;/p&gt;

&lt;h3&gt;
  
  
  unlimited wishes encourage careless wishing
&lt;/h3&gt;

&lt;p&gt;the genie metaphor matters because unlimited wishes change how i value each wish. when implementation was expensive, i chose carefully. when implementation feels abundant, it is easy to ask for things simply because i can.&lt;/p&gt;

&lt;p&gt;that is how useful assistance turns into an improvement treadmill. one more abstraction, one more automation, one more layer of agent configuration. each addition may be defensible on its own, but together they can leave me with a system that has grown faster than my understanding of it. the agent did not overextend itself. i overextended the amount of generated work i could responsibly own.&lt;/p&gt;

&lt;h3&gt;
  
  
  trends are options, not instructions
&lt;/h3&gt;

&lt;p&gt;ai makes following a new trend unusually easy. i do not need to master the tool before experimenting with it because the agent can read the documentation, scaffold the integration, and explain the unfamiliar parts as it goes. that can be valuable, but it can also remove the pause where i would normally ask whether the trend belongs in my work at all.&lt;/p&gt;

&lt;p&gt;new does not mean necessary. popular does not mean relevant. a pattern that helps another team at another scale may add nothing to my situation except complexity. i want to treat each trend as an option to evaluate, not an instruction to obey. the right question is not whether the agent can bring it into my system. the right question is whether my system has a real problem that the trend solves better than what i already have.&lt;/p&gt;

&lt;h3&gt;
  
  
  consideration must come before action
&lt;/h3&gt;

&lt;p&gt;the faster action becomes, the more deliberate the decision before it needs to be. my filter is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;what specific need exists&lt;/li&gt;
&lt;li&gt;what evidence says the current approach is insufficient&lt;/li&gt;
&lt;li&gt;why this change fits my situation&lt;/li&gt;
&lt;li&gt;what i will have to understand and maintain afterward&lt;/li&gt;
&lt;li&gt;what would tell me not to proceed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;if those questions do not produce a convincing case, i do not need another prompt. i need to leave the system alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  sometimes the best use of capability is restraint
&lt;/h3&gt;

&lt;p&gt;restraint is not a rejection of ai. it is how i keep ai useful. the point of an agent is not to maximize the number of things i ask it to change. the point is to help me act well when action makes sense.&lt;/p&gt;

&lt;p&gt;i have already written about giving work &lt;a href="https://philliant.com/posts/20260606-room-to-breathe/" rel="noopener noreferrer"&gt;room to breathe&lt;/a&gt; after it ships. this is the decision that comes before that. room to breathe says to stop squeezing once the useful work is done. capability is not a reason to act says not to begin merely because the squeezing has become easy.&lt;/p&gt;

&lt;h3&gt;
  
  
  tension or counterpoint
&lt;/h3&gt;

&lt;p&gt;there is a risk in becoming so cautious that i use "consideration" as an excuse never to experiment. some useful ideas only reveal their value after i try them, and ai makes small experiments cheaper than they have ever been.&lt;/p&gt;

&lt;p&gt;the distinction is intent and containment. an experiment should test a specific question, within boundaries i understand, with a clear way to stop. chasing a trend because everyone is discussing it is not the same as running a focused experiment to learn whether it solves one of my problems. consideration does not prohibit action. it gives action a reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;the agent beside me may never tire, run out of ideas, or ask me to stop. that does not mean i should match its appetite for action. i am still the person who has to understand the changes, carry their consequences, and decide whether they made anything better.&lt;/p&gt;

&lt;p&gt;so i am learning to leave wishes unused. i do not need to follow every trend, automate every process, or improve every thing that could be improved. the genie can wait. when a real need appears and the change makes sense for my situation, the capability will still be there. until then, not acting is also a decision, and often it is the better one.&lt;/p&gt;

&lt;h2&gt;
  
  
  related on this site
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260606-room-to-breathe/" rel="noopener noreferrer"&gt;room to breathe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260320-brain-defrag-time-away-from-screens/" rel="noopener noreferrer"&gt;brain defrag: time away from screens (and from "one more" with ai)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260326-the-danger-of-trusting-the-ai-agent/" rel="noopener noreferrer"&gt;the danger of trusting the ai agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260614-ai-only-makes-sense-if-you-have-already-been-through-the-cognitive-struggle-yourself/" rel="noopener noreferrer"&gt;ai only makes sense if you have already been through the cognitive struggle yourself&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/ai/" rel="noopener noreferrer"&gt;ai series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>judgment</category>
      <category>workflow</category>
      <category>restraint</category>
    </item>
    <item>
      <title>an efficient .cursor directory: less context, better agents</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Thu, 16 Jul 2026 20:27:42 +0000</pubDate>
      <link>https://dev.to/shrouwoods/an-efficient-cursor-directory-less-context-better-agents-kl0</link>
      <guid>https://dev.to/shrouwoods/an-efficient-cursor-directory-less-context-better-agents-kl0</guid>
      <description>&lt;p&gt;i spent time recently reorganizing how my repositories load cursor context. the old setup worked, but it was heavy. every agent turn started with a large bundle of rules, duplicated guidance, and inventories the model did not need for most tasks.&lt;/p&gt;

&lt;p&gt;the new setup is deliberately smaller. agents still find what they need, but they pay for less context up front. that means lower token cost, less time waiting for the model to "read the room", and answers that stay closer to the task i actually asked for.&lt;/p&gt;

&lt;p&gt;if you already have &lt;a href="https://philliant.com/posts/20260313-my-cursor-setup/" rel="noopener noreferrer"&gt;my cursor setup&lt;/a&gt; in place, think of this post as the next layer. that post covers the full toolkit. this one covers how to arrange the toolkit so it does not eat your context window before work begins.&lt;/p&gt;

&lt;h2&gt;
  
  
  quick answer
&lt;/h2&gt;

&lt;p&gt;treat your &lt;code&gt;.cursor&lt;/code&gt; directory like a library with a card catalog, not like one giant PDF pasted into every prompt. keep a thin always-on layer for guardrails, route everything else through links, scope detailed rules to the file types they apply to, and load skills on demand. the agent can always open more context when the task requires it, but the default should be the minimum useful baseline.&lt;/p&gt;

&lt;h2&gt;
  
  
  who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;people who already use cursor rules, skills, or &lt;code&gt;AGENTS.md&lt;/code&gt; and notice agents getting slower or noisier over time&lt;/li&gt;
&lt;li&gt;teams whose &lt;code&gt;.cursor&lt;/code&gt; folder grew organically and now repeats the same instructions in three places&lt;/li&gt;
&lt;li&gt;builders who care about token cost and want cleaner first responses without giving up deep project knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  why this matters
&lt;/h2&gt;

&lt;p&gt;context is not free. every always-on rule, every paragraph in &lt;code&gt;AGENTS.md&lt;/code&gt;, and every skill description the system injects up front consumes tokens before the agent writes a single useful line.&lt;/p&gt;

&lt;p&gt;that cost shows up in three places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;money&lt;/strong&gt;, because larger prompts cost more per turn&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;latency&lt;/strong&gt;, because the model spends time absorbing context you may not have needed for this task&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;focus&lt;/strong&gt;, because a bloated baseline makes it easier for the agent to wander, repeat itself, or "helpfully" expand scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the counterintuitive part is that &lt;strong&gt;less&lt;/strong&gt; default context often produces &lt;strong&gt;better&lt;/strong&gt; results. when the baseline is tight, the agent has fewer conflicting instructions to reconcile. when it needs sql conventions, it loads sql conventions. when it needs a release checklist skill, it loads that skill. the fetch is intentional instead of accidental.&lt;/p&gt;

&lt;h2&gt;
  
  
  the problem with a "kitchen sink" .cursor folder
&lt;/h2&gt;

&lt;p&gt;most &lt;code&gt;.cursor&lt;/code&gt; directories start sensibly. you add one rule for coding standards. then a skill for your most common workflow. then &lt;code&gt;AGENTS.md&lt;/code&gt; grows because you keep answering the same architecture questions. then another rule duplicates half of the first one because you wanted sql-specific guidance.&lt;/p&gt;

&lt;p&gt;soon every chat begins like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a long always-on rule with architecture, naming, validation, git policy, and documentation philosophy&lt;/li&gt;
&lt;li&gt;a second always-on rule with overlapping standards&lt;/li&gt;
&lt;li&gt;an &lt;code&gt;AGENTS.md&lt;/code&gt; file that restates the same material in prose&lt;/li&gt;
&lt;li&gt;a skill inventory table with fifteen rows, even when you only needed one skill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;none of this is wrong in isolation. together it is expensive noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  the pattern i use now: route, do not restate
&lt;/h2&gt;

&lt;p&gt;the organizing principle is &lt;strong&gt;one canonical document per topic, indexes that route rather than restate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;think in layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;layer&lt;/th&gt;
&lt;th&gt;job&lt;/th&gt;
&lt;th&gt;load profile&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;entry point, hard constraints, route-by-task table&lt;/td&gt;
&lt;td&gt;small, always present&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cursor/README.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;local index of rules, skills, and subagents&lt;/td&gt;
&lt;td&gt;small, linked from entry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cursor/rules/*.mdc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;enforceable standards&lt;/td&gt;
&lt;td&gt;thin always-on + glob-scoped detail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cursor/skills/*/SKILL.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;procedural runbooks&lt;/td&gt;
&lt;td&gt;on demand when task matches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cursor/reference/*.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;catalogs, contracts, long inventories&lt;/td&gt;
&lt;td&gt;only when maintaining or choosing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  layer 1: a thin &lt;code&gt;AGENTS.md&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; should answer two questions quickly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;what must never be violated on this repo&lt;/li&gt;
&lt;li&gt;where do i go next for the task at hand&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;a useful layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# my-repo agent entry&lt;/span&gt;

one-paragraph architecture invariant.

&lt;span class="gu"&gt;## hard constraints&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; link to the always-on behavior rule
&lt;span class="p"&gt;-&lt;/span&gt; link to task-scoped rules
&lt;span class="p"&gt;-&lt;/span&gt; one line on validation expectations

&lt;span class="gu"&gt;## route by task&lt;/span&gt;

| task                 | canonical source             |
| -------------------- | ---------------------------- |
| local setup          | README                       |
| cursor asset layout  | .cursor/README.md            |
| full skill inventory | .cursor/reference/catalog.md |
| domain architecture  | docs/architecture note       |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;what to leave out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;full skill tables (link to a catalog instead)&lt;/li&gt;
&lt;li&gt;long prose explanations of every layer in your data platform&lt;/li&gt;
&lt;li&gt;step-by-step workflows (those belong in skills)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  layer 2: &lt;code&gt;.cursor/README.md&lt;/code&gt; as the local index
&lt;/h3&gt;

&lt;p&gt;this file is the map of cursor-native assets. keep it scannable with tables, not essays.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;which rules exist and when they apply&lt;/li&gt;
&lt;li&gt;which skills exist and when to use them&lt;/li&gt;
&lt;li&gt;which subagents wrap parallel work&lt;/li&gt;
&lt;li&gt;where maintenance docs live&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;tell the agent explicitly when &lt;strong&gt;not&lt;/strong&gt; to load the heavy stuff. a line like "do not open the full catalog unless maintaining assets or the user asks for an inventory" saves tokens repeatedly.&lt;/p&gt;

&lt;h3&gt;
  
  
  layer 3: split always-on rules from task-scoped rules
&lt;/h3&gt;

&lt;p&gt;this is the highest-leverage change i made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;always-on&lt;/strong&gt; should mean "behavior and safety", not "every convention in the repository".&lt;/p&gt;

&lt;p&gt;my always-on behavior rule covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;question before assuming&lt;/li&gt;
&lt;li&gt;prevent scope drift&lt;/li&gt;
&lt;li&gt;keep git user-controlled&lt;/li&gt;
&lt;li&gt;match verification to risk&lt;/li&gt;
&lt;li&gt;documentation philosophy in one short section&lt;/li&gt;
&lt;li&gt;architecture invariants in a few lines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;detailed conventions move to glob-scoped rules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sql&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;conventions"&lt;/span&gt;
&lt;span class="na"&gt;globs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.sql"&lt;/span&gt;
&lt;span class="na"&gt;alwaysApply&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yaml&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;conventions"&lt;/span&gt;
&lt;span class="na"&gt;globs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.yml"&lt;/span&gt;
&lt;span class="na"&gt;alwaysApply&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now a markdown edit does not load sql rules. a yaml edit does not load manuscript rules. the agent gets the right lane without reading every lane at once.&lt;/p&gt;

&lt;p&gt;for content-heavy repos, the same idea applies across zones. one rule scoped to website posts, another scoped to book chapters, each with its own glob pattern. the agent loads voice and punctuation rules for the files it is actually touching.&lt;/p&gt;

&lt;h3&gt;
  
  
  layer 4: skills as on-demand runbooks
&lt;/h3&gt;

&lt;p&gt;skills are powerful because they are &lt;strong&gt;procedural&lt;/strong&gt; and &lt;strong&gt;task-bound&lt;/strong&gt;. that also makes them expensive if you treat them like always-on policy.&lt;/p&gt;

&lt;p&gt;keep each skill focused:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontmatter &lt;code&gt;description&lt;/code&gt; that says when to use it&lt;/li&gt;
&lt;li&gt;required inputs&lt;/li&gt;
&lt;li&gt;ordered steps&lt;/li&gt;
&lt;li&gt;done criteria&lt;/li&gt;
&lt;li&gt;links to canonical reference docs instead of copying them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the agent discovers skills through descriptions and loads the file when the task matches. it should not need the full text of every skill before you say hello.&lt;/p&gt;

&lt;p&gt;if you want a template for tightening skill structure, see &lt;a href="https://philliant.com/posts/20260315-starter-templates-for-ai-rules-skills-and-commands/" rel="noopener noreferrer"&gt;starter templates for ai rules, skills, and commands&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  layer 5: reference files for inventories and contracts
&lt;/h3&gt;

&lt;p&gt;some material is too long to inline but still valuable. put it in &lt;code&gt;.cursor/reference/&lt;/code&gt; and link to it.&lt;/p&gt;

&lt;p&gt;good candidates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;full skill and subagent catalogs&lt;/li&gt;
&lt;li&gt;model or schema contracts&lt;/li&gt;
&lt;li&gt;maintaining-assets runbooks&lt;/li&gt;
&lt;li&gt;shared prose contracts used by multiple rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;each reference file should say at the top when to load it. catalogs especially should warn against opening them on every task.&lt;/p&gt;

&lt;h2&gt;
  
  
  duplication is the silent token tax
&lt;/h2&gt;

&lt;p&gt;the fastest audit you can run is a duplication pass.&lt;/p&gt;

&lt;p&gt;search for the same ideas repeated across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;always-on rules&lt;/li&gt;
&lt;li&gt;skills&lt;/li&gt;
&lt;li&gt;README files inside &lt;code&gt;.cursor/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;common duplicates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;git policy stated in three places&lt;/li&gt;
&lt;li&gt;architecture overview copied into every rule&lt;/li&gt;
&lt;li&gt;validation commands listed in both a skill and a rule&lt;/li&gt;
&lt;li&gt;full directory trees pasted into prompts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;pick one canonical home for each topic. everywhere else, replace the copy with a link.&lt;/p&gt;

&lt;p&gt;this also makes maintenance easier. when validation changes, you update one file instead of hunting for stale copies the agent may still believe.&lt;/p&gt;

&lt;h2&gt;
  
  
  indexing hygiene still matters
&lt;/h2&gt;

&lt;p&gt;token efficiency is not only about rules and skills. it is also about what cursor indexes from the repo.&lt;/p&gt;

&lt;p&gt;keep using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.gitignore&lt;/code&gt; for generated output and dependencies&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.cursorignore&lt;/code&gt; for extra exclusions such as build artifacts, minified bundles, and local secrets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;less junk in the index means less irrelevant material during semantic search and fewer wrong-file detours.&lt;/p&gt;

&lt;p&gt;i covered the basics in &lt;a href="https://philliant.com/posts/20260313-my-cursor-setup/" rel="noopener noreferrer"&gt;my cursor setup&lt;/a&gt; under context hygiene. the &lt;code&gt;.cursor&lt;/code&gt; directory optimization and indexing optimization work together.&lt;/p&gt;

&lt;h2&gt;
  
  
  let the agent fetch, but make fetching intentional
&lt;/h2&gt;

&lt;p&gt;a lean baseline does not mean a ignorant agent. it means the agent starts focused and expands deliberately.&lt;/p&gt;

&lt;p&gt;patterns that work well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@Files&lt;/code&gt; and &lt;code&gt;@Folders&lt;/code&gt; when you already know where the answer lives&lt;/li&gt;
&lt;li&gt;task-scoped rules that attach automatically when the agent edits matching files&lt;/li&gt;
&lt;li&gt;skills the agent opens because the task description matches the skill's &lt;code&gt;description&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;reference catalogs opened for maintenance, inventory questions, or ambiguous workflow choice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;patterns that waste tokens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pasting entire directories into always-on instructions&lt;/li&gt;
&lt;li&gt;writing "read all docs before doing anything" into a rule&lt;/li&gt;
&lt;li&gt;creating five always-on rules because you could not decide which one was canonical&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the model is good at retrieval when you give it a map. it is worse when you give it the whole encyclopedia and ask it to find page one.&lt;/p&gt;

&lt;h2&gt;
  
  
  a practical migration path
&lt;/h2&gt;

&lt;p&gt;you do not need a weekend rewrite. this sequence worked for me:&lt;/p&gt;

&lt;h3&gt;
  
  
  1) inventory what loads every turn
&lt;/h3&gt;

&lt;p&gt;list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rules with &lt;code&gt;alwaysApply: true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;large sections of &lt;code&gt;AGENTS.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;any skill or subagent list inlined in an always-on file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ask for each item: "did i need this on a generic question about yesterday's pull request?"&lt;/p&gt;

&lt;h3&gt;
  
  
  2) rewrite &lt;code&gt;AGENTS.md&lt;/code&gt; as a router
&lt;/h3&gt;

&lt;p&gt;keep hard constraints and a route-by-task table. move everything else behind links.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) collapse always-on behavior into one thin rule
&lt;/h3&gt;

&lt;p&gt;merge overlapping guardrails. link out to collaboration preferences or behavioral skills instead of copying them.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) extract task-scoped rules with globs
&lt;/h3&gt;

&lt;p&gt;sql, yaml, typescript, website markdown, book markdown, ci workflows. each gets its own scoped rule if the guidance is non-trivial.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) move inventories to reference files
&lt;/h3&gt;

&lt;p&gt;catalogs, contracts, and maintenance guides live under &lt;code&gt;.cursor/reference/&lt;/code&gt;. add a "when to load" note at the top.&lt;/p&gt;

&lt;h3&gt;
  
  
  6) dedupe and delete
&lt;/h3&gt;

&lt;p&gt;if two files say the same thing, pick a winner and remove the loser. stale duplicates are worse than missing docs because they look authoritative.&lt;/p&gt;

&lt;h3&gt;
  
  
  7) test with three prompts
&lt;/h3&gt;

&lt;p&gt;run these after the refactor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a generic task outside your specialty rules (should stay fast and focused)&lt;/li&gt;
&lt;li&gt;a file-type-specific task (should pull the right scoped rule without you mentioning it)&lt;/li&gt;
&lt;li&gt;a maintenance task such as "add a new skill" (should route to the catalog or maintaining doc)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  what improved after the refactor
&lt;/h2&gt;

&lt;p&gt;the differences are subtle per turn but add up quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;first responses arrive with less preamble and less repeated policy quoting&lt;/li&gt;
&lt;li&gt;sql tasks stop inheriting markdown voice rules and vice versa&lt;/li&gt;
&lt;li&gt;token spend on routine edits dropped because the baseline shrank&lt;/li&gt;
&lt;li&gt;when an agent does expand scope, it is usually because the task actually required more context, not because the repo forced it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;this is the same philosophy behind &lt;a href="https://philliant.com/posts/20260629-cursor-automations-for-housekeeping-and-hygiene/" rel="noopener noreferrer"&gt;cursor automations for housekeeping and hygiene&lt;/a&gt;, where the automation prompt stays short because the repo already contains the playbook. efficient &lt;code&gt;.cursor&lt;/code&gt; layout makes both interactive agents and background automations cheaper to run.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;you do not need a perfect &lt;code&gt;.cursor&lt;/code&gt; directory on day one. you need one that grows without accumulating duplicate authority.&lt;/p&gt;

&lt;p&gt;start small, route aggressively, scope rules to the files they govern, and treat catalogs as reference material rather than default context. the agent will still go look when it needs to. that is the point. you are just stopping it from carrying the whole library into every conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  faq
&lt;/h2&gt;

&lt;h3&gt;
  
  
  how small should my always-on layer be?
&lt;/h3&gt;

&lt;p&gt;small enough that you can read it in under a minute and still trust the agent on safety and scope. if your always-on material needs scrolling, move detail into glob-scoped rules or skills.&lt;/p&gt;

&lt;h3&gt;
  
  
  will lean context make the agent miss project conventions?
&lt;/h3&gt;

&lt;p&gt;only if you removed the canonical source entirely. routing fixes that. the conventions still exist, they just load when relevant. if you see misses, tighten the skill &lt;code&gt;description&lt;/code&gt;, adjust globs, or add one line in &lt;code&gt;AGENTS.md&lt;/code&gt; pointing to the canonical doc.&lt;/p&gt;

&lt;h3&gt;
  
  
  should i optimize tokens or optimize for "the agent always knows everything"?
&lt;/h3&gt;

&lt;p&gt;optimize for intentional loading. "always knows everything" sounds safe but usually means "always reads everything", which is slower, costlier, and often muddier. give the agent a map and let retrieval do its job.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cursor.com/docs/context/rules" rel="noopener noreferrer"&gt;rules in cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/help/customization/skills" rel="noopener noreferrer"&gt;skills in cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cursor.com/help/customization/ignore-files" rel="noopener noreferrer"&gt;ignore files&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260313-my-cursor-setup/" rel="noopener noreferrer"&gt;my cursor setup: settings, rules, skills, and mcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260315-starter-templates-for-ai-rules-skills-and-commands/" rel="noopener noreferrer"&gt;starter templates for ai rules, skills, and commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260314-how-to-use-ai-to-create-ai-rules-skills-and-commands/" rel="noopener noreferrer"&gt;how to use ai to create ai rules, skills, and commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260629-cursor-automations-for-housekeeping-and-hygiene/" rel="noopener noreferrer"&gt;cursor automations for housekeeping and hygiene&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/cursor/" rel="noopener noreferrer"&gt;cursor series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cursor</category>
      <category>workflow</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>chapter 3 of ai-assisted data engineering is live</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Mon, 13 Jul 2026 15:43:49 +0000</pubDate>
      <link>https://dev.to/shrouwoods/chapter-3-of-ai-assisted-data-engineering-is-live-b51</link>
      <guid>https://dev.to/shrouwoods/chapter-3-of-ai-assisted-data-engineering-is-live-b51</guid>
      <description>&lt;h2&gt;
  
  
  thesis
&lt;/h2&gt;

&lt;p&gt;chapter 3 of &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt; is live. it is called &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/03-from-prototype-to-production/" rel="noopener noreferrer"&gt;from prototype to production&lt;/a&gt;, and it moves the book from mindset into the production bar, where ai-assisted work has to be measured, verified, and designed for real blast radius.&lt;/p&gt;

&lt;h2&gt;
  
  
  context
&lt;/h2&gt;

&lt;p&gt;this is the chapter where the book turns from warning into operating standard. prototypes can survive vibes, but production work needs evidence, tests, and reliability thinking before the output reaches anyone else. it follows &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/02-the-danger-of-trusting-the-agent/" rel="noopener noreferrer"&gt;chapter 2&lt;/a&gt;, continuing the weekly release cadence for the book.&lt;/p&gt;

&lt;h2&gt;
  
  
  argument
&lt;/h2&gt;

&lt;h3&gt;
  
  
  what chapter 3 covers
&lt;/h3&gt;

&lt;p&gt;this chapter covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changed when ai moved from side-task novelty into operational systems&lt;/li&gt;
&lt;li&gt;why production mistakes cost more than prototype mistakes&lt;/li&gt;
&lt;li&gt;how verification becomes evidence instead of vibes&lt;/li&gt;
&lt;li&gt;why reliability is a design responsibility, not a final polish step&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  why it belongs here
&lt;/h3&gt;

&lt;p&gt;chapter 3 sits here because the book is building one layer at a time. the early chapters established judgment and ownership. each release after that adds another practical surface where those standards either hold or fail.&lt;/p&gt;

&lt;p&gt;the tempting argument is that a prototype mindset is good enough if the model output looks right. chapter 3 pushes back on that because looking right is exactly the easiest standard for a model to satisfy.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;this is another monday release in the serialized run. chapter 4 is next in the queue, and it will publish the following monday if the schedule holds. the full book landing page stays at &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt;, and the companion channel stays at &lt;a href="https://youtube.com/@philliant" rel="noopener noreferrer"&gt;philliant on youtube&lt;/a&gt; for any longer explanation that works better out loud.&lt;/p&gt;

&lt;h2&gt;
  
  
  further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Software_prototyping" rel="noopener noreferrer"&gt;software prototyping&lt;/a&gt;, the useful but limited role of prototypes before production standards take over&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related on this site
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260708-ai-assisted-data-engineering-chapter-2/" rel="noopener noreferrer"&gt;chapter 2 announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260630-youtube-channel-companion-to-the-writing/" rel="noopener noreferrer"&gt;philliant on youtube is the companion to the writing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/commentary/" rel="noopener noreferrer"&gt;commentary series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>dataengineering</category>
      <category>production</category>
      <category>verification</category>
    </item>
    <item>
      <title>bronze, silver, and gold standard data vault 2.0</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Thu, 09 Jul 2026 15:04:51 +0000</pubDate>
      <link>https://dev.to/shrouwoods/bronze-silver-and-gold-standard-data-vault-20-1dfk</link>
      <guid>https://dev.to/shrouwoods/bronze-silver-and-gold-standard-data-vault-20-1dfk</guid>
      <description>&lt;p&gt;i finally got a data vault 2.0 data product to actual gold standard, and yes, i am going to let myself enjoy that one.&lt;/p&gt;

&lt;p&gt;this was not a clean build from day one. the warehouse started as a mishmash. layers blurred together, business logic lived in the wrong places, and every new consumer request turned into a debate about where the rule belonged. getting from that state to real gold took time, but the definitions were always the guide. bronze is the raw historical foundation. silver is the business-enriched layer. gold is the governed consumer layer. once those jobs were clear, the architecture could finally do what it was supposed to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  quick answer
&lt;/h2&gt;

&lt;p&gt;in a proper data vault 2.0 stack, &lt;strong&gt;bronze&lt;/strong&gt; is the raw and standardized historical foundation, landing first and then taking data vault structure in the raw vault layer. &lt;strong&gt;silver&lt;/strong&gt; is the business-enriched layer, where the business vault materializes reusable business logic. &lt;strong&gt;gold&lt;/strong&gt; is the consumer layer, where the information delivery layer serves governed presentation views for apps, BI, and other consumers, preferably over precalculated business vault tables.&lt;/p&gt;

&lt;p&gt;gold matters because it is where the warehouse becomes usable without giving up lineage. the raw vault preserves history. the business vault makes business meaning durable. the information delivery layer turns that meaning into a contract consumers can trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;data engineers building data vault 2.0 beyond the raw vault&lt;/li&gt;
&lt;li&gt;analytics engineers trying to understand where the business vault ends and the information delivery layer begins&lt;/li&gt;
&lt;li&gt;technical leads deciding whether their warehouse has reached a real consumer gold layer&lt;/li&gt;
&lt;li&gt;anyone who inherited a layered warehouse that still feels like a mishmash&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  why this matters
&lt;/h2&gt;

&lt;p&gt;data vault 2.0 is excellent at preserving change, but preserving change is not the same as serving a product. a raw vault can be modeled correctly and still be too awkward for an application, BI team, or downstream consumer to use directly.&lt;/p&gt;

&lt;p&gt;that is why the bronze, silver, and gold language is useful when it is tied to real layers. it keeps each layer clear about its job. the raw vault should not become a dumping ground for business rules. the business vault should not be skipped because a dashboard wants a quick answer. the consumer layer should not become a hiding place for duplicated logic that belongs upstream.&lt;/p&gt;

&lt;p&gt;when the layers do their jobs, the system gets easier to reason about. when they blur together, every new request becomes a debate about where the logic belongs.&lt;/p&gt;

&lt;h2&gt;
  
  
  where i started
&lt;/h2&gt;

&lt;p&gt;the warehouse i am talking about did not begin as a textbook data vault 2.0 product. it began as a mishmash.&lt;/p&gt;

&lt;p&gt;some history was modeled well. some business logic lived in presentation views. some calculations were copied into reports. some tables were safe to query and some only made sense if you already knew the backstory. the raw vault existed, but the business vault was thin or missing in places, and the consumer layer kept absorbing work that should have lived upstream.&lt;/p&gt;

&lt;p&gt;that is common in the "real world" where getting the work done quickly often overpowers doing the work correctly. the team knows data vault 2.0 is the long-term direction, but delivery pressure keeps pulling logic into whatever layer is fastest to ship. over time the warehouse grows, but the architecture stops explaining itself.&lt;/p&gt;

&lt;p&gt;i did not fix that by renaming folders or declaring victory early. i fixed it by making the layer definitions real and then moving the work to the right place.&lt;/p&gt;

&lt;h2&gt;
  
  
  bronze, preserving the facts
&lt;/h2&gt;

&lt;p&gt;bronze is where the platform starts preserving what arrived.&lt;/p&gt;

&lt;p&gt;in the stack i am talking about, that begins with raw ingestion and then becomes standardized raw history in the raw vault layer. this is where data vault 2.0 earns its keep as a non-destructive historical model. hubs represent stable business keys. links represent relationships. satellites preserve descriptive context. effective satellites capture relationship effectivity when the model needs it.&lt;/p&gt;

&lt;p&gt;bronze or raw silver is doing its job when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source data lands without overwriting useful history&lt;/li&gt;
&lt;li&gt;business keys are modeled consistently&lt;/li&gt;
&lt;li&gt;relationships are separated from descriptive context&lt;/li&gt;
&lt;li&gt;load metadata and record source are preserved&lt;/li&gt;
&lt;li&gt;history can survive source changes and backfills&lt;/li&gt;
&lt;li&gt;business presentation logic stays out of the raw vault&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;this layer is already a major win. it gives the rest of the platform a historical foundation that can be trusted. but it is still a foundation, not the final consumer product.&lt;/p&gt;

&lt;p&gt;that distinction matters. the raw vault should be understandable to engineers, but it does not need to be the easiest thing for every consumer to query. its job is to preserve the truth cleanly enough that better serving layers can be built on top.&lt;/p&gt;

&lt;h2&gt;
  
  
  silver, making business meaning durable
&lt;/h2&gt;

&lt;p&gt;silver is where the business vault earns its place.&lt;/p&gt;

&lt;p&gt;the business vault is the business-enriched layer. it materializes the business rules, calculations, cleansing, and conformed logic that should not be repeated in every downstream view. in the architecture i am talking about, the business vault is built as dynamic tables, so the logic is not just a thin view someone hopes performs well enough. it is a materialized layer with refresh behavior, tests, documentation, and a clear purpose.&lt;/p&gt;

&lt;p&gt;silver is doing its job when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;business rules live once instead of being pasted across reports&lt;/li&gt;
&lt;li&gt;calculations are materialized where multiple consumers need them&lt;/li&gt;
&lt;li&gt;source-specific rough edges are cleaned or conformed before serving&lt;/li&gt;
&lt;li&gt;temporal logic is handled deliberately&lt;/li&gt;
&lt;li&gt;reusable business tables sit between the raw vault and the information delivery layer&lt;/li&gt;
&lt;li&gt;tests and documentation explain what the business layer guarantees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;this is where the hard middle work lives. it is also the layer people are tempted to skip. the raw vault exists, the consumer wants a view, and it feels faster to jump straight to presentation.&lt;/p&gt;

&lt;p&gt;that shortcut is how gold gets polluted. if the business vault does not hold the reusable business meaning, the information delivery layer has to carry it. then app views, BI views, extracts, and one-off models each grow their own copy of the same rules. that is not gold. that is a maintenance problem wearing a nice name.&lt;/p&gt;

&lt;h2&gt;
  
  
  gold, serving the consumer contract
&lt;/h2&gt;

&lt;p&gt;gold is the information delivery layer.&lt;/p&gt;

&lt;p&gt;that sentence is the center of the whole post. gold is not just "the prettiest table". gold is the governed presentation and semantic layer that apps, BI, and other consumers actually depend on.&lt;/p&gt;

&lt;p&gt;in the gold standard architecture, the information delivery layer mostly serves views over precalculated business vault tables. that is the part i care about. the expensive and reusable business meaning has already been shaped in the business vault, so the information delivery layer can focus on naming, presentation, access, governance, and consumer contract.&lt;/p&gt;

&lt;p&gt;gold is doing its job when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;app and BI consumers get stable governed views&lt;/li&gt;
&lt;li&gt;column names and types match the consumer contract&lt;/li&gt;
&lt;li&gt;business logic mostly comes from the business vault instead of being reinvented in the information delivery layer&lt;/li&gt;
&lt;li&gt;access is applied at the consumer boundary&lt;/li&gt;
&lt;li&gt;lineage stays readable back through the business vault and raw vault&lt;/li&gt;
&lt;li&gt;presentation views are useful without pretending the raw vault does not exist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;this is why i am comfortable calling the result gold standard. not because every model is perfect forever, but because the architecture has stopped fighting itself. each layer has a job, and the jobs are finally lined up.&lt;/p&gt;

&lt;h2&gt;
  
  
  how i got from mishmash to gold
&lt;/h2&gt;

&lt;p&gt;the move from mishmash to gold was not one heroic refactor. it was a sequence of smaller decisions that all pointed the same direction.&lt;/p&gt;

&lt;p&gt;first, i stopped treating the raw vault like a shortcut to consumer answers. history stayed in the raw vault. presentation logic moved out. that alone reduced a lot of confusion about which table was "the real one".&lt;/p&gt;

&lt;p&gt;second, i stopped letting the consumer layer absorb business rules just because a view was the fastest place to ship them. when a calculation needed to be reused, it went into the business vault. when a rule only mattered to one report, i still asked whether it would matter again before leaving it downstream.&lt;/p&gt;

&lt;p&gt;third, i materialized the business vault on purpose. reusable business meaning should not live in fragile view chains that every consumer inherits differently. dynamic tables gave the silver layer a real home with refresh behavior, tests, and documentation.&lt;/p&gt;

&lt;p&gt;fourth, i made the information delivery layer thinner on purpose. consumer views should mostly shape and govern what the business vault already proved. naming, access, presentation, and contract belong there. duplicated business logic does not.&lt;/p&gt;

&lt;p&gt;fifth, i wrote the definitions down and treated them as architecture, not opinion. bronze means raw standardized history. silver means materialized business meaning. gold means governed consumer views over that business meaning. once that language was stable, every new model had a clearer destination.&lt;/p&gt;

&lt;p&gt;that is how the mishmash became gold. not by pretending the warehouse was always clean, but by making the layer jobs real and then moving the work until the system matched the definitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  what changed when i reached it
&lt;/h2&gt;

&lt;p&gt;the biggest signal was that the model stopped needing a tour guide.&lt;/p&gt;

&lt;p&gt;before gold, even a technically correct warehouse can feel like oral tradition. someone has to explain which view has the real logic, which report copied the rule slightly differently, which table is safe to query, and which one only makes sense if you know the backstory.&lt;/p&gt;

&lt;p&gt;after gold, the path is much cleaner. the raw vault preserves the data vault 2.0 history. the business vault materializes the business meaning. the information delivery layer serves the consumer contract. if a new consumer needs a governed view, i know where it belongs. if a calculation changes, i know where it should be fixed. if an agent helps scaffold the next piece, it has a stronger pattern to follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  what gold is not
&lt;/h2&gt;

&lt;p&gt;gold is not permission to treat the consumer layer like a junk drawer.&lt;/p&gt;

&lt;p&gt;that is the easiest way to ruin it. consumers see that layer first, so it is tempting to keep adding logic there until a view becomes the whole warehouse. the consumer layer should serve the contract. the business vault should hold reusable business meaning. the raw vault should preserve historical structure.&lt;/p&gt;

&lt;p&gt;gold is also not an app-shaped serving layer.&lt;/p&gt;

&lt;p&gt;copying operational table layouts can help when consumers need source-like access without querying production systems. that is still a different lane from governed presentation built over precalculated business tables.&lt;/p&gt;

&lt;p&gt;legacy migration views are separate too. they may be necessary. they are not the bronze-to-silver-to-gold path.&lt;/p&gt;

&lt;h2&gt;
  
  
  why this feels worth bragging about
&lt;/h2&gt;

&lt;p&gt;data vault 2.0 requires discipline for the payoff.&lt;/p&gt;

&lt;p&gt;separate keys from relationships. preserve descriptive history. model effectivity carefully. keep business rules out of the raw vault. resist flattening everything just because the first report wants a convenient layout.&lt;/p&gt;

&lt;p&gt;that discipline can feel expensive while the system is being built. then the gold layer arrives and the payoff becomes visible. consumers get usable views. engineering gets a clean place to maintain business logic. lineage stays readable. the next change has somewhere obvious to go.&lt;/p&gt;

&lt;p&gt;that is the win. the raw vault gives me the historical foundation. the business vault gives me the business-enriched silver layer. the information delivery layer gives me consumer gold. getting all three to line up is the gold standard i was chasing, and i finally have it.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/data-vault-2.0/" rel="noopener noreferrer"&gt;data vault 2.0 series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260324-left-join-effective-satellite-cte/" rel="noopener noreferrer"&gt;left join an effective satellite without duplicating rows (use a cte)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260529-dynamic-tables-where-have-you-been-all-my-life/" rel="noopener noreferrer"&gt;dynamic tables, where have you been all my life?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260402-how-i-use-cursor-and-ai-agents-to-write-dbt-tests-and-documentation/" rel="noopener noreferrer"&gt;how i use cursor and ai agents to write dbt tests and documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>datavault</category>
      <category>dataengineering</category>
      <category>modeling</category>
      <category>architecture</category>
    </item>
    <item>
      <title>chapter 2 of ai-assisted data engineering is live</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Wed, 08 Jul 2026 12:16:16 +0000</pubDate>
      <link>https://dev.to/shrouwoods/chapter-2-of-ai-assisted-data-engineering-is-live-2je</link>
      <guid>https://dev.to/shrouwoods/chapter-2-of-ai-assisted-data-engineering-is-live-2je</guid>
      <description>&lt;h2&gt;
  
  
  thesis
&lt;/h2&gt;

&lt;p&gt;chapter 2 of &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt; is live. it is called &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/02-the-danger-of-trusting-the-agent/" rel="noopener noreferrer"&gt;the danger of trusting the agent&lt;/a&gt;, and it is the darker companion to &lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/01-why-ai-rests-on-earned-judgment/" rel="noopener noreferrer"&gt;chapter 1, why ai rests on earned judgment&lt;/a&gt;. if chapter 1 is about the judgment that makes acceleration safe, chapter 2 is about what happens when you let acceleration run ahead of that judgment anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  context
&lt;/h2&gt;

&lt;p&gt;i teased this back in &lt;a href="https://philliant.com/posts/20260616-something-longer-is-coming/" rel="noopener noreferrer"&gt;something longer is coming&lt;/a&gt;, then named the book on &lt;a href="https://philliant.com/posts/20260630-youtube-channel-companion-to-the-writing/" rel="noopener noreferrer"&gt;philliant on youtube&lt;/a&gt;. chapter 1 shipped first because every other chapter depends on it. you cannot safely outsource judgment you have never built.&lt;/p&gt;

&lt;p&gt;chapter 2 was already sitting in my head in a shorter form. i wrote about the same failure mode in march in &lt;a href="https://philliant.com/posts/20260326-the-danger-of-trusting-the-ai-agent/" rel="noopener noreferrer"&gt;the danger of trusting the ai agent&lt;/a&gt;, when an agent churned through files, left a clean git tree, and still left me with low confidence about what had actually happened. the book chapter takes that incident and turns it into a full argument about ownership, diffs, and the gap between a polished summary and the work that actually shipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  argument
&lt;/h2&gt;

&lt;h3&gt;
  
  
  what chapter 2 covers
&lt;/h3&gt;

&lt;p&gt;the chapter opens on a simple claim. speed without ownership becomes expensive very quickly. when an agent operates somewhere you do not understand deeply, you can inherit changes you cannot explain, verify, or recover from with any confidence.&lt;/p&gt;

&lt;p&gt;from there it walks through four beats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;speed without ownership&lt;/strong&gt;, where automation bias and a clean version-control tree can hide confidence drift&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;changes you cannot explain&lt;/strong&gt;, including the net-zero diff incident that started as a post on this site&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reading the diff, not the narrative&lt;/strong&gt;, the habit that keeps the model's confidence from becoming your confidence by default&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;owning what ships&lt;/strong&gt;, the standard that does not soften just because a model wrote the first draft&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the chapter ends with a short practice list, the kind of checklist i actually use before i let high-autonomy work run in a system i am accountable for.&lt;/p&gt;

&lt;h3&gt;
  
  
  why it follows chapter 1
&lt;/h3&gt;

&lt;p&gt;chapter 1 and chapter 2 are meant to be read as a pair. earned judgment is what makes ai useful. unowned acceleration is what makes it dangerous. i could have jumped straight into editors, models, rules, and dbt, but that would have skipped the part that actually determines whether any of the tooling helps or hurts.&lt;/p&gt;

&lt;p&gt;if you already read chapter 1, chapter 2 is the warning label on the same bottle. if you have not read chapter 1 yet, start there. the book is written in order on purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  tension or counterpoint
&lt;/h3&gt;

&lt;p&gt;the obvious pushback is that this sounds like fear of automation dressed up as philosophy. i do not think that is fair. i use agents constantly. the point is not to use them less. the point is to stop treating a tidy chat summary as proof that you understand what changed.&lt;/p&gt;

&lt;p&gt;the other pushback is that chapter 2 retreads ground from the march post. partly true. the post was the first time i wrote about the failure. the chapter is where i finally gave it enough room for the habits, the downstream data risk, and the ownership standard that should sit behind every agent run.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;this is the second chapter in a sixteen-chapter book, released the same way as the rest of the project, &lt;a href="https://philliant.com/posts/20260406-little-by-little-a-little-becomes-a-lot/" rel="noopener noreferrer"&gt;little by little&lt;/a&gt;, one chapter at a time. chapter 3 is drafted and still in progress. when it is ready it will show up in the same &lt;a href="https://philliant.com/writings/" rel="noopener noreferrer"&gt;writings section&lt;/a&gt; without any extra ceremony.&lt;/p&gt;

&lt;p&gt;if you read chapter 2 and want to talk it through, the companion channel is &lt;a href="https://youtube.com/@philliant" rel="noopener noreferrer"&gt;philliant on youtube&lt;/a&gt;. the site stays the archive. the channel is where i can slow down and explain the argument out loud.&lt;/p&gt;

&lt;h2&gt;
  
  
  further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Automation_bias" rel="noopener noreferrer"&gt;automation bias&lt;/a&gt;, the tendency to trust automated output before you have verified it yourself&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related on this site
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260326-the-danger-of-trusting-the-ai-agent/" rel="noopener noreferrer"&gt;the danger of trusting the ai agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260614-ai-only-makes-sense-if-you-have-already-been-through-the-cognitive-struggle-yourself/" rel="noopener noreferrer"&gt;ai only makes sense if you have already been through the cognitive struggle yourself&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260531-the-guardrails-i-actually-use-with-ai-agents/" rel="noopener noreferrer"&gt;the guardrails i actually use with ai agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260630-youtube-channel-companion-to-the-writing/" rel="noopener noreferrer"&gt;philliant on youtube is the companion to the writing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/writings/ai-assisted-data-engineering/" rel="noopener noreferrer"&gt;ai-assisted data engineering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>dataengineering</category>
      <category>writing</category>
      <category>books</category>
    </item>
    <item>
      <title>model reviews coming soon to my youtube channel</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Mon, 06 Jul 2026 03:27:46 +0000</pubDate>
      <link>https://dev.to/shrouwoods/model-reviews-coming-soon-to-my-youtube-channel-4</link>
      <guid>https://dev.to/shrouwoods/model-reviews-coming-soon-to-my-youtube-channel-4</guid>
      <description>&lt;h2&gt;
  
  
  quick answer
&lt;/h2&gt;

&lt;p&gt;i am planning a recurring model review series on &lt;a href="https://youtube.com/@philliant" rel="noopener noreferrer"&gt;philliant on youtube&lt;/a&gt;. the working idea is to talk through "models of the week", notable releases, and the models i am actually using for production work, with practical opinions based on use instead of launch hype.&lt;/p&gt;

&lt;p&gt;the goal is simple. i want to give people a shortcut to understanding whether a model is likely to be useful to them, because i have already spent the time using it, grading it, judging it, and comparing it against the work i actually need to ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;people using ai models for real work, not only demos&lt;/li&gt;
&lt;li&gt;engineers, data people, writers, and builders trying to choose between too many model options&lt;/li&gt;
&lt;li&gt;anyone who wants practical model judgment from someone using these systems in production workflows&lt;/li&gt;
&lt;li&gt;future me, when the model names change again and i need a record of what actually worked&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  why this matters
&lt;/h2&gt;

&lt;p&gt;model announcements move faster than most people can evaluate them.&lt;/p&gt;

&lt;p&gt;every week there is a new release, a new benchmark chart, a new context window, a new reasoning mode, a new coding claim, or a new tool-use demo. those announcements are useful, but they are not the same thing as living with a model inside real work.&lt;/p&gt;

&lt;p&gt;my question is usually more practical. can this model help me ship something i understand and can stand behind? does it handle long context without losing the point? does it make good edits, or does it produce polished noise? does it improve my production workflow enough to earn a place in rotation?&lt;/p&gt;

&lt;p&gt;that is the kind of review i want to make.&lt;/p&gt;

&lt;h2&gt;
  
  
  what i mean by model reviews
&lt;/h2&gt;

&lt;p&gt;i am not trying to become a benchmark channel.&lt;/p&gt;

&lt;p&gt;benchmarks matter, but they are not the whole story. a model can look impressive in a release post and still be awkward in a real workflow. another model can look less exciting on paper and still become useful because it is fast, predictable, good with tools, or strong in one narrow lane.&lt;/p&gt;

&lt;p&gt;these reviews will be working reviews. i want to talk about how models feel after i have used them to write, reason, code, review, debug, plan, and move production work forward.&lt;/p&gt;

&lt;p&gt;that means the reviews will probably cover things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what the model is good at in my workflow&lt;/li&gt;
&lt;li&gt;where it breaks down&lt;/li&gt;
&lt;li&gt;what kind of tasks i would give it again&lt;/li&gt;
&lt;li&gt;what kind of tasks i would avoid giving it&lt;/li&gt;
&lt;li&gt;how it compares with the models already in my rotation&lt;/li&gt;
&lt;li&gt;whether the release changed my actual behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  the model of the week idea
&lt;/h2&gt;

&lt;p&gt;the phrase i keep coming back to is "model of the week".&lt;/p&gt;

&lt;p&gt;some weeks that might mean a brand-new release. other weeks it might mean a model i finally spent enough time with to have a useful opinion. sometimes it might be a direct comparison between two models that are competing for the same slot in my workflow.&lt;/p&gt;

&lt;p&gt;i am still deciding the cadence. weekly might be the cleanest format if releases keep moving this fast. monthly might be better if i want more time with each model before saying anything public. release-driven episodes might be the right answer when something meaningful ships and deserves a timely review.&lt;/p&gt;

&lt;p&gt;the format may become a mix of all three. a regular rhythm when there is enough to say, deeper monthly roundups when the week-to-week noise is too thin, and immediate reviews when a release is important enough to change the conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  empirical evidence over launch hype
&lt;/h2&gt;

&lt;p&gt;the part i care about most is empirical evidence from my own work.&lt;/p&gt;

&lt;p&gt;i do not mean lab-grade measurement. i mean repeated use against the kinds of tasks i actually do. production code. data engineering decisions. writing. repo maintenance. documentation. debugging. model comparison. prompt repair. agent supervision.&lt;/p&gt;

&lt;p&gt;that kind of evidence is not universal, but it is useful. if i tell you a model helped me with a hard refactor, i want to explain what made it useful. if i tell you a model fell apart, i want to explain where the failure showed up. if i tell you a model earned a place in my rotation, i want to explain what it replaced or what new capability it added.&lt;/p&gt;

&lt;p&gt;that is the shortcut i want to provide. not a promise that my ranking should become your ranking, but a practical signal from someone already doing the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  where this fits with the site
&lt;/h2&gt;

&lt;p&gt;i already wrote a snapshot of &lt;a href="https://philliant.com/posts/20260320-deep-dive-ai-models-i-use/" rel="noopener noreferrer"&gt;the ai models i actually use in cursor&lt;/a&gt;. that post is a written roster, and it is useful as a point-in-time reference.&lt;/p&gt;

&lt;p&gt;the youtube version should be more alive than that. models change too quickly for one static page to carry the whole conversation. the channel gives me a place to talk through what changed, what i tried, what surprised me, and what i would actually recommend based on current use.&lt;/p&gt;

&lt;p&gt;this also fits the broader reason i launched &lt;a href="https://philliant.com/posts/20260630-youtube-channel-companion-to-the-writing/" rel="noopener noreferrer"&gt;philliant on youtube&lt;/a&gt;. the site stays the archive and source of truth. the channel becomes the place where i can talk through the work in a more conversational way.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;so that is the plan. model reviews are coming to the philliant youtube channel.&lt;/p&gt;

&lt;p&gt;i will keep the focus practical. less hype, more use. less "this model is best", more "this model helped me with this kind of work, failed at this other kind of work, and here is what i would use it for now".&lt;/p&gt;

&lt;p&gt;if the format works, it should help people spend less time guessing and more time choosing the right model for the work in front of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  faq
&lt;/h2&gt;

&lt;h3&gt;
  
  
  will this replace written model posts?
&lt;/h3&gt;

&lt;p&gt;no. the written posts will still be useful for reference, links, and slower thinking. the videos should add voice, timing, and current impressions that are harder to keep fresh in a static post.&lt;/p&gt;

&lt;h3&gt;
  
  
  will these be rankings?
&lt;/h3&gt;

&lt;p&gt;sometimes, but rankings are not the main point. i care more about task fit than a single leaderboard. the better question is not "which model is best", but "which model would i trust for this kind of work right now".&lt;/p&gt;

&lt;h3&gt;
  
  
  will you only cover coding models?
&lt;/h3&gt;

&lt;p&gt;no. coding and agentic work will be a major part of the series because that is where i spend a lot of time, but i also expect to cover writing, reasoning, long context, multimodal input, speed, cost, and general workflow fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtube.com/@philliant" rel="noopener noreferrer"&gt;philliant on youtube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260320-deep-dive-ai-models-i-use/" rel="noopener noreferrer"&gt;ai models i actually use in cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260630-youtube-channel-companion-to-the-writing/" rel="noopener noreferrer"&gt;philliant on youtube is the companion to the writing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260701-anything-i-can-imagine/" rel="noopener noreferrer"&gt;anything i can imagine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260318-from-prototype-to-production-ai/" rel="noopener noreferrer"&gt;from prototype to production: my early adopter view of ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/ai/" rel="noopener noreferrer"&gt;ai series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>models</category>
      <category>youtube</category>
      <category>workflow</category>
    </item>
    <item>
      <title>anything i can imagine</title>
      <dc:creator>Philip Hern</dc:creator>
      <pubDate>Wed, 01 Jul 2026 16:16:53 +0000</pubDate>
      <link>https://dev.to/shrouwoods/anything-i-can-imagine-9mp</link>
      <guid>https://dev.to/shrouwoods/anything-i-can-imagine-9mp</guid>
      <description>&lt;h2&gt;
  
  
  thesis
&lt;/h2&gt;

&lt;p&gt;ai is great at helping me make anything i can imagine. if i can picture the answer, the process, or the steps ahead of time, the model can usually help me move faster. but that condition matters. ai is not replacing imagination. it is amplifying the parts of my imagination that i can explain clearly enough for a machine to work with.&lt;/p&gt;

&lt;h2&gt;
  
  
  context
&lt;/h2&gt;

&lt;p&gt;the more i use ai, the more i notice that the best results do not come from asking the model to be creative in a vacuum. the best results come when i already have a clear picture in my head. i might not know every sentence, every line of code, or every implementation detail yet, but i know the direction. i know what the answer should feel like. i know the steps i would take if i had enough time and energy to do them manually.&lt;/p&gt;

&lt;p&gt;that is when ai feels almost unfair. it takes the thing i can already imagine and turns it into a draft, a plan, a diff, a diagram, a script, or a set of options. this is related to what i wrote in &lt;a href="https://philliant.com/posts/20260614-ai-only-makes-sense-if-you-have-already-been-through-the-cognitive-struggle-yourself/" rel="noopener noreferrer"&gt;ai only makes sense if you have already been through the cognitive struggle yourself&lt;/a&gt;. the struggle builds the mental model. once that mental model exists, ai gives it leverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  argument
&lt;/h2&gt;

&lt;h3&gt;
  
  
  imagination is the spec
&lt;/h3&gt;

&lt;p&gt;when i say ai can do anything i can imagine, i do not mean it can read my mind. i mean my imagination becomes the specification.&lt;/p&gt;

&lt;p&gt;if i can describe the end state, the model has something to aim at. if i can describe the process, it has a path to follow. if i can describe the constraints, it has boundaries. if i can describe what would make the answer wrong, it has a way to avoid obvious failure.&lt;/p&gt;

&lt;p&gt;this is why vague prompts produce vague work. the model can fill space forever, but empty space is not the same as direction. the value appears when i give it intent. i am still the one deciding what matters, what order the work should happen in, which trade-offs are acceptable, and when the output is good enough to keep.&lt;/p&gt;

&lt;h3&gt;
  
  
  process matters as much as the answer
&lt;/h3&gt;

&lt;p&gt;the most useful ai work is often not the final answer. it is the process that gets me there.&lt;/p&gt;

&lt;p&gt;if i can imagine the steps, the model can help me execute those steps without making me carry every detail in working memory. it can draft the first version, split a large task into smaller moves, compare options, run through edge cases, or turn a rough plan into something concrete. it is especially powerful when the work is procedural, repetitive, or easy to verify once the plan is clear.&lt;/p&gt;

&lt;p&gt;but if i cannot imagine the process at all, the situation changes. then i am not leading the work. i am asking the model to invent both the path and the destination, and that is where the risk starts. i may get something polished, but i do not have enough of a mental model to know whether it is right. that is the same trap behind &lt;a href="https://philliant.com/posts/20260326-the-danger-of-trusting-the-ai-agent/" rel="noopener noreferrer"&gt;the danger of trusting the ai agent&lt;/a&gt;. confidence in the output is not the same as ownership of the outcome.&lt;/p&gt;

&lt;h3&gt;
  
  
  creativity is still the source material
&lt;/h3&gt;

&lt;p&gt;this is the part that gets lost in the louder conversation about replacement. ai is good at doing what i can imagine, which means human creativity is still necessary.&lt;/p&gt;

&lt;p&gt;models are built from patterns learned from human-created material, human feedback, human preferences, and human goals. even when synthetic data enters the loop, the useful signal is still downstream of human ideas and human judgment. the model can remix, extend, compress, transform, and accelerate. it can surprise me with combinations i would not have reached as quickly on my own. but it still needs a starting signal.&lt;/p&gt;

&lt;p&gt;that signal is human. the taste is human. the reason for doing the work is human. the decision that a result is beautiful, useful, durable, funny, clear, or worth publishing is human.&lt;/p&gt;

&lt;p&gt;ai can help me produce more of what i can imagine, but it does not remove the need to imagine. if anything, it raises the value of imagination because the person with the clearest picture can get the most leverage from the tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  ai-assisted still means i lead
&lt;/h3&gt;

&lt;p&gt;we are still living in an ai-assisted world. that phrase matters because assistance has direction. the assistant is helping the person who owns the goal.&lt;/p&gt;

&lt;p&gt;i do not want to become the assistant to the ai. i do not want my role to shrink into approving whatever the model happens to generate next. the useful arrangement is the opposite. i set the intention. i define the boundaries. i choose the sequence. i review the work. i decide what ships. the ai helps me move through the work faster, but the work is still mine.&lt;/p&gt;

&lt;p&gt;this is also why i need &lt;a href="https://philliant.com/posts/20260606-room-to-breathe/" rel="noopener noreferrer"&gt;room to breathe&lt;/a&gt;. when the model can produce endless next steps, i have to remember that output is not the same as progress. progress is work i understand, accept, and can stand behind. ai can increase the supply of possible moves, but it cannot replace the leadership required to choose the right move.&lt;/p&gt;

&lt;h3&gt;
  
  
  tension or counterpoint
&lt;/h3&gt;

&lt;p&gt;the obvious counterpoint is that models can generate ideas i did not explicitly imagine ahead of time. that is true, and it is one of the reasons these tools are useful. sometimes the model gives me a phrase, structure, implementation path, or connection that i would not have produced by myself in that moment.&lt;/p&gt;

&lt;p&gt;but even then, i am still judging the result against something inside me. does it fit the goal? does it sound like me? does it solve the right problem? does it move the work forward? the model can offer possibilities, but i decide which possibilities have meaning.&lt;/p&gt;

&lt;p&gt;that distinction keeps me grounded. ai can expand the field of options, but it does not eliminate the need for a human point of view. without that point of view, the model is just generating plausible outputs.&lt;/p&gt;

&lt;h2&gt;
  
  
  closing
&lt;/h2&gt;

&lt;p&gt;the promise of ai is not that i no longer need to think, imagine, or create. the promise is that once i can see a thing clearly enough, i can bring it into the world faster than before.&lt;/p&gt;

&lt;p&gt;that is a powerful shift, but it does not make the human less important. it makes the human more exposed. my imagination, taste, judgment, discipline, and leadership become the real bottlenecks. ai can assist all of them, but it cannot own them for me.&lt;/p&gt;

&lt;p&gt;so the question i keep coming back to is simple. what can i imagine clearly enough to lead? because that is where ai becomes useful. not when it replaces me, but when it helps me build the thing i already know how to see.&lt;/p&gt;

&lt;h2&gt;
  
  
  references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Artificial_intelligence" rel="noopener noreferrer"&gt;artificial intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Creativity" rel="noopener noreferrer"&gt;creativity&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260614-ai-only-makes-sense-if-you-have-already-been-through-the-cognitive-struggle-yourself/" rel="noopener noreferrer"&gt;ai only makes sense if you have already been through the cognitive struggle yourself&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260326-the-danger-of-trusting-the-ai-agent/" rel="noopener noreferrer"&gt;the danger of trusting the ai agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260606-room-to-breathe/" rel="noopener noreferrer"&gt;room to breathe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/posts/20260531-the-guardrails-i-actually-use-with-ai-agents/" rel="noopener noreferrer"&gt;the guardrails i actually use with ai agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philliant.com/series/ai/" rel="noopener noreferrer"&gt;ai series&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>creativity</category>
      <category>workflow</category>
      <category>leadership</category>
    </item>
  </channel>
</rss>
