{"id":42803667,"url":"https://github.com/devlikebear/doodoori","last_synced_at":"2026-01-30T03:29:43.041Z","repository":{"id":333396463,"uuid":"1136031002","full_name":"devlikebear/doodoori","owner":"devlikebear","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-19T09:47:12.000Z","size":327,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-19T11:11:23.148Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devlikebear.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-17T00:20:54.000Z","updated_at":"2026-01-19T09:47:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/devlikebear/doodoori","commit_stats":null,"previous_names":["devlikebear/doodoori"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/devlikebear/doodoori","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Fdoodoori","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Fdoodoori/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Fdoodoori/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Fdoodoori/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devlikebear","download_url":"https://codeload.github.com/devlikebear/doodoori/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Fdoodoori/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28898584,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T21:06:44.224Z","status":"online","status_checked_at":"2026-01-30T02:00:06.810Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-30T03:29:42.566Z","updated_at":"2026-01-30T03:29:43.024Z","avatar_url":"https://github.com/devlikebear.png","language":"Rust","readme":"# Doodoori\n\n\u003e Autonomous CLI tool powered by Claude Code for completing goals without user intervention\n\nNamed after **Doodoori (두두리, 豆豆里)**, the Silla dynasty's blacksmith deity - just as the ancient craftsman forged metal into tools, Doodoori forges code through persistent iteration until completion.\n\n## Features\n\n- **Self-Improvement Loop**: Runs Claude Code repeatedly until task completion using the Loop Engine\n- **Model Selection**: Support for haiku, sonnet, and opus model aliases\n- **Budget Tracking**: Track costs with embedded price.toml pricing data\n- **Cost History**: Persistent cost tracking with daily/monthly summaries\n- **State Management**: Task state persistence for resume capability\n- **Resume Support**: Resume interrupted or failed tasks\n- **Secrets Management**: .env file support with keychain integration\n- **Secret Masking**: Automatic masking of API keys and tokens in logs\n- **Configurable**: Project-level configuration via `doodoori.toml`\n- **Dry Run Mode**: Preview what would be executed without running\n- **Permission Control**: YOLO mode, read-only mode, and custom allowed tools\n- **Spec File System**: Markdown-based task specifications with validation\n- **Sandbox Mode**: Docker-based isolated execution environment\n- **Parallel Execution**: Run multiple tasks concurrently with worker pool\n- **Workflow System**: YAML-based complex workflow definitions with DAG scheduling\n- **TUI Dashboard**: Real-time monitoring dashboard (optional feature)\n- **Git Workflow**: Git worktree support, conventional commits, and PR automation\n- **Hooks System**: Execute custom scripts at execution points (pre_run, post_run, on_error, etc.)\n- **Notifications**: Send notifications to Slack, Discord, or webhooks on task events\n- **Watch Mode**: Monitor file changes and automatically run tasks\n- **Output Formatters**: Structured output in JSON, YAML, Markdown for pipelines and scripts\n- **Template System**: Pre-built and custom task templates for common scenarios\n\n## Installation\n\n```bash\n# Build from source\ncargo build --release\n\n# Install globally (installs both 'doodoori' and 'doo' commands)\ncargo install --path .\n\n# Or using make\nmake install\n```\n\n\u003e **Note**: Both `doodoori` and `doo` commands are installed. Use whichever you prefer!\n\n## Quick Start\n\n```bash\n# Run a simple task (use 'doo' or 'doodoori' - they're identical)\ndoo run \"Create a hello world REST API in Rust\"\n\n# Use a specific model\ndoo run -m opus \"Complex architecture design task\"\n\n# Dry run to preview\ndoo run --dry-run \"Refactor the authentication module\"\n\n# With budget limit\ndoo run --budget 5.0 \"Implement user dashboard\"\n\n# YOLO mode (skip all permissions)\ndoo run --yolo \"Quick task with full permissions\"\n\n# Run in Docker sandbox (requires --features sandbox)\ndoo run --sandbox \"Potentially risky operation\"\n\n# Sandbox with network isolation\ndoo run --sandbox --network none \"Completely isolated execution\"\n\n# Run with live TUI dashboard (requires --features dashboard)\ndoo run --dashboard \"Task with real-time monitoring\"\n```\n\n## Sandbox Mode\n\nSandbox mode runs Claude Code inside a Docker container for isolated execution:\n\n```bash\n# Build with sandbox support\ncargo build --release --features sandbox\n```\n\n### First-time Setup (Authentication)\n\nSandbox mode uses a Docker volume for Claude credentials. This is required for subscription-based authentication (macOS Keychain is not accessible from Docker containers):\n\n```bash\n# Login to Claude in sandbox (one-time setup)\ndoodoori sandbox login\n\n# Or with custom options\ndoodoori sandbox login --image doodoori/sandbox:latest --volume my-credentials\n```\n\n### Running in Sandbox\n\n```bash\n# Run in sandbox (after login)\ndoodoori run --sandbox \"Your task here\"\n\n# Custom Docker image\ndoodoori run --sandbox --image my-custom-image:v1 \"Task\"\n\n# Network modes\ndoodoori run --sandbox --network bridge \"Default networking\"\ndoodoori run --sandbox --network none \"No network access\"\ndoodoori run --sandbox --network host \"Host networking\"\n```\n\n### Sandbox Management\n\n```bash\n# Check sandbox status\ndoodoori sandbox status\n\n# Cleanup resources\ndoodoori sandbox cleanup --volumes    # Remove credentials volume\ndoodoori sandbox cleanup --containers # Remove containers\ndoodoori sandbox cleanup --all        # Remove everything\n```\n\n### Build the Sandbox Image\n\n```bash\ndocker build -t doodoori/sandbox:latest -f docker/Dockerfile.sandbox .\n\n# Or using make\nmake docker-build\n```\n\n**Sandbox features:**\n- Isolated filesystem (only mounted workspace)\n- Docker volume-based Claude credentials (secure for subscription auth)\n- Environment variable passing (ANTHROPIC_API_KEY for API key users)\n- Optional network isolation\n- Non-root execution for security\n\n## Parallel Execution\n\nRun multiple tasks concurrently for faster completion:\n\n```bash\n# Run multiple tasks in parallel\ndoodoori parallel --task \"Task A\" --task \"Task B\" --task \"Task C\"\n\n# With specific worker count\ndoodoori parallel -w 5 --task \"Task 1\" --task \"Task 2\"\n\n# With task isolation (separate workspace per task)\ndoodoori parallel --isolate --task \"Task A\" --task \"Task B\"\n\n# Fail-fast mode (stop all on first failure)\ndoodoori parallel --fail-fast --task \"Critical A\" --task \"Critical B\"\n\n# With model override and budget\ndoodoori parallel -m opus --budget 10.0 --task \"Complex A\" --task \"Complex B\"\n\n# Preview execution plan\ndoodoori parallel --dry-run --task \"Task A\" --task \"Task B\"\n```\n\n**Parallel features:**\n- Semaphore-based worker pool for controlled concurrency\n- Task isolation with separate workspaces\n- Real-time progress tracking\n- Aggregated cost and result reporting\n- Fail-fast mode for critical tasks\n- Budget limit across all tasks\n- Git worktree mode for branch-based isolation\n\n## Git Workflow\n\nDoodoori supports Git workflow automation with worktrees for parallel development:\n\n```bash\n# Initialize git workflow in current directory\ndoodoori git init\n\n# Create isolated worktrees for parallel tasks\ndoodoori parallel --git-worktree --task \"Backend API\" --task \"Frontend UI\"\n\n# Each task gets its own worktree and branch:\n# - .doodoori/worktrees/task-1 (branch: task/backend-api)\n# - .doodoori/worktrees/task-2 (branch: task/frontend-ui)\n\n# Run multiple spec files in parallel with git worktrees\ndoodoori parallel --specs \"specs/*.md\" --git-worktree --branch-prefix \"feature/\"\n\n# Example: specs/ folder structure\n# specs/\n# ├── backend-api.md   → worktree: feature/backend-api\n# ├── frontend-ui.md   → worktree: feature/frontend-ui\n# └── database.md      → worktree: feature/database\n\n# Manage worktrees manually\ndoodoori git worktree list\ndoodoori git worktree add my-feature --prefix \"feature/\"\ndoodoori git worktree remove task-123 --delete-branch\ndoodoori git worktree prune\n\n# Create conventional commits\ndoodoori git commit -t feat -m \"add user authentication\" -s api\ndoodoori git commit -t fix -m \"resolve login bug\" --breaking\n\n# Manage pull requests (requires gh CLI)\ndoodoori git pr create --title \"Add authentication\" --draft\ndoodoori git pr list --state open\ndoodoori git pr view 123\ndoodoori git pr merge 123 --squash\n\n# Branch management\ndoodoori git branch list\ndoodoori git branch create feature/new-api --checkout\ndoodoori git branch task \"My New Feature\" --prefix \"feature/\" --checkout\n\n# Check git workflow status\ndoodoori git status\n```\n\n**Git workflow features:**\n- Git worktree support for parallel task isolation\n- Automatic branch naming with sanitization\n- Conventional Commits (feat, fix, refactor, docs, test, chore)\n- GitHub PR automation via gh CLI\n- Branch management with task-friendly naming\n\n## Workflows\n\nDefine complex multi-step workflows with YAML:\n\n```yaml\n# workflow.yaml\nname: \"Full Stack Development\"\n\nglobal:\n  default_model: sonnet\n  max_parallel_workers: 4\n  budget_usd: 20.00\n\nsteps:\n  - name: \"Project Setup\"\n    prompt: \"Initialize TypeScript project\"\n    model: haiku\n    parallel_group: 0\n    budget_usd: 1.00\n\n  - name: \"Backend API\"\n    prompt: \"Implement REST API\"\n    parallel_group: 1\n    depends_on: [\"Project Setup\"]\n    budget_usd: 5.00\n\n  - name: \"Frontend UI\"\n    prompt: \"Create React frontend\"\n    parallel_group: 1\n    depends_on: [\"Project Setup\"]\n    budget_usd: 5.00\n\n  - name: \"Integration\"\n    prompt: \"Connect frontend to backend\"\n    model: haiku\n    parallel_group: 2\n    depends_on: [\"Backend API\", \"Frontend UI\"]\n```\n\n```bash\n# Run a workflow\ndoodoori workflow run workflow.yaml\n\n# Preview execution plan\ndoodoori workflow run --dry-run workflow.yaml\n\n# Validate a workflow\ndoodoori workflow validate workflow.yaml\n\n# Show workflow details\ndoodoori workflow info workflow.yaml\n```\n\n**Workflow features:**\n- YAML-based workflow definitions\n- DAG-based dependency resolution\n- Parallel group execution\n- Per-step model and budget settings\n- Circular dependency detection\n- Execution plan preview\n\n## TUI Dashboard\n\nMonitor running tasks with the TUI dashboard (requires `dashboard` feature):\n\n```bash\n# Build with dashboard support\ncargo build --release --features dashboard\n\n# Launch dashboard\ndoodoori dashboard\n\n# With custom refresh interval\ndoodoori dashboard --refresh 1000\n\n# Show only active tasks\ndoodoori dashboard --active-only\n```\n\n**Dashboard views:**\n- **Tasks tab**: List all tasks with status, iterations, cost\n- **Cost tab**: Monthly/total cost summary with budget alerts\n- **Help tab**: Keyboard shortcuts reference\n- **LiveMonitor**: Real-time task execution monitoring (via EventBus)\n\n**Keyboard shortcuts:**\n\n| Key | Action |\n|-----|--------|\n| `↑/↓` | Navigate task list / Scroll output |\n| `Enter` | View task details |\n| `l` | View task logs |\n| `r` | Restart failed/interrupted task |\n| `k` | Kill running task |\n| `p` | Prune stale tasks |\n| `Tab` | Switch tabs / Cycle log filter |\n| `f` | Toggle auto-scroll (in log view) |\n| `PgUp/PgDn` | Page scroll (in log/live view) |\n| `Esc` | Go back / Stop live monitoring |\n| `q` | Quit |\n\n**Log view features:**\n- Real-time log tailing for running tasks\n- Historical logs for completed tasks\n- Log level filtering (ALL/INFO/ERROR/CLAUDE/TOOL)\n- Syntax highlighting by log level\n\n**LiveMonitor features:**\n- Real-time status, phase, and iteration tracking\n- Live token and cost statistics\n- Streaming text output with auto-scroll\n- Tool execution visualization (start/end with duration)\n- Green border indicates active monitoring\n- Syntax highlighting for tools, iterations, separators\n\n**Budget alerts:**\n- Shows budget limit from `doodoori.toml`\n- Yellow warning at 80% usage\n- Red alert when budget exceeded\n\n## Hooks\n\nExecute custom scripts at various points during task execution:\n\n```bash\n# Create hook scripts\nmkdir -p scripts\n\n# Pre-run hook (runs before task starts)\ncat \u003e scripts/pre_run.sh \u003c\u003c 'EOF'\n#!/bin/bash\necho \"Starting task: $DOODOORI_TASK_ID\"\necho \"Model: $DOODOORI_MODEL\"\n# Run any setup: backup, lint check, etc.\nEOF\n\n# Post-run hook (runs after task completes)\ncat \u003e scripts/post_run.sh \u003c\u003c 'EOF'\n#!/bin/bash\necho \"Task finished with status: $DOODOORI_STATUS\"\necho \"Total cost: $DOODOORI_COST_USD\"\n# Run any cleanup: notifications, deploy, etc.\nEOF\n\n# On-error hook\ncat \u003e scripts/on_error.sh \u003c\u003c 'EOF'\n#!/bin/bash\necho \"Error occurred: $DOODOORI_ERROR\"\n# Send notification, rollback, etc.\nEOF\n\nchmod +x scripts/*.sh\n```\n\nConfigure hooks in `doodoori.toml`:\n\n```toml\n[hooks]\nenabled = true\ntimeout_secs = 60\npre_run = \"scripts/pre_run.sh\"\npost_run = \"scripts/post_run.sh\"\non_error = \"scripts/on_error.sh\"\non_iteration = \"scripts/on_iteration.sh\"\non_complete = \"scripts/on_complete.sh\"\n```\n\n**Available hooks:**\n- `pre_run`: Before task execution starts\n- `post_run`: After task execution completes (success or failure)\n- `on_error`: When an error occurs\n- `on_iteration`: After each loop iteration\n- `on_complete`: When task completes successfully\n\n**Environment variables passed to hooks:**\n- `DOODOORI_TASK_ID`: Unique task identifier\n- `DOODOORI_PROMPT`: Task prompt (truncated if long)\n- `DOODOORI_MODEL`: Model being used\n- `DOODOORI_ITERATION`: Current iteration number\n- `DOODOORI_TOTAL_ITERATIONS`: Maximum iterations\n- `DOODOORI_COST_USD`: Current cost in USD\n- `DOODOORI_STATUS`: Task status (starting, running, completed, error)\n- `DOODOORI_ERROR`: Error message (for on_error hook)\n- `DOODOORI_WORKING_DIR`: Working directory\n- `DOODOORI_HOOK_TYPE`: Type of hook being executed\n\n**Disable hooks:**\n\n```bash\n# Via CLI flag\ndoodoori run --no-hooks \"Your task\"\n\n# Via config\n[hooks]\nenabled = false\n```\n\n## Notifications\n\nSend notifications to Slack, Discord, or any webhook when tasks start, complete, or fail:\n\n```bash\n# Enable notifications via CLI (uses doodoori.toml config)\ndoodoori run --notify \"Your task\"\n\n# Use a specific webhook URL\ndoodoori run --notify \"https://hooks.slack.com/services/...\" \"Your task\"\n\n# Disable notifications\ndoodoori run --no-notify \"Your task\"\n```\n\nConfigure notifications in `doodoori.toml`:\n\n```toml\n[notifications]\nenabled = true\n# Slack webhook\nslack_webhook = \"https://hooks.slack.com/services/...\"\n# Discord webhook\ndiscord_webhook = \"https://discord.com/api/webhooks/...\"\n# Generic webhook\nwebhook_url = \"https://your-api.com/webhook\"\n# Events to notify on: started, completed, error, budget_exceeded, max_iterations\nevents = [\"completed\", \"error\"]\n```\n\n**Notification features:**\n- **Slack**: Rich message formatting with attachments (color-coded by status)\n- **Discord**: Embed messages with fields for task details\n- **Generic Webhook**: JSON POST payload to any endpoint\n- Auto-detection of webhook type from URL\n\n**Notification payload:**\n- Task ID, prompt, model\n- Iterations, cost, duration\n- Status (started, completed, error, etc.)\n- Error message (if applicable)\n- Timestamp\n\n## Watch Mode\n\nMonitor file changes and automatically run tasks:\n\n```bash\n# Watch for changes and run tests\ndoodoori watch \"Run tests and fix any errors\" --pattern \"src/**/*.rs\"\n\n# Watch with multiple patterns\ndoodoori watch -p \"src/**/*.rs\" -p \"tests/**/*.rs\" \"Run cargo test\"\n\n# Use a spec file\ndoodoori watch --spec task.md --pattern \"src/**/*.rs\"\n\n# Clear screen before each run\ndoodoori watch --clear \"Build and test\" -p \"**/*.rs\"\n\n# Run task immediately on start\ndoodoori watch --run-initial \"Run tests\" -p \"src/**/*.rs\"\n\n# Custom debounce and budget\ndoodoori watch --debounce 1000 --budget 2.0 \"Lint and format\" -p \"**/*.rs\"\n\n# Ignore additional patterns\ndoodoori watch -i \"*.tmp\" -i \"build/**\" \"Build project\" -p \"**/*\"\n```\n\n**Watch options:**\n- `--pattern` / `-p`: Glob patterns to watch (default: `**/*`)\n- `--dir` / `-d`: Directory to watch (default: `.`)\n- `--ignore` / `-i`: Patterns to ignore (default: target, .git, .doodoori, node_modules)\n- `--debounce`: Debounce duration in ms (default: 500)\n- `--clear`: Clear screen before each run\n- `--run-initial`: Run task immediately on start\n- `--no-recursive`: Watch only top-level directory\n- `--model`, `--max-iterations`, `--budget`: Task settings\n- `--yolo`, `--readonly`: Permission settings\n\n**Default ignored patterns:**\n- `target/**`\n- `.git/**`\n- `.doodoori/**`\n- `node_modules/**`\n- `*.log`\n\n## Output Formatters\n\nOutput structured data in various formats for integration with other tools:\n\n```bash\n# JSON output (compact)\ndoodoori run \"Build project\" --format json\n\n# Pretty JSON output\ndoodoori run \"Build project\" --format json-pretty\n\n# YAML output\ndoodoori run \"Build project\" --format yaml\n\n# Markdown output (for reports)\ndoodoori run \"Build project\" --format markdown\n\n# Output to file\ndoodoori run \"Build project\" --format json --output result.json\n\n# Parallel execution with structured output\ndoodoori parallel --task \"A\" --task \"B\" --format yaml\n\n# Workflow output\ndoodoori workflow run workflow.yaml --format json-pretty\n\n# Cost summary as YAML\ndoodoori cost --format yaml\n```\n\n**Supported formats:**\n- `text` (default): Human-readable text output\n- `json`: Compact JSON for parsing\n- `json-pretty`: Formatted JSON for readability\n- `yaml`: YAML format for configuration files\n- `markdown`: Markdown for documentation and reports\n\n**Supported commands:**\n- `doodoori run`\n- `doodoori parallel`\n- `doodoori workflow run`\n- `doodoori cost`\n\n## Templates\n\nUse pre-built or custom templates for common development tasks:\n\n```bash\n# List available templates\ndoodoori template list\n\n# Filter by category\ndoodoori template list --category scaffold\n\n# Filter by tag\ndoodoori template list --tag rust\n\n# Show template details\ndoodoori template show api-endpoint\n\n# Use a template with variables\ndoodoori template use add-tests --var file=src/main.rs\n\n# Run with a template\ndoodoori run --template api-endpoint --var resource=users\n\n# Run with template (short form)\ndoodoori run -t add-tests --var file=src/utils.rs\n\n# Dry-run to preview rendered prompt\ndoodoori run -t fix-bug --var description=\"Login fails\" --dry-run\n\n# Override template defaults\ndoodoori run -t api-endpoint --var resource=posts --model opus --budget 5.0\n```\n\n**Built-in templates:**\n\n| Template | Category | Description |\n|----------|----------|-------------|\n| api-endpoint | scaffold | Create a REST API endpoint with CRUD operations |\n| react-component | scaffold | Create a React component with TypeScript |\n| cli-command | scaffold | Create a new CLI subcommand |\n| extract-function | refactor | Extract code into a separate function |\n| clean-imports | refactor | Clean up and organize imports |\n| add-tests | test | Add unit tests for a file or module |\n| integration-test | test | Add integration tests |\n| fix-bug | fix | Fix a bug in the codebase |\n| add-docs | docs | Add documentation to code |\n\n**Custom templates:**\n\nCreate your own templates in `~/.doodoori/templates/` (user) or `.doodoori/templates/` (project):\n\n```yaml\n# ~/.doodoori/templates/my-template.yaml\nname: my-template\ndescription: My custom template\ncategory: custom\ntags: [custom, example]\ndefault_model: sonnet\nvariables:\n  - name: target\n    description: Target file or module\n    required: true\n  - name: style\n    description: Coding style\n    default: \"clean code\"\nprompt: |\n  Apply {style} principles to {target}.\n\n  Requirements:\n  - Follow existing patterns\n  - Add appropriate tests\n```\n\n## Configuration\n\nCreate a `doodoori.toml` in your project root:\n\n```toml\n# Default model: haiku, sonnet, or opus\ndefault_model = \"sonnet\"\n\n# Maximum iterations for the loop engine\nmax_iterations = 50\n\n# Budget limit in USD (optional)\n# budget_limit = 10.0\n\n# Enable YOLO mode by default\nyolo_mode = false\n\n[git]\nenabled = true\nauto_branch = true\nauto_commit = true\n\n[parallel]\nworkers = 3\n\n[hooks]\nenabled = true\ntimeout_secs = 60\n# pre_run = \"scripts/pre_run.sh\"\n# post_run = \"scripts/post_run.sh\"\n# on_error = \"scripts/on_error.sh\"\n\n[notifications]\nenabled = false\n# slack_webhook = \"https://hooks.slack.com/services/...\"\n# discord_webhook = \"https://discord.com/api/webhooks/...\"\n# webhook_url = \"https://your-api.com/webhook\"\nevents = [\"completed\", \"error\"]\n```\n\n## CLI Commands\n\n\u003e **Tip**: You can use `doo` instead of `doodoori` for all commands below.\n\n| Command | Description |\n|---------|-------------|\n| `doo run \u003cprompt\u003e` | Run a task with Claude Code |\n| `doodoori run --spec \u003cfile.md\u003e` | Run from a spec file |\n| `doodoori run --sandbox \u003cprompt\u003e` | Run in Docker sandbox |\n| `doodoori run --dashboard \u003cprompt\u003e` | Run with live TUI dashboard |\n| `doodoori run --dry-run \u003cprompt\u003e` | Preview execution plan |\n| `doodoori parallel --task \"A\" --task \"B\"` | Run tasks in parallel |\n| `doodoori parallel --specs \"*.md\"` | Run spec files as parallel tasks |\n| `doodoori parallel --specs \"*.md\" --git-worktree` | Specs with git worktrees |\n| `doodoori parallel --isolate --task \"A\"` | Parallel with task isolation |\n| `doodoori parallel --dry-run --task \"A\"` | Preview parallel execution plan |\n| `doodoori workflow run \u003cfile.yaml\u003e` | Run a workflow |\n| `doodoori workflow run --dry-run \u003cfile\u003e` | Preview workflow execution |\n| `doodoori workflow validate \u003cfile.yaml\u003e` | Validate a workflow |\n| `doodoori workflow info \u003cfile.yaml\u003e` | Show workflow details |\n| `doodoori dashboard` | Launch TUI dashboard |\n| `doodoori spec \u003cdescription\u003e` | Generate a spec file |\n| `doodoori spec --validate \u003cfile.md\u003e` | Validate a spec file |\n| `doodoori spec --info \u003cfile.md\u003e` | Show parsed spec information |\n| `doodoori sandbox login` | Login to Claude in sandbox |\n| `doodoori sandbox status` | Show sandbox status |\n| `doodoori sandbox cleanup` | Clean up sandbox resources |\n| `doodoori resume --list` | List resumable tasks |\n| `doodoori resume \u003ctask-id\u003e` | Resume an interrupted task |\n| `doodoori cost` | View cost summary |\n| `doodoori cost --history` | View full cost history |\n| `doodoori cost --daily` | View daily cost summary |\n| `doodoori secret set \u003ckey\u003e` | Store secret in keychain |\n| `doodoori secret get \u003ckey\u003e` | Retrieve secret from keychain |\n| `doodoori secret list` | List stored secrets |\n| `doodoori git init` | Initialize git workflow |\n| `doodoori git status` | Show git workflow status |\n| `doodoori git worktree list` | List worktrees |\n| `doodoori git worktree add \u003cname\u003e` | Create worktree for task |\n| `doodoori git worktree remove \u003cid\u003e` | Remove a worktree |\n| `doodoori git commit -t \u003ctype\u003e -m \u003cmsg\u003e` | Create conventional commit |\n| `doodoori git pr create` | Create pull request |\n| `doodoori git pr list` | List pull requests |\n| `doodoori git branch list` | List branches |\n| `doodoori watch \u003cprompt\u003e` | Watch files and run task on changes |\n| `doodoori watch --spec \u003cfile.md\u003e` | Watch with spec file |\n| `doodoori watch -p \"*.rs\" \u003cprompt\u003e` | Watch specific patterns |\n| `doodoori config` | Show configuration |\n| `doodoori price` | Show model pricing |\n\n## Model Pricing\n\n\u003e **Reference**: https://platform.claude.com/docs/ko/about-claude/models/overview\n\nDoodoori uses Claude Code CLI aliases (`haiku`, `sonnet`, `opus`) which automatically resolve to the best available model.\n\n| Model | Input/MTok | Output/MTok | Best For |\n|-------|------------|-------------|----------|\n| Haiku 4.5 | $1.00 | $5.00 | Quick tasks, simple operations |\n| Sonnet 4.5 | $3.00 | $15.00 | Balanced performance, general use |\n| Opus 4.5 | $5.00 | $25.00 | Complex reasoning, high-quality output |\n\nPricing data is stored in `price.toml` and can be updated from the official documentation.\n\n## Spec Files\n\nSpec files are markdown documents that define tasks for Doodoori:\n\n```markdown\n# Task: Build REST API\n\n## Objective\nCreate a REST API for todo management\n\n## Model\nsonnet\n\n## Requirements\n- [ ] GET /todos endpoint\n- [ ] POST /todos endpoint\n- [ ] DELETE /todos endpoint\n\n## Constraints\n- Use Rust and Axum framework\n- Include error handling\n\n## Completion Criteria\nAll endpoints working with tests\n\n## Max Iterations\n30\n```\n\nGenerate a spec file:\n```bash\ndoodoori spec \"Build a REST API for todos\" -o api-spec.md\n```\n\nValidate a spec file:\n```bash\ndoodoori spec --validate api-spec.md\n```\n\n## Roadmap\n\n- [x] Phase 1: MVP - Basic execution with Loop Engine\n- [x] Phase 2: Spec file system with markdown parsing\n- [x] Phase 3: Sandbox mode with Docker\n- [x] Phase 4: State management, secrets, and resume\n- [x] Phase 5: Parallel execution\n- [x] Phase 6: Workflows and TUI dashboard\n- [x] Phase 7: Git workflow and worktree support\n- [x] Phase 8: Loop Engine integration (run, resume, parallel, workflow)\n- [x] Phase 9: Hooks system (pre_run, post_run, on_error, on_iteration, on_complete)\n- [x] Phase 10: Notifications (Slack, Discord, Webhook)\n- [x] Phase 11: Watch Mode (file monitoring, auto-run)\n- [x] Phase 12: Output Formatters (JSON, YAML, Markdown output)\n- [x] Phase 13: Template System (pre-built and custom task templates)\n- [x] Phase 14: Enhanced Dashboard (task details, logs, kill/prune/restart, filtering, budget alerts)\n- [x] Phase 15: Real-time Event System (EventBus broadcasting, LiveMonitor view, live execution)\n\n## License\n\nMIT\n\n## Author\n\ndevlikebear \u003cdevlikebear@gmail.com\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlikebear%2Fdoodoori","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevlikebear%2Fdoodoori","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlikebear%2Fdoodoori/lists"}