Vibe Coding Checklist: Production-Safe AI Development
Use this as a lightweight guardrail when building with LLMs. Print it, pin it, reference it before each session.
Product & Scope
- Clearly describe the product, users, and problem
- Specify the type of system (web app, API, CLI, service, etc.)
- State non-goals and out-of-scope features
Role & Prompt Alignment
- Assign the LLM a precise expert role
- Explicitly optimize for boring, conventional code
- Ask the LLM to refine the prompt before coding
Planning Artifacts
- Roadmap with phased implementation (template)
- Architecture document - components, data flow (template)
- README explaining purpose and structure (template)
- System Invariants & Contracts document (template)
System Invariants & Contracts
- Define non-negotiable rules
- Confirm invariants before behavior changes
- Treat invariant violations as bugs or product decisions
Secrets & API Key Security
- No API keys or secrets in frontend code (guide)
- External APIs called through server-side proxy routes
- No secrets in
NEXT_PUBLIC_,VITE_, orREACT_APP_env vars .envfiles in.gitignore- Network tab checked for exposed credentials
- Proxy routes require authentication
- No “warn-only” security defaults (insecure configs must fail-fast outside dev)
- Auth endpoints have rate limiting
Implementation Discipline
- Write tests alongside features
- Add static checks (lint, format, type)
- Run tests before accepting new code
- Prefer clarity over cleverness
- Keep files modular and focused (< ~1,500 lines)
Cross-Boundary Integrity
- Adding a field? Grep for every site that creates, stores, restores, or serializes the data model
- Data round-trips (save/restore, serialize/deserialize) preserve all fields and types
- Multi-step operations build new state in temp variables, swap atomically on success
- No type leakage across boundaries (Decimal into JSON, datetime into dicts)
- Multi-source data has compatible units/semantics before aggregation
- After fixing a bug, search entire codebase for the same pattern class
Auditing at Scale (Large Codebases)
- SAST scanner running in CI/CD on every PR (Snyk, Semgrep, CodeQL, or similar)
- Code quality gate in CI (SonarQube/SonarCloud or similar)
- Dependency vulnerability scanning enabled
- Security findings triaged for reachability (real vs. false positive)
- Repository-wide architecture review run before major releases
- External tool findings fed back to agents as focused investigation tasks
- Full guide: Auditing at Scale
Validation & Stability
- Run bug hunts frequently (prompt)
- Check for regressions against invariants
- Update docs when behavior changes
- Generate checkpoint summaries after major changes
Prompt Hygiene
- Keep reusable prompts in
/prompts(examples) - Use role-specific prompts for consistency
- Avoid “creative” prompts unless explicitly needed
Quick Prompt Reference
| Prompt | Use Case | Link |
|---|---|---|
| Engineering | Default production coding mode | prompts/engineering-prompt.md |
| Architecture-Aware Feature | Adding features safely | prompts/architecture-aware-feature.md |
| Bug Hunt | General bug detection | prompts/bug-hunt.md |
| Backend Bug Hunt | Backend-specific issues | prompts/backend-bug-hunt.md |
| Frontend Bug Hunt | Frontend-specific issues | prompts/frontend-bug-hunt.md |
| Bug Fixing | Surgical fixes only | prompts/bug-fixing.md |
| Modularity Review | File size and structure | prompts/modularity-review.md |
| Refactor for Clarity | Improve readability | prompts/refactor-for-clarity.md |
| Invariant Check | Verify against contracts | prompts/invariant-check.md |
| User Feedback Simulation | Usability testing | prompts/user-feedback-simulation.md |
| Performance Review | Optimization | prompts/performance-review.md |
| Code Review | Multi-pass PR review | prompts/code-review.md |
| Setup Review Pipeline | Automated PR reviews | prompts/setup-code-review-pipeline.md |
| Smart Contract Audit | Solidity security audit | prompts/smart-contract-audit.md |
Code Review Setup
- Create
REVIEW.mdat repo root with review-specific rules (guide) - Use consistent severity levels: Critical (block merge), Nit (fix if easy), Pre-existing (file separately)
- Review changed files in full, not just the diff
- Run the code review prompt on PRs (copy to
.claude/commands/review-pr.mdfor slash command access) - For automated reviews: set up the GitHub Actions pipeline with inline comments
MCP Server Development
- Tool descriptions list every parameter with type, purpose, and valid values
- Return type semantics documented (creates, returns ref, returns data, side effect)
- Parameter names in schema match what descriptions lead the LLM to expect
- Every handler wrapped in a safe error boundary (decorator/try-catch)
- Error responses include valid options and expected format (never “see the docs”)
- No
print()/console.log()writing to stdout (corrupts stdio transport) - Every attribute access verified against actual type definitions
- Every function call uses correct parameter names from real signatures
- All response types are JSON-serializable (handle datetime, tuples, custom types)
- Inputs validated at the boundary: enums, non-finite numbers, required refs, types
- LLM-specific input test suite exists (lowercase enums, NaN, extra whitespace)
- Full checklist: Building MCP Servers guide
Multi-Agent Git Safety
- Each agent’s work committed from its own tab before switching tasks
git statusrun before every commit to find ALL untracked/modified files (not just the agent’s own)- Parallel agents use separate branches or git worktrees, not tabs-on-main
- No
git pullorgit checkoutwith uncommitted work from other agents — stash first git statusrun after every push to verify nothing was left behind- CLAUDE.md includes multi-agent git safety rules (guide)
Smart Contracts (Solidity)
- Every
whenNotPausedfunction justified — defensive actions (challenge, renew, withdraw) exempt from pause - No deadline/window that ticks during pause without user recourse
- No
safeTransferto non-msg.senderin functions other users depend on (use pull-over-push) - Every admin setter has min/max validation; zero-value behavior analyzed
- Config affecting already-committed funds is snapshotted at commitment time
- Sentinel values for “unset” (
0) don’t collide with valid values - Maximum single-block damage documented for every privileged role
- Destructive privileged actions rate-limited; no-ops don’t consume cooldown
- Every array has bounded growth or a deletion strategy
- Terminal states distinguishable from active states (use enum, not timestamps)
- Upgradeable: new struct fields at END only, storage gap adjusted
- Upgradeable: migration plan for existing data when structures change
- Cross-contract: same vulnerability pattern checked across all sibling contracts
- Two-pass audit completed: external audit → self-audit of fixes
- Full checklist: Smart Contract Auditing guide
Claude Code Session Management
/compactused proactively when sessions exceed 30+ exchanges/costchecked periodically to monitor token usage/memoryreviewed to verify persistent memories are accurate- CLAUDE.md kept focused — it’s included in every turn’s context budget
- Subagents used for deep exploration to protect main context window
- Worktree isolation used for risky or parallel agent operations
- Stop hooks configured for automated verification on task completion
- PostToolUse hooks configured for auto-formatting on Write/Edit
- Permission allow-lists configured for safe commands (test, lint, build)
- Full guide: Claude Code Architecture Deep Dive
After Each Major Change
Generate a checkpoint summary:
- 5-bullet summary of what changed
- Any new assumptions introduced
- Any risks added
This creates a rolling audit trail and reduces long-term confusion.
Remember: The goal is velocity without chaos. These checks aren’t bureaucracy—they’re the guardrails that let you move fast safely.