3 Weeks of Silent Failure: How One Missing `--model` Flag Drained My Interactive Quota Across 4 Jobs A developer running an autonomous Claude Code content pipeline discovered that omitting the `--model` flag from `claude -p` calls caused the jobs to silently consume the interactive session's quota instead of a dedicated model pool. When the quota was exhausted, the CLI returned only a single-line "You've reached your Fable limit." message with a non-zero exit code, which passed naive non-empty-output checks and went undetected for three weeks across four scheduled jobs. The developer traced the failure to the quota-sharing behavior of the default model slot and now guards the pipeline with an explicit model flag and quota-checking layer. I went from ¥100k a month as a student to ¥600k juggling side gigs, then to ¥0 after a layoff—and six months of building an autonomous Claude Code environment brought me to ¥1.2M a month in revenue. The difference wasn't working harder. It was betting on "grow the environment" instead of "do the work." Look up how to make money on the side and you'll always land on the same three options: sell your skills, make content, or build a service. They're all correct. But they share one ceiling: your time is finite. Back when I was juggling gigs at ¥600k a month, I genuinely hit the wall on working hours. Every article, every DM, every proposal needed my own hands. The more clients I had, the more quality slipped. I couldn't add more, and I couldn't let quality drop—and that's exactly when the layoff came. I decided I wasn't going to do it the same way again. For the restart, I chose a different approach: build the environment that runs without me first. Today, launchd jobs fire at 8:00 and 10:35 every morning, generate a stock of articles, and post a notification to Discord. Whether my Mac is open or I'm asleep, the article stock keeps growing. There are three reasons this setup is strong. Time accumulates. Human work consumes time. Environment work produces it. Every job run stacks up as inventory that doesn't disappear. Even when I'm sick and can't do anything for three days, the jobs quietly keep growing the stock. "As long as they're running correctly," that is—and that "if" is the whole subject of this post. The scale changes by an order of magnitude. A human can write a few articles a day at most. Jobs run in parallel, as many as you like. Right now, four lanes—article generation, daily PDCA, structuring external data, and triaging incoming DMs—all run during the same night. I passed the throughput of a single person because agents were lined up side by side. How deeply you understand quota structure changes. Someone who uses Claude Code as a "tool to ask the AI" and someone who wires it in as "part of the infrastructure" have fundamentally different monthly throughput. To use it as infrastructure, you have to know exactly how quota is shared and how it's consumed, or you will get stuck. This outage happened precisely in that gap of knowledge. Here's the skeleton of the content-generation pipeline up front. I'll dissect the outage in the second half, so having the big picture first will make it easier to follow. launchd ~/Library/LaunchAgents/com.shun.article-daily.plist 起動タイミング: 08:00 / 10:35(毎日) │ ▼ ~/.claude/scripts/claude-quota-guard.py --job com.shun.article-daily │ ← クォータ残量のガード層 ▼ ~/.discord/run-and-notify.sh "zenn" "Zenn記事ストック生成" │ ← Discord通知ラッパー ▼ ~/.claude/scripts/article-daily-stock.sh apply │ ← 実際の生成ロジック ▼ claude -p "プロンプト..." --model ??? │ ├─ --model を明示した場合 │ 指定モデルの独立した枠で実行 │ → 記事テキストが正常に返る ✅ │ └─ --model を省略した場合 対話セッションの「既定モデル枠」を共有消費 → 枠が切れると以下の1行だけ stdout に吐いて終了: "You've reached your Fable limit." → exit code は非0 → ただしログには「1行返ってきた」としか残らない → -s output 等の素朴なチェックを通り抜ける ❌ → 何週間でも誰も気づかない ← 実際に3週間気づかなかった The bottom of the diagram is the heart of the outage. claude -p does not error when you omit --model . It quietly goes off and consumes the interactive session's quota. When that quota runs out, it returns a single-line message and exits. That one line gets mistaken for "there was output," and detection slips through. Here's an excerpt from the actual com.shun.article-daily.plist real paths replaced with ~ .