<?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: kavyarani7</title>
    <description>The latest articles on DEV Community by kavyarani7 (@kavyarani7).</description>
    <link>https://dev.to/kavyarani7</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%2F15772%2Fd9fd5c4c-73c2-4621-82c0-2b8ce87f97c8.png</url>
      <title>DEV Community: kavyarani7</title>
      <link>https://dev.to/kavyarani7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kavyarani7"/>
    <language>en</language>
    <item>
      <title>Picking Models and Tools</title>
      <dc:creator>kavyarani7</dc:creator>
      <pubDate>Tue, 16 Jun 2026 04:35:50 +0000</pubDate>
      <link>https://dev.to/kavyarani7/picking-models-and-tools-gmn</link>
      <guid>https://dev.to/kavyarani7/picking-models-and-tools-gmn</guid>
      <description>&lt;p&gt;&lt;strong&gt;SectorFlow Engineering Series&lt;/strong&gt;   ·   Part 3 of 3   ·   Read Part 1 first: &lt;a href="https://dev.to/kavyarani7/token-efficiency-in-claude-code-2kpi"&gt;Token Efficiency in Claude Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The MCPs we tried, refused, and why — and how we drew the Haiku/Sonnet line.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;June 2026  ·  SectorFlow Engineering&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In this series&lt;/strong&gt;    Part 1: &lt;a href="https://dev.to/kavyarani7/token-efficiency-in-claude-code-2kpi"&gt;Token Efficiency in Claude Code&lt;/a&gt; (start here).    &lt;a href="https://dev.to/kavyarani7/the-skills-file-pattern-2oam"&gt;Part 2: The Skills File Pattern&lt;/a&gt; — fixing CLAUDE.md bloat with imports.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Two decisions, same question
&lt;/h2&gt;

&lt;p&gt;Picking a model and picking your tools feel like two different jobs. One is about which APIs you wire up, the other is about which Anthropic model you call. Underneath, though, they're the same question: what's the cheapest way to get the quality of output you need?&lt;/p&gt;

&lt;p&gt;They even fail the same way. You reach for more capability than the job needs and pay for it with tokens that could have gone to the task. This covers both, and the reasoning we used on each.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCPs
&lt;/h2&gt;

&lt;p&gt;MCP servers give Claude Code tools that talk to outside systems. They're useful and they aren't free. Every call costs tokens — the call itself, the schema around it, the parsing of whatever comes back. If the MCP wraps an external API there's a response payload too, and those get big.&lt;/p&gt;

&lt;p&gt;We judged every MCP against one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does this give Claude something it genuinely can't do with Bash, Read, or Edit? Or is it just a wrapper around something an engineer could do faster in a terminal?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most of the ones we dropped failed that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linear — tried it, dropped it for coding sessions
&lt;/h3&gt;

&lt;p&gt;We hooked up the Linear MCP early because it seemed like a no-brainer: Claude reads the ticket, pulls the acceptance criteria, gets to work. The math didn't hold up.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Token cost&lt;/th&gt;
&lt;th&gt;Human alternative&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_issues&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~3,500 tokens&lt;/td&gt;
&lt;td&gt;Engineer opens Linear: 5 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;get_issue&lt;/code&gt; (single)&lt;/td&gt;
&lt;td&gt;~1,200 tokens&lt;/td&gt;
&lt;td&gt;Engineer copies acceptance criteria: 30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mark Done + post comment&lt;/td&gt;
&lt;td&gt;~4,300 tokens&lt;/td&gt;
&lt;td&gt;Engineer clicks Done: 10 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full ticket workflow via MCP&lt;/td&gt;
&lt;td&gt;~9,000 tokens&lt;/td&gt;
&lt;td&gt;Total human time: ~45 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The engineer spending 45 seconds costs zero tokens. Claude spending 9,000 on the same clicks is 9,000 fewer for the implementation. Over 60-plus tickets that's 7 or 8 full context windows you've handed back to code.&lt;/p&gt;

&lt;p&gt;Linear is still installed — we use it for project-level stuff outside coding sessions. But during a session the engineer reads the ticket and pastes the part Claude needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The tool that makes the paste painless
&lt;/h3&gt;

&lt;p&gt;"Just paste the acceptance criteria" sounds clean until you watch someone do it. They copy the whole ticket — priority, reporter, four comments and all — because pulling out only the useful parts by hand is fiddly and easy to get wrong. So the discipline slips. The fix wasn't a stricter rule, it was a small tool.&lt;/p&gt;

&lt;p&gt;It's one static HTML file, no backend. You copy the Linear ticket as Markdown, paste it in, and it does two things. It throws out the fields Claude never needs — title, priority, type, status, reporter, assignee, dates, comments — and keeps the ones it does: acceptance criteria, files affected, design notes, out of scope. Problem/goal and context are there as toggles too, off by default, for the tickets where they earn their place.&lt;/p&gt;

&lt;p&gt;Then it wraps what's left in the task format from &lt;code&gt;workflow.md&lt;/code&gt; and adds the session rules on the end. Out comes something like this:&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="gu"&gt;## Task: SF-62 — ETF flow pulse in morning briefing&lt;/span&gt;
Branch: kavyarani7/SF-62-etf-flow-pulse (already created — do not run git checkout)

&lt;span class="gu"&gt;### Files to create or modify&lt;/span&gt;
[ files section from the ticket ]

&lt;span class="gu"&gt;### What to build (acceptance criteria)&lt;/span&gt;
[ acceptance criteria ]

&lt;span class="gu"&gt;### Do NOT build&lt;/span&gt;
[ out-of-scope items ]

&lt;span class="gu"&gt;### Design constraints&lt;/span&gt;
[ design notes ]

&lt;span class="gu"&gt;### Rules for this session&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Read ONLY the files listed above — nothing else
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT run git commands — I handle all git operations
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT touch Linear — I mark Done and post comments
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT start the dev server — I do browser testing
&lt;span class="p"&gt;-&lt;/span&gt; When done, report in the short DONE format from CLAUDE.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two assumptions are baked in, and they match how we run every ticket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The branch already exists. You create it before opening Claude Code, so the prompt just tells Claude the branch is there and not to run &lt;code&gt;git checkout&lt;/code&gt;. One ticket, one branch, one fresh session — the work stays isolated.&lt;/li&gt;
&lt;li&gt;The prompt carries enough of the ticket that Claude has no reason to go reading files. That's what makes the "read only these files" rule stick: if the context it needs is already in front of it, it won't wander into the codebase hunting for background.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The generated prompt runs a few hundred tokens. Against the ~9,000 the full MCP workflow costs in the table above, that's the difference between spending your context on the ticket and spending it on the actual work.&lt;/p&gt;

&lt;p&gt;None of this is clever. It's just that a step people have to do by hand gets skipped on a busy day, and a step a tool does for them doesn't. That's the whole reason it exists.&lt;/p&gt;

&lt;p&gt;The whole tool is one self-contained HTML file — open it in a browser and it runs, no install. There's a live version you can use here: &lt;a href="https://gistpreview.github.io/?a5d8c209016f9afc96984361832ad99f" rel="noopener noreferrer"&gt;Linear → Claude Code converter&lt;/a&gt;. The full source is embedded below:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/editor/kavyarani7/embed/019ece3f-b3e3-795f-b025-f18d59fbde66?height=600&amp;amp;default-tab=html&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub — not now, maybe later
&lt;/h3&gt;

&lt;p&gt;The GitHub MCP creates PRs, posts comments, manages labels. We didn't connect it for coding sessions, same logic: checkout, add, commit, push are all fast in a terminal, and the MCP scaffolding doesn't make the code any better.&lt;/p&gt;

&lt;p&gt;The difference from Linear is that GitHub is only deferred, not rejected. The day we build an automation pipeline that needs PRs created programmatically at scale, the overhead pays for itself. Creating PRs by hand during ticket work doesn't clear that bar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supabase — blocked outright
&lt;/h3&gt;

&lt;p&gt;Supabase is in the plan (ADR-001) but not built yet. The rule is already written for when it lands: Claude never pulls DB schema or checks Supabase state over MCP during a coding session.&lt;/p&gt;

&lt;p&gt;This one is about freshness, not cost. The database changes between sessions. If Claude reads the schema at session start, then the engineer alters a table, then the session keeps going — Claude is now working off stale info it thinks is current. Better pattern: the engineer pastes the table definition when a task genuinely needs it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The ones we kept
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MCP&lt;/th&gt;
&lt;th&gt;Why we kept it&lt;/th&gt;
&lt;th&gt;What it replaces&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Preview&lt;/td&gt;
&lt;td&gt;Renders the real browser output — no text tool does that&lt;/td&gt;
&lt;td&gt;Blind trust that the UI works&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Computer Use&lt;/td&gt;
&lt;td&gt;Drives native desktop apps — nothing else can&lt;/td&gt;
&lt;td&gt;Manual cross-app workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduled Tasks&lt;/td&gt;
&lt;td&gt;Cron jobs can't be set up with code edits alone&lt;/td&gt;
&lt;td&gt;Shell-based scheduling hacks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern is clear enough in hindsight. Keep the MCPs whose value you can't get any other way. Drop the ones wrapping something an engineer does faster with a terminal or a browser tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Haiku / Sonnet line
&lt;/h2&gt;

&lt;p&gt;SectorFlow runs on two models. Where we split them is written into &lt;code&gt;core.md&lt;/code&gt; as a hard constraint — not a default, not a starting point to tune later.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Constant&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Used for&lt;/th&gt;
&lt;th&gt;max_tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DATA_MODEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-haiku-4-5-20251001&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All 11 data endpoints — sectors, subsectors, stocks, financial tabs 1–6&lt;/td&gt;
&lt;td&gt;600–1,200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AI_ANALYSIS_MODEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-sonnet-4-6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stock analysis memo — tab 7 only&lt;/td&gt;
&lt;td&gt;3,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Why Haiku for the data
&lt;/h3&gt;

&lt;p&gt;Every data endpoint returns JSON against a fixed schema. The hard part isn't reasoning, it's following instructions exactly: these fields, this format, these units. That's it.&lt;/p&gt;

&lt;p&gt;Haiku is fast, cheap, and completely fine at filling a schema with correct values. And fast matters here — a dashboard drill-down chains three calls, sectors → subsectors → stocks. Haiku does all three in about the time Sonnet takes for one.&lt;/p&gt;

&lt;p&gt;With the 24-hour server cache and the 24-hour localStorage cache, each Haiku call gets spread across everyone who looks at that sector inside the window. Per-user cost rounds to nothing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Sonnet for the analysis tab
&lt;/h3&gt;

&lt;p&gt;The analysis memo is a different animal from a data endpoint. It has to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pull several signals together into a verdict, with a confidence level and a reason behind it;&lt;/li&gt;
&lt;li&gt;come up with bull / base / bear cases — target prices, upside, an actual thesis;&lt;/li&gt;
&lt;li&gt;catch red flags that would never show up in a structured-data prompt;&lt;/li&gt;
&lt;li&gt;and write like research someone would actually read, not a JSON dump with some sentences wrapped around it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Haiku can fill in a memo-shaped template. Sonnet can write the memo. The gap is visible to the user, and it's the entire reason the analysis tab exists as its own feature. Dropping it to Haiku wouldn't even save much — that tab has a 4-hour cache so it barely gets called. It'd just be worse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Never downgrade
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;core.md&lt;/code&gt; says it flat out: never sub Haiku in for &lt;code&gt;AI_ANALYSIS_MODEL&lt;/code&gt;. Surface the error instead.&lt;/p&gt;

&lt;p&gt;This rule is there because the temptation is real, especially mid-debug. A Sonnet call fails, and the quickest thing is to drop in Haiku and see if the request goes through. But then the analysis tab is quietly serving worse output and nobody can tell anything changed. An error you can see forces you to actually fix it.&lt;/p&gt;

&lt;p&gt;Same thing in reverse — we don't bump the Haiku data endpoints up to Sonnet for "better quality." Those endpoints have schemas. Better quality there means fixing the schema or the prompt, not throwing a pricier model at what's basically an instruction-following task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model strings are facts, treat them like facts
&lt;/h3&gt;

&lt;p&gt;The model IDs live in &lt;code&gt;core.md&lt;/code&gt; in a "confirmed model strings" table, with a note: never make up a model string, and if a call 404s, check the table before anything else.&lt;/p&gt;

&lt;p&gt;This stops one specific failure: Claude generating a model ID that looks right but isn't — say &lt;code&gt;claude-haiku-4-5&lt;/code&gt; with the date suffix dropped — just because it seemed plausible in context. Every model string in the code has a matching row in that table, confirmed working. Nothing goes into the code until it's in the table first.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ties both together
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;MCP choice and model choice come down to the same rule: don't pay for capability you don't need. Connect a tool only when there's no other way to get what it does. Reach for the bigger model only when the work is real synthesis, not schema-filling. The rest is overhead.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What we're still figuring out
&lt;/h2&gt;

&lt;p&gt;This series is the stuff we've actually settled. There's more we're in the middle of, and we'll write it up once we trust the answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompt structure and where the line really sits between the "data" you hand the model and the "instructions" you give it;&lt;/li&gt;
&lt;li&gt;pre-warming the cache on server restart versus leaning on web search for freshness — we think deterministic warming wins, and we built it into the SectorFlow automator;&lt;/li&gt;
&lt;li&gt;when Claude Code is the wrong tool and a plain API call with a structured prompt is the right one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll post each one when we've got a conclusion we believe.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>devtools</category>
      <category>llm</category>
    </item>
    <item>
      <title>The Skills File Pattern</title>
      <dc:creator>kavyarani7</dc:creator>
      <pubDate>Tue, 16 Jun 2026 04:33:48 +0000</pubDate>
      <link>https://dev.to/kavyarani7/the-skills-file-pattern-2oam</link>
      <guid>https://dev.to/kavyarani7/the-skills-file-pattern-2oam</guid>
      <description>&lt;p&gt;&lt;strong&gt;SectorFlow Engineering Series&lt;/strong&gt;   ·   Part 2 of 3   ·   Read Part 1 first: &lt;a href="https://dev.to/kavyarani7/token-efficiency-in-claude-code-2kpi"&gt;Token Efficiency in Claude Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How we stopped appending to CLAUDE.md and started importing only what we need.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;June 2026  ·  SectorFlow Engineering&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In this series&lt;/strong&gt;    Part 1: &lt;a href="https://dev.to/kavyarani7/token-efficiency-in-claude-code-2kpi"&gt;Token Efficiency in Claude Code&lt;/a&gt; (start here).    &lt;a href="https://dev.to/kavyarani7/picking-models-and-tools-gmn"&gt;Part 3: Picking Models and Tools&lt;/a&gt; — the MCPs we tried, refused, and why.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The append loop
&lt;/h2&gt;

&lt;p&gt;If you use Claude Code for a while you'll probably land where we did: a &lt;code&gt;CLAUDE.md&lt;/code&gt; that got too big and too self-contradictory to trust.&lt;/p&gt;

&lt;p&gt;It starts fine. You write down the basics — what the app does, where the server lives, what the API looks like. Then something breaks. Claude picks the wrong model string, or makes a chart without the right color, or ignores a cache rule you mentioned in passing three weeks ago. So you write the rule down and append it. Reasonable.&lt;/p&gt;

&lt;p&gt;And it works for a while. Then the file's big, the week-two rules are sitting on top of the week-six rules, and when two of them disagree — they will, because requirements move and old notes go stale — the model either reconciles them into mush or just picks one. You spend an hour debugging output before you realize the rule you thought was active got overridden by something you wrote months ago and forgot about.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The bigger issue: the whole file loads every session, no matter what you're doing. A color fix on the frontend doesn't need the deployment runbook. An API route change doesn't need the chart color rules. Every line that isn't relevant is costing tokens and adding noise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We thought about how to fix this without just deleting the stuff we'd need again later, and ended up with what we call the skills file pattern. Split the context into separate files by purpose, import only what the task needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The structure
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; stops being the rulebook and becomes a table of contents. The actual rules move into separate files under &lt;code&gt;.claude/&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;What it owns&lt;/th&gt;
&lt;th&gt;When it loads&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;core.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Absolute constraints: model strings, API key rules, cache TTLs, data contracts&lt;/td&gt;
&lt;td&gt;Every session — the foundational constraints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;design.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Color tokens, chart types, component patterns, loading-state conventions&lt;/td&gt;
&lt;td&gt;UI and frontend tasks only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;infrastructure.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hosting config, environment variables, deployment rules, automator wiring&lt;/td&gt;
&lt;td&gt;Infrastructure and CI tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;workflow.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ticket format, commit rules, token rules, division of labor&lt;/td&gt;
&lt;td&gt;Every coding session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;architecture.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ADRs, scaling thresholds, rejected technical decisions&lt;/td&gt;
&lt;td&gt;Architecture reviews and new integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The import syntax in &lt;code&gt;CLAUDE.md&lt;/code&gt; is nothing special:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@sector-dashboard/.claude/core.md
@sector-dashboard/.claude/design.md
@sector-dashboard/.claude/workflow.md
(infrastructure.md and architecture.md load only when the task references them)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So a UI task loads core + design + workflow. An infra task loads core + infrastructure + workflow. &lt;code&gt;architecture.md&lt;/code&gt; only shows up if someone actually asks about a scaling decision or an ADR. The context stays small and stays on topic.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  core.md — the constitution
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;core.md&lt;/code&gt; is the one file that loads every single session, so everything in it has to be true and currently enforced. We treat it like a constitution. Stable, authoritative, never wishful.&lt;/p&gt;

&lt;p&gt;Two kinds of things go in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facts we've verified — model IDs we've confirmed work, endpoint shapes, cache key names, exact token limits per endpoint.&lt;/li&gt;
&lt;li&gt;Hard constraints — rules you don't break without a deliberate, written-down decision (where the API key goes, no swapping models, TTL values).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't put aspirations in core.md. "We should try to…" or "ideally the model would…" — that's workflow.md material. core.md is only for things that are true right now. The moment you put a hope in there, reality eventually contradicts it and now you've got a lie sitting in your most-trusted file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  design.md — the visual contract
&lt;/h3&gt;

&lt;p&gt;Every hex value, every chart-type assignment, every loading-state pattern goes in &lt;code&gt;design.md&lt;/code&gt;. Three reasons it pays off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A new engineer, or a fresh Claude session, doesn't have to reverse-engineer the visual conventions out of the component code.&lt;/li&gt;
&lt;li&gt;When we changed the color logic on the 52-week range bar, we edited one table in &lt;code&gt;design.md&lt;/code&gt;. No component files had to change just to record the rule.&lt;/li&gt;
&lt;li&gt;We can reject a PR where Claude hardcoded a hex instead of using the documented token, because the rule is written down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;design.md&lt;/code&gt; is also where we list what not to touch. &lt;code&gt;TradingViewChart.jsx&lt;/code&gt; is wrapper-only. &lt;code&gt;signals.js&lt;/code&gt; has its own color system and must not get the new &lt;code&gt;--sf-&lt;/code&gt; variables. Those "don't" rules matter as much as the conventions do.&lt;/p&gt;

&lt;h3&gt;
  
  
  workflow.md — who does what
&lt;/h3&gt;

&lt;p&gt;This is the file that matters most day to day. It spells out what Claude does and what the engineer does, in enough detail that there's no room to wonder. Part 1 has the full reasoning, but the short version is: if the engineer can do it in under two minutes in a terminal, it shouldn't go to Claude through an MCP.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;workflow.md&lt;/code&gt; also holds the task format we make engineers use when they hand work to Claude:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Required field&lt;/th&gt;
&lt;th&gt;Why it exists&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Branch: {name}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stops Claude asking or guessing — one less tool call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Files to CREATE: [list]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scopes creation, stops new files getting added speculatively&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Files to MODIFY: [list + one-liner]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Keeps Claude from reading unrelated files for context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;What to build: [criteria]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The single source of truth for when it's done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Do NOT read: [not listed]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;An explicit boundary — absence isn't permission&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If any of those fields is missing, Claude asks before it touches a file. That kills the usual failure mode where it reads three or four files "to understand the codebase" before writing a single line.&lt;/p&gt;

&lt;h3&gt;
  
  
  architecture.md — decisions and why
&lt;/h3&gt;

&lt;p&gt;Architecture decisions go in as ADRs — the decision, what led to it, what it costs us. We record the rejected ones too, and those turn out to be the more useful part.&lt;/p&gt;

&lt;p&gt;When some future session asks "why not GraphQL?" or "should we add WebSockets for live data?", the answer is already sitting there: considered, rejected, here's why. Claude doesn't reopen it and neither do we.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule that keeps it from rotting
&lt;/h2&gt;

&lt;p&gt;One rule keeps the split files from turning into the same contradictory mess as the old monolith:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One file owns one domain. If a rule could live in two files, it goes in the more constrained one — usually core.md. And if you can't tell which file a rule belongs in, it's probably too vague to be a rule.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In practice: color tokens go in &lt;code&gt;design.md&lt;/code&gt;, not &lt;code&gt;core.md&lt;/code&gt;. Cache TTLs go in &lt;code&gt;core.md&lt;/code&gt;, not &lt;code&gt;architecture.md&lt;/code&gt;. Division of labor is &lt;code&gt;workflow.md&lt;/code&gt;, not &lt;code&gt;core.md&lt;/code&gt;. Once the domains are clear the contradictions jump out — if the same thing shows up in two files, one of them is wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed after
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Startup token cost down about 60% on a typical task.&lt;/li&gt;
&lt;li&gt;Contradictions are findable now — the same topic in two files gets flagged.&lt;/li&gt;
&lt;li&gt;New rules have an obvious home, and figuring out the home forces you to be clear about what kind of rule it even is.&lt;/li&gt;
&lt;li&gt;You can review the files on their own — a frontend change goes up against &lt;code&gt;design.md&lt;/code&gt; and nothing else.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not a complicated setup. Six files and a manifest. The work is in holding the one-domain line: the moment a file starts feeling like it's about two things, split it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Continue reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/kavyarani7/picking-models-and-tools-gmn"&gt;Part 3: Picking Models and Tools&lt;/a&gt; — the MCPs we tried, refused, and why.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>devtools</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Token Efficiency in Claude Code</title>
      <dc:creator>kavyarani7</dc:creator>
      <pubDate>Tue, 16 Jun 2026 04:31:45 +0000</pubDate>
      <link>https://dev.to/kavyarani7/token-efficiency-in-claude-code-2kpi</link>
      <guid>https://dev.to/kavyarani7/token-efficiency-in-claude-code-2kpi</guid>
      <description>&lt;p&gt;&lt;strong&gt;SectorFlow Engineering Series&lt;/strong&gt;   ·   Part 1 of 3   ·   Parent article&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Notes on where our context budget was actually going, and what we did about it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;June 2026  ·  SectorFlow Engineering&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In this series&lt;/strong&gt;    &lt;a href="https://dev.to/kavyarani7/the-skills-file-pattern-2oam"&gt;Part 2: The Skills File Pattern&lt;/a&gt; — fixing CLAUDE.md bloat with imports.    &lt;a href="https://dev.to/kavyarani7/picking-models-and-tools-gmn"&gt;Part 3: Picking Models and Tools&lt;/a&gt; — the MCPs we tried, refused, and why.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The problem nobody warns you about
&lt;/h2&gt;

&lt;p&gt;Claude Code can do a lot. The catch is that all of it runs on context, and you don't get much of that.&lt;/p&gt;

&lt;p&gt;When we started SectorFlow we did the obvious thing. Kept a &lt;code&gt;CLAUDE.md&lt;/code&gt; at the repo root, and every time something went wrong — wrong model string, a cache TTL that didn't match, a chart that came out looking off — we'd write a rule and stick it on the end. The file kept growing. We didn't really clock it as a problem until it was one.&lt;/p&gt;

&lt;p&gt;By about week six it was 400 lines. Every session loaded the whole thing. Frontend rules sitting next to deployment runbooks sitting next to database decisions, none of it sorted. And because we'd added the rules one at a time over weeks, some of them flatly disagreed with each other. Claude would follow the new one, or the old one, or try to split the difference. We got something wrong either way.&lt;/p&gt;

&lt;p&gt;I want to be clear this isn't a Claude Code problem. It's on us, and it's fixable. But fixing it meant we had to stop treating &lt;code&gt;CLAUDE.md&lt;/code&gt; like a junk drawer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The thing that actually hurts isn't the per-token price. It's that every token spent loading context is a token you don't get back for the work. Burn 30,000 on setup and you've got far less room to write code than if you'd burned 5,000. You hit the ceiling partway through a file and whatever you were in the middle of is just gone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Context is a budget
&lt;/h2&gt;

&lt;p&gt;Here's the shift, and it's simple once you see it: anything Claude reads at the start of a session is something it can't use later for code. Most projects pile everything into &lt;code&gt;CLAUDE.md&lt;/code&gt; on the theory that the model might need it someday. We flipped the question. What does the model need for this task? Load that. Skip the rest.&lt;/p&gt;

&lt;p&gt;Two rules came out of it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Precision over completeness. A small context that's right does more for you than a big one trying to cover all the bases.&lt;/li&gt;
&lt;li&gt;Load on demand. Structure things so only the relevant part shows up for a given task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those turned into three actual practices, and each one gets its own article in this series. This one is just the overview — what we measured and why it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we actually changed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Session startup cost
&lt;/h3&gt;

&lt;p&gt;Every session loads &lt;code&gt;CLAUDE.md&lt;/code&gt; plus whatever it imports. Before, that was the one 400-line file, every time, regardless of the task. After we split it into separate skill files, a UI task pulls in &lt;code&gt;core.md&lt;/code&gt; (the constraints) and &lt;code&gt;design.md&lt;/code&gt; (the visual stuff) and nothing else. An infra task gets &lt;code&gt;core.md&lt;/code&gt; and &lt;code&gt;infrastructure.md&lt;/code&gt;. Startup cost dropped about 60%.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Reading tickets
&lt;/h3&gt;

&lt;p&gt;We had the Linear MCP hooked up so Claude could read tickets itself. Nice in theory. But one &lt;code&gt;list_issues&lt;/code&gt; call runs about 3,500 tokens, and the whole read-it / mark-done / comment loop is around 9,000. So now the engineer just pastes the acceptance criteria. That's maybe 400 tokens. The 8,600 difference doesn't sound like much until you multiply it across 60-plus tickets — that's something like 7 or 8 full context windows handed back to the actual work.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Reading files it was never asked to read
&lt;/h3&gt;

&lt;p&gt;Left alone, Claude reads files to get its bearings, sometimes three or four of them before it writes a line. So we made a rule: only read files the task names. Need to find a function? &lt;code&gt;grep&lt;/code&gt; for it, then view just those lines. Don't open a file to soak up "context." If something's actually missing, ask. Saves 2,000–4,000 tokens on a complex task.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Spinning up the dev server to check things
&lt;/h3&gt;

&lt;p&gt;Verifying a change by eye means starting the server, waiting, navigating, screenshotting, evaluating — a whole chain of calls. For anything you can't see in a browser, like server logic or data contracts or route handlers, that chain tells you nothing. So we only do the visual check when the change is something a person could actually see in a browser. For syntax we run &lt;code&gt;node --check&lt;/code&gt;. One Bash call.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source of overhead&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;th&gt;Saving&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Session context load&lt;/td&gt;
&lt;td&gt;~400 lines, every session&lt;/td&gt;
&lt;td&gt;60–120 lines, task-specific&lt;/td&gt;
&lt;td&gt;~60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ticket ingestion (per ticket)&lt;/td&gt;
&lt;td&gt;~9,000 tokens via MCP&lt;/td&gt;
&lt;td&gt;~400 tokens via paste&lt;/td&gt;
&lt;td&gt;~8,600 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File reads per task&lt;/td&gt;
&lt;td&gt;3–5 files speculatively&lt;/td&gt;
&lt;td&gt;Named files only&lt;/td&gt;
&lt;td&gt;2,000–4,000 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verification overhead&lt;/td&gt;
&lt;td&gt;Dev server + screenshot&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;node --check&lt;/code&gt; only&lt;/td&gt;
&lt;td&gt;4–6 tool calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each of these on its own is fine, nothing dramatic. Put together they change what fits in a session. Stuff that used to take two or three sessions now usually fits in one. That's the whole point.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the parts fit
&lt;/h2&gt;

&lt;p&gt;The other two articles each take one piece of this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Part 2, the skills file pattern, is about the startup cost and the contradicting-rules mess. It's where the import-on-demand structure comes from.&lt;/li&gt;
&lt;li&gt;Part 3, models and tools, covers the ticket overhead and the file-reading habit, plus which MCPs we said no to and where we drew the line between Haiku and Sonnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read this one first for the why. Then either of the others for the how.&lt;/p&gt;

&lt;h2&gt;
  
  
  One thing to keep in mind
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Claude Code does its best work when the context is small, accurate, and honest about what's actually known versus what you're hoping for. Vague in, vague out. And a context file that tries to cover everything ends up covering nothing properly.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Continue reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/kavyarani7/the-skills-file-pattern-2oam"&gt;Part 2: The Skills File Pattern&lt;/a&gt; — fixing CLAUDE.md bloat with imports.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/kavyarani7/picking-models-and-tools-gmn"&gt;Part 3: Picking Models and Tools&lt;/a&gt; — the MCPs we tried, refused, and why.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>We Were Paying 3.75x More Than Necessary on Every AI API Call — Here's How We Found It</title>
      <dc:creator>kavyarani7</dc:creator>
      <pubDate>Mon, 08 Jun 2026 20:45:57 +0000</pubDate>
      <link>https://dev.to/kavyarani7/we-were-paying-375x-more-than-necessary-on-every-ai-api-call-heres-how-we-found-it-2774</link>
      <guid>https://dev.to/kavyarani7/we-were-paying-375x-more-than-necessary-on-every-ai-api-call-heres-how-we-found-it-2774</guid>
      <description>&lt;p&gt;Our Anthropic bill was higher than expected. Nobody on the team knew exactly why. So we built a scanner and ran it on our own codebase. First thing it found:&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Found
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;server/services/divergence-detector.js&lt;/code&gt; was using &lt;code&gt;claude-sonnet-4-6&lt;/code&gt; with &lt;code&gt;max_tokens=150&lt;/code&gt; to generate 2-sentence explanations. Every night. On every divergence found.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;claude-sonnet-4-6&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sonnet costs &lt;strong&gt;$15/M output tokens&lt;/strong&gt;. Haiku costs &lt;strong&gt;$4/M&lt;/strong&gt;. For a 2-sentence output there is zero quality difference. We were paying &lt;strong&gt;3.75x more&lt;/strong&gt; on every single call and nobody noticed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built
&lt;/h2&gt;

&lt;p&gt;A GitHub Action that catches this automatically on every PR — before it merges.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fes4r0ywwkaqvwn5lmflr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fes4r0ywwkaqvwn5lmflr.png" alt="GitHub PR comment showing AI Architecture Scan cost delta table. Main branch baseline is $157.81 per month. This PR increases cost to $165.74 per month, a delta of plus $7.93 or 5 percent shown in red. Warnings stay at 1, Info increases by 1 to 6, Recommendations increase by 1 to 8, Duplicates increase from 1 to 2. New recommendation flags server/routes/watchlist.js for prompt caching opportunity." width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5qrsz7gfyh0v3oexafd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5qrsz7gfyh0v3oexafd.png" alt="GitHub PR comment showing AI Architecture Scan results with cost delta table comparing main branch at $157.81 per month versus this PR, with 1 warning for expensive model misuse in divergence-detector.js" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Works with Anthropic, OpenAI, Gemini, Bedrock, and LangChain. JS and TS supported. Zero dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add It in 2 Minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kavyarani7/ai-arch-scanner@v1&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;github_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
    &lt;span class="na"&gt;threshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;500'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔗 &lt;a href="https://github.com/marketplace/actions/ai-architecture-scanner" rel="noopener noreferrer"&gt;GitHub Marketplace&lt;/a&gt;&lt;br&gt;
🔗 &lt;a href="https://github.com/kavyarani7/ai-arch-scanner" rel="noopener noreferrer"&gt;Repo&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's the most expensive AI pattern you've found in your codebase? Drop it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>devops</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Hi, I'm kavyarani7</title>
      <dc:creator>kavyarani7</dc:creator>
      <pubDate>Sat, 08 Apr 2017 10:45:43 +0000</pubDate>
      <link>https://dev.to/kavyarani7/hi-im-kavyarani7</link>
      <guid>https://dev.to/kavyarani7/hi-im-kavyarani7</guid>
      <description>&lt;p&gt;I have been coding for 9 years.&lt;/p&gt;

&lt;p&gt;You can find me on GitHub as &lt;a href="https://github.com/kavyarani7" rel="noopener noreferrer"&gt;kavyarani7&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I live in Bengaluru.&lt;/p&gt;

&lt;p&gt;I work for Ametek.&lt;/p&gt;

&lt;p&gt;Nice to meet you.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
