<?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: taste kim</title>
    <description>The latest articles on DEV Community by taste kim (@taste_kim_2dec5824a9065cd).</description>
    <link>https://dev.to/taste_kim_2dec5824a9065cd</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3933116%2F8a0b0da2-bdba-4ca3-9ab6-b7903c4ada09.jpg</url>
      <title>DEV Community: taste kim</title>
      <link>https://dev.to/taste_kim_2dec5824a9065cd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/taste_kim_2dec5824a9065cd"/>
    <language>en</language>
    <item>
      <title>Trader Pro v0.3 shipped — Korean + US stock backtest GUI on KIS OpenAPI</title>
      <dc:creator>taste kim</dc:creator>
      <pubDate>Mon, 18 May 2026 07:19:53 +0000</pubDate>
      <link>https://dev.to/taste_kim_2dec5824a9065cd/trader-pro-v03-shipped-korean-us-stock-backtest-gui-on-kis-openapi-4p2d</link>
      <guid>https://dev.to/taste_kim_2dec5824a9065cd/trader-pro-v03-shipped-korean-us-stock-backtest-gui-on-kis-openapi-4p2d</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Shipped &lt;strong&gt;Trader Pro v0.3&lt;/strong&gt; — a desktop GUI (Electron + Vite + React + TypeScript) wrapping the Korean Investment &amp;amp; Securities (KIS) OpenAPI for backtesting and paper trading on Korean + US stocks. v0.3 is a full visual redesign + the cumulative work of 14 phases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: Electron 33 · Vite 5 · React 18 · TypeScript 5 · Zustand · Lightweight Charts · electron-builder · Pretendard + JetBrains Mono&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Buy/Download&lt;/strong&gt;: &lt;a href="https://tastekim.gumroad.com/l/epgoll" rel="noopener noreferrer"&gt;tastekim.gumroad.com/l/epgoll&lt;/a&gt; ($79 · lifetime updates)&lt;/p&gt;




&lt;h2&gt;
  
  
  What v0.3 changes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Visual redesign (Phase 14)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mint primary&lt;/strong&gt; (oklch hue 175) — calmer, more modern than the previous cyan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow-driven&lt;/strong&gt; depth — 5-tier surfaces, almost no 1px borders&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typography pair&lt;/strong&gt; — Pretendard (Korean/Latin sans) + JetBrains Mono (price/numbers)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern radii&lt;/strong&gt; (6/10/14/18px)&lt;/li&gt;
&lt;li&gt;Design tokens consolidated in &lt;code&gt;tokens.css&lt;/code&gt; — single source of truth for color, shadow, radius, density&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cumulative features (Phase 1–13)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom strategies with 8 indicators&lt;/strong&gt; — RSI, Bollinger Band, Volume Spike, SMA, EMA, MACD, &lt;strong&gt;Stochastic&lt;/strong&gt;, &lt;strong&gt;ATR&lt;/strong&gt;, freely composable, persisted via electron-store&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-timeframe backtest&lt;/strong&gt; — 1m/5m/15m/30m/60m + daily/weekly/monthly, with auto-pagination through KIS API's 100-day chunk limit (up to ~5 years)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-indicator chart&lt;/strong&gt; — toggleable overlays (SMA/EMA/BB) + sub-panels (RSI/Stoch/ATR)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chart animation&lt;/strong&gt; — backtest results play back oldest → newest with skip&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portfolio system&lt;/strong&gt; — up to 50 holdings, weighted-average multi-symbol backtest, auto-portfolio from actual KIS holdings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live/paper mode&lt;/strong&gt; — separate page with realtime price pulse, SVG sparkline with markers, position card with live P/L, 5/30/60/120/240-min milestone guides, auto session report on stop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markets&lt;/strong&gt; — KRX + NASDAQ + NYSE + AMEX + HK + Tokyo + Shanghai + Shenzhen; &lt;strong&gt;26 ETFs&lt;/strong&gt; in autocomplete (KODEX/TIGER/QQQ/SPY/VOO/VTI/TLT/GLD/SLV)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market hours + FX&lt;/strong&gt; — KRX/US session state with weekday and KST conversion, live USD/KRW rate refreshing every 5 min&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paper/Live budget split&lt;/strong&gt; — Paper: user-entered, Live: pulled from KIS balance API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-update checker&lt;/strong&gt; — manifest hosted on a secret GitHub Gist, in-app banner on new release, Gumroad re-download for buyers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Automated tests — &lt;strong&gt;106/106 PASS&lt;/strong&gt;
&lt;/h3&gt;




&lt;h2&gt;
  
  
  Why these choices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why Mint over Cyan
&lt;/h3&gt;

&lt;p&gt;Cyan can read as cheap/generic in trading dashboards. Mint with oklch hue 175 sits in the same calm-cool family but is distinct enough to be a brand color, and it pairs well with semantic red (loss) without clashing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why no order automation
&lt;/h3&gt;

&lt;p&gt;v0.3 is &lt;strong&gt;monitor + paper simulation only&lt;/strong&gt;. Real orders go through KIS HTS/MTS by the user. This keeps the legal surface area small while still delivering ~95% of perceived value: backtest engine + live indicator evaluation + signal alerts + position simulation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why pagination over websocket
&lt;/h3&gt;

&lt;p&gt;KIS daily-OHLCV is a REST endpoint that returns ~100 trading days per call. A 5-year backtest needs ~12 sequential calls per ticker with 200ms delay between calls. WebSocket adds infrastructure complexity for marginal value when most retail KR traders care about daily-bar strategies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why a hand-rolled update manifest over electron-updater
&lt;/h3&gt;

&lt;p&gt;electron-updater needs Apple code-signing ($99/year). For a $79 one-time product, a secret GitHub Gist + in-app banner + Gumroad re-download covers the same ground at zero cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architectural notes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single IPC entrypoint
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// preload.ts&lt;/span&gt;
&lt;span class="nx"&gt;contextBridge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exposeInMainWorld&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kisApi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;ipcRenderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;kis:fetch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&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;One &lt;code&gt;window.kisApi.fetch({ action, params })&lt;/code&gt; covers KIS, portfolio CRUD, strategy CRUD, fx, and update-check.&lt;/p&gt;

&lt;h3&gt;
  
  
  Live engine = tick aggregator + indicator on candles
&lt;/h3&gt;

&lt;p&gt;1-second poll → tick log → bucket into the user-selected interval → run identical indicator math as the backtester. Same math both sides means live signals match what backtest predicted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Two Zustand stores
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;tradingStore&lt;/code&gt; (UI/settings) and &lt;code&gt;liveStore&lt;/code&gt; (session ticks/signals/position). Splitting avoids re-rendering settings UI on every tick.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Gumroad: &lt;strong&gt;&lt;a href="https://tastekim.gumroad.com/l/epgoll" rel="noopener noreferrer"&gt;$79&lt;/a&gt;&lt;/strong&gt; — lifetime updates, in-app update banner, macOS arm64 (.dmg / .zip).&lt;/p&gt;

</description>
      <category>react</category>
      <category>showdev</category>
      <category>typescript</category>
      <category>ui</category>
    </item>
    <item>
      <title>I built a Korean stock auto-trading GUI on KIS OpenAPI — Trader Pro Beta</title>
      <dc:creator>taste kim</dc:creator>
      <pubDate>Fri, 15 May 2026 16:12:47 +0000</pubDate>
      <link>https://dev.to/taste_kim_2dec5824a9065cd/i-built-a-korean-stock-auto-trading-gui-on-kis-openapi-trader-pro-beta-28if</link>
      <guid>https://dev.to/taste_kim_2dec5824a9065cd/i-built-a-korean-stock-auto-trading-gui-on-kis-openapi-trader-pro-beta-28if</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Trader Pro&lt;/strong&gt; — a desktop GUI for Korean stock auto-trading on top of the Korea Investment Securities (KIS) OpenAPI. It combines backtesting, live trading, and indicator customization in one app, no coding required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beta is live (macOS)&lt;/strong&gt;: &lt;a href="https://tastekim.gumroad.com/l/epgoll" rel="noopener noreferrer"&gt;https://tastekim.gumroad.com/l/epgoll&lt;/a&gt;  ($79, saves $20 off the June 1 launch)&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I had a Node-based trader using KIS API and a backtest engine that worked, but only as a CLI. Friends wanted to try it without learning the command line. So I wrapped it in Electron + React + TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's inside
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Backtest engine
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TP/SL collision via candle-pattern estimation (bullish candle → SL likely first; bearish → TP first)&lt;/li&gt;
&lt;li&gt;In-sample / out-of-sample split (70/30) for walk-forward validation&lt;/li&gt;
&lt;li&gt;Kelly Criterion + R/R ratio + Expected Value per trade&lt;/li&gt;
&lt;li&gt;Korean fee/tax accounting (0.21% round-trip)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Live trading
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;KIS OpenAPI integration with mock/real account toggle&lt;/li&gt;
&lt;li&gt;1-min polling for current price&lt;/li&gt;
&lt;li&gt;Auto TP/SL exit + EOD close at 15:30 KST&lt;/li&gt;
&lt;li&gt;Telegram alerts coming v1.0&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Customizable strategies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;5 validated presets: G1/G2/G4 gap-down, RSI Oversold, Bollinger Squeeze&lt;/li&gt;
&lt;li&gt;Edit gap threshold, TP %, SL %, budget, ticker pool&lt;/li&gt;
&lt;li&gt;RSI / Bollinger / Volume filters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Validated numbers (out-of-sample, last 30% of 100-day data)
&lt;/h2&gt;

&lt;p&gt;G4 strategy on Samsung Electronics (005930):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;47 trades&lt;/li&gt;
&lt;li&gt;Win rate 63.8%&lt;/li&gt;
&lt;li&gt;R/R 1.34&lt;/li&gt;
&lt;li&gt;EV per trade: +1.93%&lt;/li&gt;
&lt;li&gt;Max drawdown: -4.21%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Past results don't guarantee future returns. Standard disclaimer applies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Electron 33&lt;/strong&gt; + Vite + React 18 + TypeScript 5&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zustand&lt;/strong&gt; for state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight Charts&lt;/strong&gt; (TradingView) for candle chart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Axios&lt;/strong&gt; for KIS API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind&lt;/strong&gt; for styling&lt;/li&gt;
&lt;li&gt;Built for macOS (Intel + Apple Silicon), Windows build May 25&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;If you're in Korea and trade through KIS — or just want to see how a small Electron + Vite + Zustand app comes together — grab the beta:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://tastekim.gumroad.com/l/epgoll" rel="noopener noreferrer"&gt;https://tastekim.gumroad.com/l/epgoll&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;$79 (50% off launch), 7-day refund, lifetime updates.&lt;/p&gt;

&lt;p&gt;Happy to answer questions in the comments — about the backtest math, the KIS integration, the Electron packaging, anything.&lt;/p&gt;

&lt;p&gt;— Tastekim&lt;/p&gt;

</description>
      <category>api</category>
      <category>automation</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>I encoded indie hacker discipline into Claude Code agents — here's the pattern</title>
      <dc:creator>taste kim</dc:creator>
      <pubDate>Fri, 15 May 2026 12:05:16 +0000</pubDate>
      <link>https://dev.to/taste_kim_2dec5824a9065cd/i-encoded-indie-hacker-discipline-into-claude-code-agents-heres-the-pattern-1ejc</link>
      <guid>https://dev.to/taste_kim_2dec5824a9065cd/i-encoded-indie-hacker-discipline-into-claude-code-agents-heres-the-pattern-1ejc</guid>
      <description>&lt;p&gt;Most indie products don't fail at code. They fail at the disciplined parts AI tools won't force you through: validation, MVP scoping, pricing, launch.&lt;/p&gt;

&lt;p&gt;I spent a few weeks codifying those parts into Claude Code agents with one specific pattern that changed everything: &lt;strong&gt;explicit refusal clauses and kill criteria in the agent prompts.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with helpful-only agents
&lt;/h2&gt;

&lt;p&gt;When you ask Claude (or any frontier model) to help, the model tries to deliver. That's the entire training signal — give the user what they asked for.&lt;/p&gt;

&lt;p&gt;This works for well-specified tasks. It fails for ambiguous decisions and bad inputs.&lt;/p&gt;

&lt;p&gt;Ask the model "validate my SaaS idea" — a helpful-by-default agent will validate it. It can argue both sides, but the bias is toward yes. Yes is more help-shaped.&lt;/p&gt;

&lt;p&gt;Ask "price my product at $9/month" — a helpful-by-default agent will help you justify $9. It won't say "actually you should charge $39 based on competitive data" unless you specifically open that door.&lt;/p&gt;

&lt;p&gt;The missing instruction is the list of things the agent should &lt;strong&gt;not&lt;/strong&gt; do, regardless of what you ask.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern: "Refuse to" sections
&lt;/h2&gt;

&lt;p&gt;Here's the literal section from a &lt;code&gt;pricing-strategist&lt;/code&gt; agent I wrote:&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;## Refuse to&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Pull pricing out of thin air without competitive benchmarking
&lt;span class="p"&gt;-&lt;/span&gt; Recommend "free forever" without a clear monetization path
&lt;span class="p"&gt;-&lt;/span&gt; Suggest gimmicky pricing (random odd numbers, fake "sale" prices)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And from a &lt;code&gt;cold-outreach-writer&lt;/code&gt; agent:&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;## When to refuse&lt;/span&gt;

If the founder wants to send the same email to 1,000+ unverified contacts → refuse.
That's spam, it doesn't work, and it gets domains blacklisted.

If the founder has no clear ICP → refuse.
Cold outreach without targeting is theater. Send them to the idea-validator agent first.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These aren't safety filters. They're domain-specific refusals based on what makes the underlying task succeed or fail in the real world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this works
&lt;/h2&gt;

&lt;p&gt;LLMs follow instructions in context. If you say "refuse to X" the model will refuse X — at least the obvious cases. The behavior change is large and reliable for prompts that explicitly enumerate refusal cases.&lt;/p&gt;

&lt;p&gt;The value: the agent's outputs become genuinely useful rather than just superficially compliant. You ask for a quick pricing rec; it pushes back if you haven't done the homework. You ask it to draft a cold email; it asks for an ICP first.&lt;/p&gt;

&lt;p&gt;That pushback is what a senior co-founder would do. It's what's missing from generic AI assistants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kill criteria are even stronger
&lt;/h2&gt;

&lt;p&gt;A step beyond refusal: each agent has &lt;code&gt;Kill criteria&lt;/code&gt; — hard conditions that, if true, force the agent to output a NO-GO verdict.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;idea-validator&lt;/code&gt; agent has five:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Problem has no existing workaround AND no public complaints → score ≤ 3&lt;/li&gt;
&lt;li&gt;SOM × realistic price &amp;lt; $50K ARR potential year 1 → score ≤ 4&lt;/li&gt;
&lt;li&gt;Zero competitors AND zero indirect solutions → score ≤ 2&lt;/li&gt;
&lt;li&gt;Buyer needs new budget category to pay → score ≤ 5&lt;/li&gt;
&lt;li&gt;Distribution plan is "post on Twitter and hope" → score ≤ 2&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any trigger, the agent stops weighing and reports the kill. No softening. No "but here are some considerations."&lt;/p&gt;

&lt;p&gt;This single pattern killed two of my own bad ideas in the first week. Each one would have been ~6 weeks of work otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hook variant for the strongest refusal
&lt;/h2&gt;

&lt;p&gt;For "don't write code outside the MVP spec," I went one step further and implemented it as a Claude Code PreToolUse hook.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;scope-creep-guard&lt;/code&gt; hook intercepts every &lt;code&gt;Write&lt;/code&gt; or &lt;code&gt;Edit&lt;/code&gt; operation, checks the project's &lt;code&gt;MVP-SPEC.md&lt;/code&gt;, and prompts the user if the file path doesn't appear to be in scope.&lt;/p&gt;

&lt;p&gt;The difference between a refusal in the prompt and a refusal in the hook is who has the last word. Prompt refusals can be argued past. Hook refusals require an explicit override action — slow enough that you actually think about it.&lt;/p&gt;

&lt;p&gt;For things that should always be slow (touching production, writing code outside scope, deleting data), use hooks. For things that should be carefully reasoned (pricing, scope, positioning), prompt refusals are enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it cost
&lt;/h2&gt;

&lt;p&gt;Three friction points worth naming:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The agent gets argumentative.&lt;/strong&gt; You sometimes know better than the agent does about your specific context. The refusal triggers anyway. You have to either provide the bypass context or override.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Refusals can be wrong.&lt;/strong&gt; A blanket "refuse to do X" rule will misfire on edge cases. The agent should have an escape clause ("unless the founder explicitly justifies why this edge case is different").&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Token cost.&lt;/strong&gt; Refusal sections take 50-200 tokens per agent. Across a multi-agent workflow this adds up. The improvement in output quality more than compensates, but be aware.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try the pattern yourself
&lt;/h2&gt;

&lt;p&gt;Steal the pattern even if you don't use my agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a &lt;code&gt;## Refuse to&lt;/code&gt; section to your own agent prompts&lt;/li&gt;
&lt;li&gt;List 3-5 things the agent should NOT do under any circumstances&lt;/li&gt;
&lt;li&gt;Add 2-3 &lt;code&gt;Kill criteria&lt;/code&gt; for hard NO-GO conditions&lt;/li&gt;
&lt;li&gt;Watch the output quality improve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or use the agents directly. I packaged this work into a Claude Code toolkit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/tastekim/claude-indie-toolkit" rel="noopener noreferrer"&gt;Free preview agent&lt;/a&gt;&lt;/strong&gt; (MIT) — the &lt;code&gt;idea-validator&lt;/code&gt; with full kill criteria + sample output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://tastekim.gumroad.com/l/claude-indie-toolkit" rel="noopener noreferrer"&gt;Full $19 toolkit&lt;/a&gt;&lt;/strong&gt; — 5 agents, 3 skills, 2 commands, 1 PreToolUse hook (&lt;code&gt;scope-creep-guard&lt;/code&gt;). &lt;code&gt;LAUNCH&lt;/code&gt; code → $14 for 72hrs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The methodology is in the README either way. Most of the value is the discipline encoded in the prompts.&lt;/p&gt;

&lt;p&gt;What other disciplines would you encode into your agents? I'm thinking churn-diagnostician next.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>indiehackers</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
