{"id":50824039,"url":"https://github.com/lingjiuu/hermes-dynamic-workflows","last_synced_at":"2026-06-13T17:01:18.857Z","repository":{"id":363224782,"uuid":"1259872947","full_name":"lingjiuu/hermes-dynamic-workflows","owner":"lingjiuu","description":"Dynamic Workflows for hermes","archived":false,"fork":false,"pushed_at":"2026-06-08T00:41:13.000Z","size":315,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-08T02:22:23.932Z","etag":null,"topics":["dynamic-workflows","hermes-agent","hermes-plugin","multi-agent","nous-research","python","workflow-orchestration"],"latest_commit_sha":null,"homepage":"","language":"Python","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/lingjiuu.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":"2026-06-05T00:20:30.000Z","updated_at":"2026-06-08T00:41:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lingjiuu/hermes-dynamic-workflows","commit_stats":null,"previous_names":["lingjiuu/hermes-dynamic-workflows"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/lingjiuu/hermes-dynamic-workflows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingjiuu%2Fhermes-dynamic-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingjiuu%2Fhermes-dynamic-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingjiuu%2Fhermes-dynamic-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingjiuu%2Fhermes-dynamic-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lingjiuu","download_url":"https://codeload.github.com/lingjiuu/hermes-dynamic-workflows/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingjiuu%2Fhermes-dynamic-workflows/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34292326,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"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":["dynamic-workflows","hermes-agent","hermes-plugin","multi-agent","nous-research","python","workflow-orchestration"],"created_at":"2026-06-13T17:00:16.789Z","updated_at":"2026-06-13T17:01:18.851Z","avatar_url":"https://github.com/lingjiuu.png","language":"Python","funding_links":[],"categories":["Research, Multi-Agent, and Domain Projects","Skills \u0026 Plugins"],"sub_categories":["Domain-specific applications","Plugins"],"readme":"# Hermes Dynamic Workflows\n\n\u003e **Claude-Code-style dynamic workflows for [Hermes Agent](https://github.com/NousResearch/hermes-agent).**\n\nEnglish | [简体中文](./README.zh-CN.md) | [日本語](./README.ja-JP.md)\n\nYou can now use **Dynamic Workflows** in Hermes: have the model write a sandboxed Python\nscript on the fly, execute it in the background runtime, and orchestrate large numbers\nof independent subagents with `agent()/parallel()/pipeline()` — ideal for codebase\naudits, large-scale migrations, and cross-validated research. Inspired by\n[Dynamic Workflows in Claude Code](https://claude.com/blog/introducing-dynamic-workflows-in-claude-code).\n\nhttps://github.com/user-attachments/assets/06ef3d0d-4d89-48c4-9851-e1cae690e9b0\n\n## Quick Start\n\nInstall and enable in one line:\n\n```bash\nhermes plugins install lingjiuu/hermes-dynamic-workflows --enable\n```\n\n\u003e Gateway users: run `hermes gateway restart` after installing.\n\nOnce it's installed, just tell Hermes \"run a workflow that …\" and you're set.\n\n### Live Dashboard (optional, requires a separate step)\n\n`hermes plugins install` only clones the plugin — it does not install its console\nscripts, so the dashboard command has to be installed once separately:\n\n```bash\npython3 \"${HERMES_HOME:-$HOME/.hermes}/plugins/dynamic-workflows/scripts/install-hermes-workflows.py\"\n# Installs to ~/.local/bin\n```\n\nThen, in **a separate terminal**, run `hermes-workflows` to open the interactive\ndashboard, where you can watch the run list, per-phase/per-agent progress, and each\nsubagent's prompt and output in real time.\n\n## Configuration (optional)\n\nThe plugin reads the following section from Hermes's `~/.hermes/config.yaml` (every key\ncan also be overridden via a `HERMES_DYNAMIC_WORKFLOWS_*` environment variable):\n\n```yaml\nplugins:\n  entries:\n    dynamic-workflows:\n      dynamic_workflows:\n        concurrency: 8                # Max concurrent agents (default: min(16, cpu-2))\n        max_concurrency: 16           # Hard cap on concurrency\n        max_agents: 1000              # Max total agents per run (runaway guard)\n        workflow_timeout_seconds: 900 # Wall-clock timeout for the whole run (excludes paused time)\n        child_timeout_seconds: 300    # Timeout for a single child agent\n        blocked_child_toolsets: [workflow, delegation, code_execution, memory, messaging, clarify]\n                                      # Toolsets child agents are forbidden to use\n        default_child_toolsets: [web, file, terminal, skills]\n                                      # Default toolsets for child agents (used when no agentType is given)\n        keep_worktrees: false         # Whether to keep each agent's git worktree (auto-cleaned by default)\n        allow_model_override: true    # Whether agent(model=...) may override the model\n        require_launch_approval: true # Require confirmation before a top-level workflow launches (denied if nobody is online)\n        child_approval_policy: inherit # Child agent approval policy: inherit|smart|deny|approve|ask\n        ask_fallback: smart           # Fallback when \"ask\" has no one to reach: smart|deny|approve\n        notify_on_complete: true      # Notify the originating CLI or gateway session on completion\n        notify_result_preview_chars: 2000  # Truncation length (chars) for the result preview in notifications\n```\n\n## Script API\n\nA workflow script is just a piece of async Python whose first statement is a literal\n`meta`; after that you orchestrate child agents using the sandboxed globals:\n\n```python\nmeta = {\n    \"name\": \"repo-audit\",\n    \"description\": \"Parallel review, then adversarial verify\",\n    \"phases\": [{\"title\": \"Review\"}, {\"title\": \"Verify\"}],\n}\n\n# Each target flows through review → verify independently\n# (pipeline has no barrier: A can be at verify while B is still at review)\nfindings = await pipeline(\n    args[\"targets\"],\n    lambda t, _o, i: agent(f\"Review for bugs: {t}\", {\"label\": f\"review:{i}\", \"phase\": \"Review\"}),\n    lambda r, _o, i: agent(f\"Verify adversarially: {json.dumps(r)}\", {\"label\": f\"verify:{i}\", \"phase\": \"Verify\"}),\n)\nreturn await agent(\"Synthesize the verified findings:\\n\" + json.dumps(findings))\n```\n\n- `agent(prompt, opts)` spawns a child agent; `opts` may include `schema` (enforce\n  structured output), `model`, `agentType`, and `isolation=\"worktree\"`.\n- `pipeline` (default, no barrier) / `parallel` (with barrier) handle concurrency;\n  `phase`/`log` report progress; `workflow()` runs a named workflow inline; `args` /\n  `budget` access the input arguments and the token budget.\n\n### Agent Type\n\nSpecify a child agent's type via `agentType` in the script; if omitted, it defaults to\n`general-purpose` (full toolset):\n\n| Type | Toolset | Description |\n|------|---------|-------------|\n| `general-purpose` | `*` (all safe tools) | Default; good for searching code, researching complex problems, and multi-step tasks |\n| `explore` | Read-only (read_file, search_files, terminal) | Fast codebase exploration; good for locating files and searching keywords |\n| `plan` | Read-only (read_file, search_files, terminal) | Software architecture design; outputs a step-by-step implementation plan |\n| `verification` | web + file + terminal + browser | Verifies implementation correctness; runs build/test/lint to emit PASS/FAIL |\n\nAgent types are resolved from three locations in priority order (on a name collision,\nearlier locations override later ones):\n\n1. `\u003cproject\u003e/.hermes/dynamic-workflows/agents/*.md`  — project level, applies only to the current project\n2. `~/.hermes/dynamic-workflows/agents/*.md`          — user level, applies globally\n3. `\u003cplugin\u003e/hermes_dynamic_workflows/agents/*.md`    — built-in defaults (general-purpose/explore/plan/verification)\n\nTo add a custom type, create a new `.md` file under directory 1 or 2 in the following format:\n\n```markdown\n---\nname: my-agent\ndescription: \"A short description of what this agent is for; the model uses it to automatically pick the right agent.\"\nmodel: inherit\ntoolsets: [web, file, terminal]\n---\n\nWrite the agent's system prompt here to guide its behavior, style, and constraints.\n```\n\n`name` and `description` are required; `model` defaults to `inherit` (inherits the\ncurrent session's model); `toolsets` defaults to the global `default_child_toolsets`;\noptional fields also include `allowed_tools`, `disallowed_tools`, and `isolation`.\n\nAt runtime the plugin persists the script and the full execution trace (transcript) of\nevery child agent, and injects a `\u003ctask-notification\u003e` into the conversation on\ncompletion — no polling required. Use `/workflows` to view history and details.\n\n## Deep Dive\n\nFor implementation details (core execution path, tools and full call results, prompt\ncache, concurrency and limits, permission governance, rebuilding transcripts from\n`state.db`, sandboxing, resume…), see [TECHNICAL.md](./TECHNICAL.md).\n\n## License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flingjiuu%2Fhermes-dynamic-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flingjiuu%2Fhermes-dynamic-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flingjiuu%2Fhermes-dynamic-workflows/lists"}