Skip to content
Back to skills

Ralph Mode

ASecurity

Imported skill ralph_mode from langchain

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 11, 2026
ai-agentspythongitapibackend

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned September 11, 2026

npx -y skills add bitwikiorg/skills.md --skill ralph_mode --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ralph Mode?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ralph Mode
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bitwikiorg-ralph-mode/badge)](https://www.skillsdirectory.com/skills/bitwikiorg-ralph-mode)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
description: Imported skill ralph_mode from langchain
name: ralph_mode
signature: 8cf9c1b3e441801f5c2243d0ecc49e582f2afa156e4f468cfabbfd6d607e716b
source: /a0/tmp/skills_research/langchain/examples/ralph_mode/ralph_mode.py
---

#!/usr/bin/env python3
"""
Ralph Mode - Autonomous looping for DeepAgents

Ralph is an autonomous looping pattern created by Geoff Huntley.
Each loop starts with fresh context. The filesystem and git serve as memory.

Usage:
    uv pip install deepagents-cli
    python ralph_mode.py "Build a Python course. Use git."
    python ralph_mode.py "Build a REST API" --iterations 5
"""
import warnings
warnings.filterwarnings("ignore", message="Core Pydantic V1 functionality")

import argparse
import asyncio
import tempfile
from pathlib import Path

from deepagents_cli.agent import create_cli_agent
from deepagents_cli.config import console, COLORS, SessionState, create_model
from deepagents_cli.execution import execute_task
from deepagents_cli.ui import TokenTracker


async def ralph(task: str, max_iterations: int = 0, model_name: str = None):
    """Run agent in Ralph loop with beautiful CLI output."""
    work_dir = tempfile.mkdtemp(prefix="ralph-")
    
    model = create_model(model_name)
    agent, backend = create_cli_agent(
        model=model,
        assistant_id="ralph",
        tools=[],
        auto_approve=True,
    )
    session_state = SessionState(auto_approve=True)
    token_tracker = TokenTracker()
    
    console.print(f"\n[bold {COLORS['primary']}]Ralph Mode[/bold {COLORS['primary']}]")
    console.print(f"[dim]Task: {task}[/dim]")
    console.print(f"[dim]Iterations: {'unlimited (Ctrl+C to stop)' if max_iterations == 0 else max_iterations}[/dim]")
    console.print(f"[dim]Working directory: {work_dir}[/dim]\n")
    
    iteration = 1
    try:
        while max_iterations == 0 or iteration <= max_iterations:
            console.print(f"\n[bold cyan]{'='*60}[/bold cyan]")
            console.print(f"[bold cyan]RALPH ITERATION {iteration}[/bold cyan]")
            console.print(f"[bold cyan]{'='*60}[/bold cyan]\n")
            
            iter_display = f"{iteration}/{max_iterations}" if max_iterations > 0 else str(iteration)
            prompt = f"""## Iteration {iter_display}

Your previous work is in the filesystem. Check what exists and keep building.

TASK:
{task}

Make progress. You'll be called again."""

            await execute_task(
                prompt,
                agent,
                "ralph",
                session_state,
                token_tracker,
                backend=backend,
            )
            
            console.print(f"\n[dim]...continuing to iteration {iteration + 1}[/dim]")
            iteration += 1
            
    except KeyboardInterrupt:
        console.print(f"\n[bold yellow]Stopped after {iteration} iterations[/bold yellow]")
    
    # Show created files
    console.print(f"\n[bold]Files created in {work_dir}:[/bold]")
    for f in sorted(Path(work_dir).rglob("*")):
        if f.is_file() and ".git" not in str(f):
            console.print(f"  {f.relative_to(work_dir)}", style="dim")


def main():
    parser = argparse.ArgumentParser(
        description="Ralph Mode - Autonomous looping for DeepAgents",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
Examples:
  python ralph_mode.py "Build a Python course. Use git."
  python ralph_mode.py "Build a REST API" --iterations 5
  python ralph_mode.py "Create a CLI tool" --model claude-haiku-4-5-20251001
        """
    )
    parser.add_argument("task", help="Task to work on (declarative, what you want)")
    parser.add_argument("--iterations", type=int, default=0, help="Max iterations (0 = unlimited, default: unlimited)")
    parser.add_argument("--model", help="Model to use (e.g., claude-haiku-4-5-20251001)")
    args = parser.parse_args()

    try:
        asyncio.run(ralph(args.task, args.iterations, args.model))
    except KeyboardInterrupt:
        pass  # Clean exit on Ctrl+C


if __name__ == "__main__":
    main()

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.