Agentic-loop tour
Take an interactive tour of agentic-loop - the system for going from idea to shipped code with AI.
git clone https://github.com/allierays/agentic-loop
T=$(mktemp -d) && git clone --depth=1 https://github.com/allierays/agentic-loop "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/tour" ~/.claude/skills/allierays-agentic-loop-tour && rm -rf "$T"
.claude/skills/tour/SKILL.mdVibe & Thrive Tour
Step 1: Check & Fix Setup
Print this exactly:
╦ ╦╦╔╗ ╔═╗ ┬ ╔╦╗╦ ╦╦═╗╦╦ ╦╔═╗ ╚╗╔╝║╠╩╗║╣ ┌┼─ ║ ╠═╣╠╦╝║╚╗╔╝║╣ ╚╝ ╩╚═╝╚═╝ └┘ ╩ ╩ ╩╩╚═╩ ╚╝ ╚═╝ Checking setup...
Check each item and FIX if missing:
-
Check jq installed:
command -v jq- If missing: Say "⚠️ jq not found. Install it:
(macOS) orbrew install jq
(Linux)"apt install jq - If found: ✓ jq installed
- If missing: Say "⚠️ jq not found. Install it:
-
Check slash commands (skills):
test -d .claude/skills && ls -d .claude/skills/*/ 2>/dev/null | wc -l- If missing or count is 0: Copy from node_modules:
mkdir -p .claude/skills && cp -r node_modules/agentic-loop/.claude/skills/* .claude/skills/ - Then: ✓ Slash commands installed
- If missing or count is 0: Copy from node_modules:
-
Check Ralph initialized:
test -f .ralph/config.json- If missing: Run
npx ralph init - Then: ✓ Ralph initialized
- If missing: Run
-
Check CLAUDE.md:
test -f CLAUDE.md- If missing: Create a basic one:
echo "# Project Guide for Claude" > CLAUDE.md - Then: ✓ CLAUDE.md created
- If missing: Create a basic one:
-
Check Claude Code hooks:
test -f .claude/settings.json && jq -e '.hooks' .claude/settings.json > /dev/null 2>&1- If missing: Install hooks:
npx ralph hooks - Then: ✓ Claude Code hooks installed
- If missing: Install hooks:
-
Check Docker:
test -f docker-compose.yml || test -f docker-compose.yaml || test -f compose.yml- If found:
- Update config:
jq '.docker.enabled = true' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json - Say: "✓ Docker detected - Ralph will run commands inside containers"
- Skip Playwright check (browser verification uses curl in Docker mode)
- Update config:
- If found:
-
Check & Install Playwright (if not Docker):
Check BOTH the npm package AND browser binaries:
# Check npm package npm list playwright 2>/dev/null # Check browser binaries exist (macOS or Linux path) ls ~/Library/Caches/ms-playwright/chromium-* 2>/dev/null || ls ~/.cache/ms-playwright/chromium-* 2>/dev/null- If BOTH exist: Say "✓ Playwright available"
- If either is missing:
Say: "Installing Playwright for browser verification (~150MB)..."
npm install playwright && npx playwright install chromium- If successful: Say "✓ Playwright installed"
- If failed: Say "⚠️ Playwright installation failed. Browser verification will use basic HTTP checks. You can try manually:
"npm install playwright && npx playwright install chromium
Say: "Setup verified! Let me configure Ralph for your project..."
Step 2: Auto-Configure Ralph
Auto-detect and configure project settings:
2a. Detect Project Structure
Check these directories and set
paths in config:
# Check what exists test -d frontend && echo "frontend exists" test -d client && echo "client exists" test -d backend && echo "backend exists" test -d core && echo "core exists" test -d src && echo "src exists"
Based on results, update config:
exists → setfrontend/
topaths.frontend"frontend"
exists → setclient/
topaths.frontend"client"
exists → setbackend/
topaths.backend"backend"
exists → setcore/
topaths.backend"core"- Only
exists → setsrc/
topaths.frontend"."
2b. Detect URLs
Check
.env, .env.example, or docker-compose.yml for port numbers:
grep -h "PORT\|URL\|localhost" .env .env.example docker-compose.yml 2>/dev/null | head -5
Also check
package.json for port in dev script:
cat package.json 2>/dev/null | jq -r '.scripts.dev // empty'
Set URLs based on findings (defaults: frontend=3000, backend=8000):
jq '.urls.frontend = "http://localhost:3000" | .urls.backend = "http://localhost:8000"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json
2c. Detect Commands
Read package.json scripts and update config:
# Get scripts from package.json (check root and frontend/) cat package.json 2>/dev/null | jq -r '.scripts | to_entries[] | "\(.key): \(.value)"' | head -10
Update config with detected commands:
# Example: if package.json has "dev": "next dev" jq '.commands.dev = "npm run dev"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json
For fullstack projects with separate frontend:
jq '.commands.dev = "cd frontend && npm run dev"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json
2d. Detect Test Directory and Patterns
Check for test directories and files:
# Check common test directories for dir in tests test __tests__ spec src/__tests__; do test -d "$dir" && echo "Found test directory: $dir" done # Check for test files (colocated pattern) find . -type f \( -name "*.test.ts" -o -name "*.spec.ts" -o -name "*_test.py" -o -name "test_*.py" -o -name "*_test.exs" -o -name "*_test.go" \) \ -not -path "*/node_modules/*" -not -path "*/.venv/*" 2>/dev/null | head -3
Update config based on findings:
# If tests/ directory found jq '.tests.directory = "tests"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If test/ directory found (Elixir convention) jq '.tests.directory = "test"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If colocated tests found (no test directory, but *.test.ts files exist) jq '.tests.directory = "src"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json
Set test patterns based on project type:
# Node/TypeScript projects jq '.tests.patterns = "*.test.ts,*.test.tsx,*.spec.ts,*.spec.tsx,*.test.js,*.spec.js"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # Python projects jq '.tests.patterns = "*_test.py,test_*.py"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # Elixir projects jq '.tests.patterns = "*_test.exs"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # Go projects jq '.tests.patterns = "*_test.go"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json
If NO tests found:
- Say: "⚠️ No test directory found. Ralph can only verify syntax and API responses."
- Say: "Add tests, or set
in config to silence this warning."checks.requireTests: false
2e. Detect Build & Test Commands
Check for build script in package.json:
cat package.json 2>/dev/null | jq -r '.scripts.build // empty' cat frontend/package.json 2>/dev/null | jq -r '.scripts.build // empty'
Update config with build command:
# If build script exists in root jq '.checks.build = "npm run build"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If build script exists in frontend/ jq '.checks.build = "cd frontend && npm run build"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json
Detect test framework:
test -f playwright.config.ts && echo "playwright" test -f vitest.config.ts && echo "vitest" test -f jest.config.js && echo "jest" test -f manage.py && echo "django" test -f pytest.ini && echo "pytest" test -f pyproject.toml && grep -q "pytest" pyproject.toml && echo "pytest" test -f mix.exs && echo "exunit"
Update config:
# If playwright found jq '.playwright.enabled = true' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If Django found (NO --parallel - it hides errors) jq '.checks.test = "python manage.py test --keepdb"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If Django + Docker jq '.checks.test = "docker compose exec -T web python manage.py test --keepdb"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If pytest found jq '.checks.test = "pytest"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If vitest/jest found jq '.checks.test = "npm test"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json # If ExUnit found (Elixir) jq '.checks.test = "mix test"' .ralph/config.json > .ralph/config.tmp && mv .ralph/config.tmp .ralph/config.json
2f. Show Results
After updating, read the config and show user:
cat .ralph/config.json | jq '{paths, urls, commands, checks, tests}'
Say: "I've auto-configured Ralph:
[Show the detected settings in a nice format]
Edit
.ralph/config.json if anything needs adjusting."
2g. Test Credentials (Optional)
grep -q "^RALPH_TEST_USER=" .env 2>/dev/null && echo "configured" || echo "not set"
If not set, use AskUserQuestion:
- Question: "Add test credentials? Ralph needs these for authenticated endpoints."
- Header: "Test auth"
- Options:
- Yes - "I'll ask for email and password"
- Skip - "Add to .env later"
If "Yes":
- Ask for email, then password
- Save to
(gitignored — never committed):.envtouch .env echo "" >> .env echo "# Test credentials for browser automation" >> .env printf 'RALPH_TEST_USER=%s\n' "$EMAIL" >> .env printf 'RALPH_TEST_PASSWORD=%s\n' "$PASSWORD" >> .env - Say: "Credentials saved to .env (gitignored — never committed to git)"
If "Skip":
- Say: "No problem! Add
andRALPH_TEST_USER
toRALPH_TEST_PASSWORD
when needed.".env
If already set:
- Say: "✓ Test credentials configured"
Step 3: Check for DNA
Check if
~/.claude/DNA.md exists.
If DNA.md does NOT exist:
Use AskUserQuestion:
- Question: "Want to set up your personal preferences? This teaches me how you like to work."
- Header: "DNA setup"
- Options:
- Yes, set up my DNA - "Takes ~2 minutes, makes our collaboration better"
- Skip for now - "You can run /my-dna anytime"
If user selects "Yes, set up my DNA":
- Run the
command inline (execute its full flow)/my-dna - After completing, continue to Step 4
If user selects "Skip for now":
- Say: "No problem! Run
anytime."/my-dna - Continue to Step 4
If DNA.md EXISTS:
Skip this step entirely. Move to Step 4.
Step 4: Quick Reference
Print this:
Quick Reference ─────────────── Workflow: /prd [feature] Brainstorm → PRD npx ralph run Execute autonomously npx ralph status Check progress npx ralph stop Stop after current story Quality: /vibe-check Audit code quality /review Review changes npx ralph check Run verification Other: /my-dna Set preferences /explain Understand code /styleguide Generate design system /vibe-help Full cheatsheet
Say: "You're all set! Run
/prd [your next feature] to get started."