autonomous-build
Converts a plan, idea, or app spec into a complete autonomous multi-session build setup that Claude Code can execute end-to-end without human intervention. Generates a structured PROMPT.md (the build spec) and build.sh (the loop runner) in the target project directory, ready to run overnight.
git clone https://github.com/labeveryday/claude-put-in-work
T=$(mktemp -d) && git clone --depth=1 https://github.com/labeveryday/claude-put-in-work "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/autonomous-build" ~/.claude/skills/labeveryday-claude-put-in-work-autonomous-build && rm -rf "$T"
.claude/skills/autonomous-build/SKILL.mdAutonomous Build Setup
You are generating the files a user needs to run an autonomous multi-session build:
PROMPT.md and build.sh.
Use this skill whenever the user wants to:
- Build an app autonomously ("build me a...", "I want to create...")
- Turn a plan or idea into something Claude Code can build on its own
- Set up an autonomous or overnight build
- Create a build spec or PROMPT.md for a project
- Convert a description into a phased, executable build plan
- Scaffold a new project for autonomous development
Also trigger when the user provides a detailed app idea, feature spec, or project description and expects it to be built — even if they don't explicitly say "autonomous." If someone describes what they want built and it's more than a single-session task, this skill applies.
Your Job
- Gather requirements by asking the user about their project. Don't ask everything at once — have a conversation. Start with the big picture, then drill into specifics.
- Write
in the user's target project directoryPROMPT.md - Write
in the same directorybuild.sh - Tell the user what to do next — review, then run
Step 1: Gather Requirements
If the user provided a description with
$ARGUMENTS, use that as a starting point. Otherwise, ask.
Ask about these in order, skipping what's already clear:
- What are you building? — App name, what it does, who it's for
- Where should it live? — Absolute path for the project directory
- Tech stack — Language, framework, frontend approach, database, key libraries. If the user is unsure, make a recommendation based on what they're building.
- Core workflows — What can a user DO with this app? Walk through the primary flows.
- Architecture — API endpoints, data models, how pieces connect. Sketch this out with the user.
- Design requirements — Only if there's a UI. Colors, layout, component style. If the user doesn't care, skip this section entirely in the output.
- Number of sessions — How many build.sh loops? Default is 10. More phases = more sessions needed.
Don't ask about:
- Commit rules (use the standard set)
- Multi-session continuity block (always include it)
- Documentation requirements (always include the standard set)
- BUILD_PROGRESS.md format (standardized)
Step 2: Write PROMPT.md
Write
PROMPT.md to the target project directory. Read SAMPLE_PROMPT.md from this repo first to follow its structure — but with ALL placeholders filled in and ALL guidance comments removed.
To find the template: Look for
SAMPLE_PROMPT.md in the repo that contains this skill file (the claude-put-in-work repo). Read it before generating the output.
The output should be a clean, ready-to-run prompt with no template artifacts.
Critical rules for the generated PROMPT.md:
- Use ABSOLUTE paths everywhere (the user's project path, not relative)
- Every phase must have concrete verification steps ("Test: do X -> see Y")
- Each phase should be completable in one session (~1-3 hours of agent work)
- Phase 1 is always foundation (skeleton + "it starts")
- Final phase is always polish + verification
- Include the multi-session continuity block at the top (with real commands for the chosen stack)
- Include the standard commit rules and security rules
- Include documentation requirements with per-phase checklist
- Include the "ALL PHASES COMPLETE" instruction for BUILD_PROGRESS.md
- Do NOT include the "Minimal Example" or "Tips" sections — those are template-only
Security rules to always include in the generated PROMPT.md:
- Never commit secrets, API keys, tokens, or credentials
- Never commit .env files
- Before every commit, scan staged changes for secrets
- Use
— nevergit add <specific files>
orgit add .git add -A - Never use
with git push--force - Never run destructive commands outside the project directory
- If the project needs API keys, read them from environment variables, never hardcode them
Phase sizing guidance:
- Simple app (todo, blog, calculator): 3-4 phases
- Medium app (dashboard, CRUD with auth, API service): 5-7 phases
- Complex app (multi-service, real-time, deployment): 8-10 phases
Step 3: Write build.sh
Write
build.sh to the same directory. Use this exact script, only changing MAX_RUNS based on the number of phases (set it to number of phases + 2 to give buffer):
#!/bin/bash # Autonomous multi-session build runner # Usage: ./build.sh [--yes] # --yes Skip confirmation prompt set -euo pipefail cd "$(dirname "$0")" MAX_RUNS={{MAX_RUNS}} RUN=0 LOG_DIR="build-logs" # --- Pre-flight checks --- if [ ! -f "PROMPT.md" ]; then echo "ERROR: PROMPT.md not found in $(pwd)" echo "Create a PROMPT.md with your build spec before running." exit 1 fi mkdir -p "$LOG_DIR" echo "============================================" echo " Autonomous Build Runner" echo "============================================" echo "Max sessions: $MAX_RUNS" echo "Prompt: PROMPT.md ($(wc -l < PROMPT.md | tr -d ' ') lines)" echo "Logs: $LOG_DIR/" echo "Started: $(date)" echo "============================================" echo "" # Confirm unless --yes flag is passed if [ "${1:-}" != "--yes" ]; then echo "This will run Claude Code with --dangerously-skip-permissions." echo "Claude will have full system access during the build." echo "" read -r -p "Continue? [y/N] " response if [[ ! "$response" =~ ^[Yy]$ ]]; then echo "Aborted." exit 0 fi echo "" fi # Clean exit on Ctrl+C trap 'echo ""; echo ">>> Build interrupted at session $RUN/$MAX_RUNS"; exit 130' INT while [ $RUN -lt $MAX_RUNS ]; do RUN=$((RUN + 1)) TIMESTAMP=$(date +"%Y%m%d_%H%M%S") LOG_FILE="$LOG_DIR/run_${RUN}_${TIMESTAMP}.log" echo ">>> Session $RUN/$MAX_RUNS - $(date)" echo ">>> Log: $LOG_FILE" echo "" cat PROMPT.md | claude --dangerously-skip-permissions 2>&1 | tee "$LOG_FILE" EXIT_CODE=${PIPESTATUS[1]} echo "" echo ">>> Session $RUN finished (exit $EXIT_CODE) at $(date)" echo "" # Check if BUILD_PROGRESS.md indicates completion if [ -f "BUILD_PROGRESS.md" ]; then if grep -qi "all phases complete\|build complete\|all.*done" BUILD_PROGRESS.md 2>/dev/null; then echo ">>> BUILD_PROGRESS.md indicates build is complete. Stopping early." break fi fi # Pause between sessions if [ $RUN -lt $MAX_RUNS ]; then sleep 5 fi done echo "" echo "============================================" echo " Build finished — $RUN session(s) ran" echo " $(date)" echo "============================================" if [ -f "BUILD_PROGRESS.md" ]; then echo "" echo "Progress summary:" head -30 BUILD_PROGRESS.md fi
Replace
{{MAX_RUNS}} with the actual number.
After writing both files, run
chmod +x build.sh in the target directory.
Step 4: Summary
After writing both files, tell the user:
- Where the files were written
- How many phases and sessions are configured
- Suggest they review
— especially the tech stack, architecture, and phase breakdownPROMPT.md - Tell them to run:
cd <project-path> && ./build.sh - Remind them they can check progress in
and logs inBUILD_PROGRESS.mdbuild-logs/ - Remind them to review
andbuild-logs/
after the build for any issuesgit log