{"id":34599129,"url":"https://github.com/flyingrobots/tasks-bash","last_synced_at":"2026-05-19T16:02:14.380Z","repository":{"id":325362718,"uuid":"1100778830","full_name":"flyingrobots/TASKS-bash","owner":"flyingrobots","description":"Task Are Sequenced Key Steps - bash edition","archived":false,"fork":false,"pushed_at":"2025-11-21T00:18:40.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-21T00:19:01.457Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flyingrobots.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-11-20T18:40:13.000Z","updated_at":"2025-11-20T23:57:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/flyingrobots/TASKS-bash","commit_stats":null,"previous_names":["flyingrobots/tasks-bash"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/flyingrobots/TASKS-bash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2FTASKS-bash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2FTASKS-bash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2FTASKS-bash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2FTASKS-bash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flyingrobots","download_url":"https://codeload.github.com/flyingrobots/TASKS-bash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyingrobots%2FTASKS-bash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28002250,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"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":"2025-12-24T12:07:28.611Z","updated_at":"2025-12-24T12:07:38.003Z","avatar_url":"https://github.com/flyingrobots.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# T.A.S.K.S.\n\n![task-bash-social](https://github.com/user-attachments/assets/c06b77db-9e1c-4cea-adad-785097ca58b1)\n\n**T**asks **A**re **S**equenced **K**ey **S**teps is a file-system-based autonomous agent runner. It turns a goal into a dependency-ordered DAG, manages tasks via the filesystem, and drives parallel LLM workers to get the work done.\n\n\u003e [!WARNING]\n\u003e This gives an LLM write access to your workspace. Run inside git (or a Docker container that copies the repo in) so you can revert if things go sideways.\n\n\u003e [!CAUTION]\n\u003e USE AT YOUR OWN RISK. If you run this software, you're unleashing the swarm. Not one LLM going buck wild. Unsupervised. Multiple LLMs.  \n\u003e 🥀\n\u003e May Claude have mercy on your repo.\n\n## Architecture (Filesystem = Database)\n\n- **setup.sh (Bootstrapper)**: configures env vars and creates the `.tasks/` directory scaffold.\n- **1_architect.sh (Architect)**: scans the project and prompts an LLM to emit a JSON DAG.\n- **2_seeder.sh (Seeder)**: converts the DAG into per-task JSON files, placing them in `open/` or `blocked/` based on dependencies.\n- **3_overlord.sh (Overlord)**: main loop that unblocks tasks when deps close, throttles workers, and spawns minions.\n- **4_minion.sh (Minion)**: runs one task via LLM, updates state, and logs output.\n- **5_status.sh (Dashboard)**: live view of the state machine.\n- **6_revive.sh (Reviver)**: moves failed tasks back to `open/` for retry.\n\n## Prerequisites\n\n- Bash (macOS/Linux/WSL)\n- `jq` for JSON parsing\n  - macOS: `brew install jq`\n  - Linux: `sudo apt-get install jq`\n- LLM CLI tool: Default is Anthropic's **Claude Code CLI** (install \u0026 configure per the official docs: https://docs.anthropic.com/en/docs/claude-code/overview). Any executable that accepts the prompt as the final argument and prints to stdout will also work.\n\n## Quick Start\n\n```bash\n# 0) Make the task scripts executable (avoid chmod-ing everything)\nchmod +x setup.sh 1_architect.sh 2_seeder.sh 3_overlord.sh 4_minion.sh 5_status.sh 6_revive.sh\n\n# 1) Initialize directories and env vars\n./setup.sh\n\n# 2) Generate a plan (DAG)\n./1_architect.sh \"Refactor auth to use JWTs\"\n\n# 3) Seed tasks\n./2_seeder.sh\n\n# 4) Monitor (separate terminal)\n./5_status.sh\n\n# 5) Unleash the swarm\n./3_overlord.sh\n```\n\n## State Machine (`.tasks/`)\n\n```\n.tasks/\n├── manifest/        # The Architect's original plan (dag.json)\n├── prompts/         # System prompts generated for the LLMs\n├── blocked/         # 🛑 Tasks waiting for dependencies to complete\n├── open/            # 🟢 Tasks ready to be picked up by workers\n├── claimed/         # 🚀 Tasks currently being executed (Mutex Lock)\n│   └── w_\u003cid\u003e/      #    (Atomic directory per active worker)\n├── closed/          # 🏁 Successfully completed tasks\n├── dead/            # 💀 Tasks that failed (exit code != 0)\n└── logs/            # 📄 Stdout/Stderr logs for every execution\n```\n\n## Configuration \u0026 LLM Swaps\n\nAll config lives in `setup.sh`. You can override via env vars before running:\n\n- `MAX_WORKERS` (default `4`): cap concurrent workers.\n- `LLM_PLANNER_CMD` (default `claude -p`): planner that outputs JSON.\n- `LLM_WORKER_CMD` (default `claude --dangerously-skip-permissions`): worker used for edits.\n\n\u003e [!CAUTION]\n\u003e **About `--dangerously-skip-permissions`**: This flag bypasses Claude Code's permission prompts for file modifications, allowing autonomous agents to edit files without user confirmation. **Risks**: Unvetted code changes, potential data corruption, or unintended modifications. **Use only in**:\n\u003e - Trusted development environments with version control (git)\n\u003e - Non-production workspaces where changes can be safely reverted\n\u003e - Contexts where you've reviewed the generated plan (`dag.json`) beforehand\n\u003e\n\u003e **Recommended mitigations**: Always run inside a git repo, review logs in `.tasks/logs/`, and inspect diffs before committing. For production use, remove this flag and handle confirmations manually, or use a sandboxed container.\n\nExample using a Python OpenAI wrapper:\n\n```python\n# gpt_runner.py\nimport sys\nprompt = sys.argv[-1]\n# ... call OpenAI ...\nprint(response_content)\n```\n\n```bash\nexport LLM_PLANNER_CMD=\"python3 gpt_runner.py\"\nexport LLM_WORKER_CMD=\"python3 gpt_runner.py\"\n```\n\n## Components At a Glance\n\n| Script          | Role                                      |\n|-----------------|-------------------------------------------|\n| setup.sh        | Global config; creates directory scaffold |\n| 1_architect.sh  | Builds context and writes `dag.json`      |\n| 2_seeder.sh     | DAG -\u003e per-task files in .tasks           |\n| 3_overlord.sh   | Dependency resolution + worker spawning   |\n| 4_minion.sh     | Executes a single task via LLM            |\n| 5_status.sh     | Dashboard for current state               |\n| 6_revive.sh     | Moves `dead/` tasks back to `open/`       |\n\n## Troubleshooting\n\n- **System looks stuck**: run `./5_status.sh`.\n  - If tasks sit in `blocked/`, check that their deps are in `closed/`; restart `./3_overlord.sh` if needed.\n  - If tasks pile in `dead/`, inspect `.tasks/logs/\u003ctask_id\u003e.log`.\n- **Revive failed tasks**: `./6_revive.sh` moves `dead/` -\u003e `open/`.\n- **Plans lack context**: bump scan depth in `1_architect.sh` (`find . -maxdepth 6 ...`).\n\n## Testing\n\nDockerized Bats suite lives in `tests/`. Run everything in isolation:\n\n```bash\n./run-tests.sh\n```\n\n---\n\n## License\n\nMIT\n_© 2025 James Ross • [Flying•Robots](https://github.com/flyingrobots)_\n_All Rights Reserved_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyingrobots%2Ftasks-bash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflyingrobots%2Ftasks-bash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyingrobots%2Ftasks-bash/lists"}