From Toru Claude Agents
Takes a spec and autonomously plans, builds, tests, and audits until objective quality gates pass. Use when you have clear requirements and want to return to working software.
How this skill is triggered — by the user, by Claude, or both
Slash command
/toru-claude-agents:dev-full-autoThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Spec in. Production-ready software out. I make decisions, you review results.
Spec in. Production-ready software out. I make decisions, you review results.
"The best code review is reviewing working software, not plans."
This skill implements the Ralph Loop paradigm - continuous iteration until machine-verifiable completion, not subjective "I think I'm done."
Traditional AI assistance fails because:
Ralph Loop solves this:
┌─────────────────────────────────────────────┐
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Build │───▶│ Check │───▶│ Pass? │ │
│ └─────────┘ └─────────┘ └────┬────┘ │
│ ▲ │ │
│ │ No │ │
│ └─────────────────────────────┘ │
│ │ Yes │
│ ┌──────▼────┐ │
│ │ DONE │ │
│ └───────────┘ │
└─────────────────────────────────────────────┘
I don't exit because I think I'm done. I exit when:
You give me a spec. I build it. I test it. I secure it. I document it. You come back to software that works.
| Rule | Detail |
|---|---|
| Commits | Local branches only. You push when ready. |
| Duration | No limit. I work until done or blocked. |
| Decisions | I make them. I document them. You review after. |
| Quality | Near-production or production-ready. No garbage. |
| Blockers | Hard stop → Telegram you → wait for response |
mcp__megg__context)If spec is unclear but I can make reasonable assumptions → proceed, document assumptions. If spec is fundamentally ambiguous → Telegram you, wait.
Delegate to Garry:
"Garry, plan this implementation:
{spec}
Consider:
- Existing architecture
- Minimal changes needed
- Test strategy
- Risk areas
Give me a concrete plan I can execute."
I review Garry's plan. If sound → proceed. If concerns → iterate with Garry.
Create feature branch:
git checkout -b feat/{feature-name}
Delegate to Bob:
"Bob, implement this:
{plan from Garry}
Rules:
- Write tests as you go
- Commit logical chunks
- If stuck on something for 3 attempts, flag it
- Keep it simple"
Bob builds iteratively:
Run full QA (invoke dev-qa internally):
If failures → Bob fixes → revalidate. Loop until clean.
Run security audit (invoke dev-security internally):
"Sentinel, audit this branch for security issues.
Focus on:
- The changes we made
- Any new attack surfaces
- Dependencies we added
CRITICAL and HIGH must be zero."
If issues found → Bob fixes → Sentinel re-audits. Loop until clean.
I write documentation myself. No templates, no ceremony. Just useful docs.
What I document:
Where:
docs/ folder if significant featureFinal checks:
Create session summary:
# Dev Full Auto Session: {feature}
## What Was Built
{summary}
## Commits
{git log --oneline}
## Decisions Made
1. {decision}: {rationale}
2. {decision}: {rationale}
## Tests
- {X} tests added
- All passing
## Security
- Sentinel audit: PASSED
- No CRITICAL/HIGH issues
## Documentation
- {list of docs created/updated}
## Ready For
- Your review
- Push to remote
- PR creation
Save to: ~/.claude/dev-cycles/completed/{project}--{branch}--{timestamp}.md
When I hit a hard blocker (not something I can figure out):
Save current state:
git stash # if uncommitted work
## BLOCKED: {title}
**What I was doing**: {context}
**What's blocking me**: {specific issue}
**What I need from you**: {specific ask}
**Options I see**: {if any}
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="🚧 Dev Full Auto BLOCKED
Project: $(basename $(pwd))
Branch: $(git branch --show-current)
Issue: {brief description}
Need: {what I need from you}
Reply here or come back to Claude Code."
I stop. Session pauses. When you respond, we continue.
| Agent | Role in Full Auto |
|---|---|
| Garry | Plans architecture, validates completeness |
| Bob | Builds code, fixes issues, writes tests |
| Sentinel | Security audits, finds vulnerabilities |
| Arlo | Validates data logic (when applicable) |
| Scout | Explores codebase, gathers context |
When I need to make a decision:
User: /dev-full-auto Add user authentication with JWT
Me: Starting autonomous dev session...
Loading context...
✓ Project: my-app
✓ Stack: Node.js + Express
✓ Existing auth: none
Planning with Garry...
✓ Plan approved: JWT auth with refresh tokens
Building with Bob...
✓ Auth middleware created
✓ Login/logout endpoints
✓ Token refresh logic
✓ 12 tests written
Validating...
✓ All tests pass
✓ Lint clean
✓ Build works
Security audit with Sentinel...
⚠ Found: Token stored in localStorage
→ Bob fixing: Move to httpOnly cookie
✓ Re-audit passed
Documenting...
✓ docs/authentication.md created
✓ README updated
Session complete!
Branch: feat/user-auth
Commits: 5
Tests: 12 added, all passing
Security: PASSED
Ready for your review. See session summary at:
~/.claude/dev-cycles/completed/my-app--feat-user-auth--20260124.md
When you respond to a blocker:
User: [responds to Telegram] Use OAuth instead of custom JWT
Me: Got it. Switching approach...
Updating plan with Garry...
Bob implementing OAuth flow...
[continues autonomously]
For Telegram alerts:
TELEGRAM_BOT_TOKEN=... # your bot token from @BotFather
TELEGRAM_CHAT_ID=... # your chat/topic ID
The Ralph Loop exits ONLY when ALL conditions are objectively verified:
| Condition | Verification | Command |
|---|---|---|
| Tests pass | Exit code 0 | npm test / cargo test / pytest |
| Lint clean | Exit code 0 | npm run lint / cargo clippy |
| Build works | Exit code 0 | npm run build / cargo build |
| Security clean | 0 CRITICAL, 0 HIGH | sentinel audit |
| Types check | Exit code 0 | tsc --noEmit / mypy |
These are NOT subjective. They're machine-verifiable. No "looks good to me."
| Condition | Verifier | Pass Criteria |
|---|---|---|
| Code quality | Bob | No CRITICAL issues flagged |
| Completeness | Garry | Requirements checklist met |
| Data logic | Arlo | Calculations verified (if applicable) |
| Docs exist | Me | Files created, not empty |
If I can't hit this bar, I tell you why and stop.
Unlike conversation context that gets lost, external state persists:
Git History → I see my previous commits, can build on them
Test Results → I know what passed/failed last run
File System → I see the actual code state
Lint Output → I know exactly what to fix
Build Logs → I see the real errors
Each iteration, I read this external state. No context window limits. No "forgetting" what I did. The filesystem IS my memory.
npx claudepluginhub toruai/toru-claude-agents --plugin toru-claude-agentsEnforces a gated Spec → Plan → Build → Test → Review → Ship lifecycle for multi-file features and projects, preventing AI coding agents from skipping specification and verification steps.
Takes a brief product idea and autonomously handles requirements analysis, design, parallel implementation, QA cycling, and multi-perspective validation to produce working code.
Runs Ralph Loop autonomous dev loop: reads PRD/checklist, implements/tests/commits one item per session via Stop Hook, auto-branches/ignores state. Trigger: autodev, ralph loop for overnight progress.