Ship Stories

Ship Stories

Source-backed fixes for what breaks when you build with coding agents and vibe-coding tools. Each card says what broke, what the source says caused it (confirmed or suspected), the fix, and how to prevent it, with a link to the original.

How to read the labels

We have not reproduced any fix ourselves. “Source-backed” means a named public source describes the fix, not that we tested it.

Start here: 10 source-checked stories

Fake Anthropic Claude Code in Cursor’s marketplace planted an SSH backdoor

independently tested

On Oct 29, 2026, Cursor’s VS Code Extension Marketplace briefly served malicious Anthropic.claude-code 2.1.312 and 2.1.313 (macOS/Windows). The packages were not from Anthropic. They tried to install a persistent reverse-SSH backdoor; uninstalling the extension alone is not enough.

CursorClaude Codesecuritysupply-chainSSHmarketplace

Source · Read the card

Bubblewrap blocked agent writes outside the project — and still let it read a fake token

author-reported

A builder wrapped a coding agent in bubblewrap with a read-only root and a writable project bind. Writes outside the project failed with EROFS even as root, but a fake credential under ~/.fake-creds stayed readable and HTTPS still worked until the whole network namespace was cut (which also killed the model API).

securitysandboxsecretsbubblewrapprocess

Source · Read the card

Codex keeps KEY, SECRET, and TOKEN env vars in every shell command unless you opt in

author-reported

OpenAI's own Codex config docs say ignore_default_excludes defaults to true, so variables whose names contain KEY, SECRET, or TOKEN are not stripped from the environment passed to spawned commands. Set it to false to turn the filter on.

Codexsecuritysecretsenvprocess

Source · Read the card

Anthropic now says fold most subagents into one loop with skills — multi-agent often costs more for less

author-reported

Anthropic's Applied AI team published guidance that a single agent with progressively disclosed skills and tools often beat both one-big-prompt and subagent designs on quality, cost, and latency across enterprise deployments. Keep subagents for parallel throwaway work or measurable context bloat; otherwise fold them.

Claude CodeAgents SDKspendtokensprocesssubagents

Source · Read the card

Agent SDK and claude -p traffic drains Claude's 5-hour limit faster than the interactive CLI

independently tested

Several people ran their own A/B tests and saw the 5-hour meter move roughly 1.6x to 3x faster through the Agent SDK or claude -p than through interactive Claude Code, for similar work. Anthropic had not replied in the thread when we read it.

Claude CodeAgents SDKspendtokensprocess

Source · Read the card

A weekly Claude Code bar at 86% with 73% of the week gone was heading for 117%

author-reported

A builder noticed that an 86% weekly usage reading, with 73% of the week elapsed, projected to a hard stop about 19 hours before the reset. They added a pace projection to their Claude Code status line.

Claude Codespendtokensprocess

Source · Read the card

One max-effort research prompt made 394 subagent calls and locked a developer out of Claude Code

author-reported

A developer reports 394 subagent calls (341 at once) and 84M tokens in ten minutes, then a usage lockout. Their own guard tool cut agent bursts but not lockouts.

Claude Codespendtokensprocesssubagents

Source · Read the card

A refresh loop at checkout fired a Claude Code-built app's API routes: no rate limit, no cap

author-reported

A builder says a user hit refresh in a loop at checkout and every refresh fired the app's API routes. They had asked for no rate limit or cap, and call it one expensive afternoon.

Claude Codepaymentsrate-limitdeploy

Source · Read the card

A planted AGENTS.md in ~/Downloads got Codex to install a malicious package in a security firm's tests

author-reported

Security firm Forever says it found a malicious AGENTS.md in a customer's Downloads folder, then showed in tests that a web page can drop one there. In its tests Codex ran the payload in more than 90% of attempts; a CLAUDE.md the authors crafted worked on Claude about half the time.

securityClaude CodeCodexAGENTS.mdMCP

Source · Read the card

Headless Claude Code (claude -p) can load a repo's .mcp.json servers without the approval prompt

author-reported

Anthropic's MCP docs say that in claude -p, Agent SDK and some cloud sessions Claude Code cannot show the approval prompt and loads project-scoped servers without asking. The docs list three ways to keep a server out.

Claude CodeMCPsecuritysecretsprocess

Source · Read the card

LiteLLM v1.107.0 was a poisoned release: about two hours on PyPI, and the first cause the vendor gave was later retracted

author-reported

LiteLLM says its release pipeline published a credential-stealing v1.107.0 to PyPI and Docker on Oct 21. Its first status post blamed GitHub CLI tokens in logs; its later canonical write-up says the first token came from a different internal service.

Claude CodeLiteLLMsecretssecuritysupply-chain

Source · Read the card

A Cursor agent ran git restore and discarded uncommitted edits; staff called it a known issue (March 2026)

author-reported

A Cursor user says the agent ran git restore on a tracked file and permanently lost new bibliography entries. Cursor staff replied it is a known issue and suggested turning off auto-run, committing first, and adding a rule.

Cursorgitagentprocess

Source · Read the card

A Claude-family model's Stripe webhook had no signature check in one scanner vendor's test

author-reported

In a July 2026 test by AgenticCLI, a Claude-family model's answer to an ordinary Stripe webhook prompt never verified the signature, so anyone who knew the URL could fake a payment event. Two of the other three prompts also produced real findings.

Claude CodeStripesecurity

Source · Read the card

One invoice-app prompt in Lovable, Bolt and Cursor gave three different security profiles (n=3)

author-reported

A scanner vendor built the same invoice app on Lovable, Bolt.new and Cursor in March 2026 and scanned each deployed app. Finding counts were similar, but the serious problems differed: missing RLS and a service-role key, secrets in the frontend bundle, and missing ownership checks.

LovableBoltCursorsecurityRLS

Source · Read the card

Agent spend stories

Where the money goes when agents run unattended, and the limits that are documented. The Token Survival Kit turns these into a weekly routine.

From December, ChatGPT and Codex share one usage allowance on Plus, Pro, and Business

author-reported

OpenAI’s Help Center says starting in December, Plus, Pro, and Business plans share one ChatGPT + Codex usage allowance measured in tokens. Instant chat does not draw from it. Remaining usage and reset times show in Settings → Usage.

ChatGPTCodexspendlimitsOpenAI

Source · Read the card

Grandfathered ChatGPT Pro 200 keeps the old included allowance only through October 29

author-reported

OpenAI's help page says eligible Pro 200 subscribers who were active in a late-September window can use the previous included allowance through October 29, 2026. After that date the subscription moves to a lower included usage allowance at the same $200/month price. New Pro 200 subscriptions that aren't eligible already get the lower allowance.

ChatGPTCodexspendlimitsOpenAI

Source · Read the card

OpenCode Console breach: attackers ran up charges on users' stored AI provider keys

unresolved

OpenCode says attackers broke into an older system overnight and used API keys stored in its Console, affecting 1.4% of Console users. Users reported charges from hundreds to over $1,000 on provider accounts. OpenCode's advice: revoke and replace keys at each provider.

OpenCodespendsecurityAPI keys

Source · Read the card

Hitting a Claude plan limit can flip to pay-as-you-go usage credits, if you enabled them

author-reported

Anthropic's help docs say that with usage credits enabled, requests keep working after the 5-hour or weekly limit, billed at API rates, until you hit your monthly cap or your balance runs out. You can also set the cap to unlimited or turn on auto-reload.

Claude Codespendtokenssettings

Source · Read the card

Headless claude -p has no turn limit by default; --max-budget-usd is the documented spend cap

author-reported

Anthropic's CLI reference says --max-turns has no limit by default in print mode. It documents --max-budget-usd as a stop once estimated spend reaches an amount, with caveats: it is a client-side estimate and spend can pass the cap.

Claude Codespendtokenssettings

Source · Read the card

An alert is an email, a cap is a breaker: one builder's cap that fired and the five-layer stack he recommends

author-reported

A builder's Supabase project hit a hard bandwidth cap and the database stopped answering: no surprise bill, but also downtime for a product with one signed-up user. His write-up proposes five layers of limits: account, key, loop, endpoint and alert.

spendtokensprocessSupabase

Source · Read the card

Get new source-backed fixes by email

New cards and any corrections, by email. One address, no account.

Delivered by an email service; every message should carry an unsubscribe link.

Staging note (not shown in a release build): the form action is the placeholder SIGNUP_FORM_ACTION_URL, so this form does nothing yet. No email-service account has been created.

More stories (not yet re-checked against their sources)

These earlier cards were curated from public posts. They have not yet had the same source re-read, so each is marked as such.

Cursor monthly empty — Codex 5-hour windows as the fallback

not yet re-checked against its source

One user says that when their Cursor tokens ran out for the month, the Codex tokens included in their ChatGPT subscription were still available, running out after an hour or so and resetting every five hours, so the two allowances can be paired.

CursorCodexspendtokensprocess

Source · Read the card

Stripe invoice.payment_failed logged — access never revoked

not yet re-checked against its source

Cursor/Lovable Stripe webhook had the failure case, but only logged and returned 200 — users kept paid access forever.

StripewebhooksCursorLovablepayments

Source · Read the card

USING (true) RLS leaked the whole users table

not yet re-checked against its source

5/5 audited Cursor/Lovable apps had open read policies so anyone could SELECT *.

SupabaseRLSCursorLovablesecurity

Source · Read the card

Service-role key shipped in the browser bundle

not yet re-checked against its source

One vibe-coded app leaked the entire users table via a key that lived in page JS.

SupabasesecretssecurityLovableBolt

Source · Read the card

Claude Code checked user_metadata.role — clients can set admin

not yet re-checked against its source

Role checks on client-writable metadata let any logged-in user promote themselves.

Claude CodeSupabaseauthsecurity

Source · Read the card

Lovable deploy went green — auth still pointed at localhost

not yet re-checked against its source

Publish copied the UI; Site URL / redirects / Stripe webhook stayed on preview settings.

LovabledeployauthStripeSupabase

Source · Read the card

Stripe Edge webhook returned 401 — verify_jwt blocked Stripe

not yet re-checked against its source

Supabase Edge Functions default JWT check rejected Stripe before the handler ran.

StripeSupabasewebhooksdeployBolt

Source · Read the card

Bolt export hit the Stripe wall — preview is not production

not yet re-checked against its source

App worked in Bolt preview; after export/deploy, real Stripe webhooks and live keys fell apart on Netlify/Vercel.

BoltStripedeploypayments

Source · Read the card

Max plan burned in ~3 heavy days — agents and plugins ate the window

not yet re-checked against its source

Tracked ~100 Claude Code sessions: subagents, screenshots, and unused MCPs dominated burn.

Claude Codespendtokensprocess

Source · Read the card

Seven critical security leaks that keep showing up in AI apps

not yet re-checked against its source

Checklist from real vibe-coding audits: open RLS, service_role in client, wild CORS, unvalidated webhooks, and more demo defaults.

securityRLSsecretsCursorvibecoding

Source · Read the card

Cursor free-iterate wrecked a finished Expo game

not yet re-checked against its source

Left Cursor free to iterate on Expo paths for itch.io; UI corrupted over ~2 hours. Recovered via last good git tag.

Cursordeployscope-creepgameExpo

Source · Read the card

Cursor auth worked in dev, dead in prod (hardcoded env)

not yet re-checked against its source

Cursor-built auth silently used a hardcoded environment variable; prod logins failed while local looked fine.

Cursorauthenvprod

Source · Read the card

Cursor context drift reverted OAuth back to API keys

not yet re-checked against its source

After Google OAuth, updating edge-function metadata made the agent reintroduce old API keys and break the flow.

CursorClaudecontext-driftOAuth

Source · Read the card

Stripe webhook returns 200 but never updates the database

not yet re-checked against its source

Cursor/Lovable Stripe handler returns 200 and logs the event, but never flips is_paid or access in the database.

StripewebhooksCursorLovablepayments

Source · Read the card

Bolt.new launch night: RLS and Stripe webhook gaps

not yet re-checked against its source

Second real user hit RLS/session timing; unsigned Stripe webhooks left the database stale on launch night.

BoltSupabaseRLSStripeauth

Source · Read the card

Paying vibe SaaS with open RLS and dead email verify

not yet re-checked against its source

JWT still valid after cancel; is_paid writable from the browser; email_verified never flipped on a vibe-coded SaaS.

authRLSStripeLovable

Source · Read the card

Two Markdown files that stop Cursor and Claude agent amnesia

not yet re-checked against its source

Append-only project log plus roadmap Markdown keeps Cursor, Claude Code, and Codex from forgetting decisions across sessions.

CursorClaude Codecontext-driftprocess

Source · Read the card