agentic-dev-loop 0.15.7__tar.gz → 1.0.0b1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agentic_dev_loop-1.0.0b1/PKG-INFO +200 -0
- agentic_dev_loop-1.0.0b1/README.md +149 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/pyproject.toml +6 -1
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/isolation.py +3 -2
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/dev.agent.md +2 -2
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/qa.agent.md +1 -1
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/review.agent.md +4 -4
- agentic_dev_loop-1.0.0b1/src/agentic_dev_loop.egg-info/PKG-INFO +200 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/requires.txt +4 -0
- agentic_dev_loop-0.15.7/PKG-INFO +0 -659
- agentic_dev_loop-0.15.7/README.md +0 -612
- agentic_dev_loop-0.15.7/src/agentic_dev_loop.egg-info/PKG-INFO +0 -659
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/LICENSE +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/setup.cfg +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/config.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/failure.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/paths.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/profiles/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/profiles/data/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/profiles/data/python.yaml +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/results.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/core/verdict.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/actions.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/agent_error_guide.md +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/agent_error_guide.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/agents.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/allowlist.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/brief_coverage.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/brief_prompt.md +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/brief_prompt.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/cli.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/completion.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/containers.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/copilot_auth.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/deps.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/dryrun.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/egress_policy.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/egress_proxy.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/extensions/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/extensions/aidlc.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/forbidden.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/graph.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/hostboundary.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/llm.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/loaders.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/mounts.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/checks.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/doctor.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/init.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/recipes/dotnet-node.yaml +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/recipes/python.yaml +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/recipes.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates/env.example +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/templates.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/onboarding/upgrade.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/outputs.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/presets.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/proc.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/provider_wire.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/registry.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/run_status.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/run_status_command.md +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/seccomp/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/seccomp/chromium-userns.json +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/secrets.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/stages.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/step_workspace.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/sync_back.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/py.typed +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/metrics.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/render.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/reporting/sources.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/__init__.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/layout.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/page.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/runs_view.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/server.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/16-1pKPtbcx.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/16-2lMgbefg.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/16-B0WgRfVg.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/16-B3fCnGwv.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/16-Bm3KyEZC.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/16-DIfh6y3Q.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/16-DxEg5YJZ.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/20-CdViZ4xF.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/accordion.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/button-rSg_K8yf.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/button-skeleton-i-vqINhS.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/button.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/carbon-element-Bi7pQHAl.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/checkbox-D7PSLQCq.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/checkbox.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/class-map-t9xXbTFr.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/code-snippet.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/collection-helpers-BOkEorAG.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/copy-button.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/copy-tonlUGaV.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/data-table.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/decorate-1Ivfrp93.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/decorators-CNcdZSLL.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/deep-shadow-contains-Cs2rSnhr.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/definition-tooltip-FYe4J71p.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/directive-xDpGnViN.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/feature-flags-C7ZDYm5Q.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/floating-controller-DmTRVV0A.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/focus-D91D_iCB.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/form-Sg67yyAA.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/host-listener-CEd01uiB.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/host-listener-D_ODAJ3e.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/icon-button-Be2x1qrf.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/icon-loader-Cj1PggRN.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/icon-loader-utils-CVerE28u.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/if-defined-CV6i5LeB.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/if-non-empty-B5mz8bH9.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/link-aD3OYHCu.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/link.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/manifest.json +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/notification.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/on-DP_Dnlgd.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/popover-content-fajgXUvu.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/popover.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/query-DJR3NpB4.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/query-all-BuL-eXl_.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/radio-button.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/radio-group-manager-BE85t4HN.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/search-CVX2VAop.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/settings-DlHDxgf_.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/skeleton-text-s5gA9_CO.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/skeleton-text.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/tag.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/themes.css +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/tile.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/tooltip-DYtXwn-o.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/tooltip-content-DDo9ICPL.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/tooltip.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/ui-shell.min.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/viz/vendor/unsafe-html-BDr7jYB8.js +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/SOURCES.txt +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/dependency_links.txt +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/entry_points.txt +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop.egg-info/top_level.txt +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_029_merge_on_conflict.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_033_brief_step.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_035_finalize_nudge.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_036_banned_commands_and_lane_boundary.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_041_brief_coverage.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_046_brief_prompt.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_cli.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_doctor.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_init.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_profile_loading.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_profiles.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_recipes.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_schema_lock.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_templates.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_055_upgrade.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_actions.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_agent_error_guide.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_agents.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_aidlc.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_build_viz_page.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_cli.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_config.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_containers.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_copilot_auth.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_copilot_cli.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_deps.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_dry_run.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_e2e_fixtures.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_egress_proxy.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_graph.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_hostboundary.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_hostboundary_integration.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_isolation.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_isolation_integration.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_isolation_pbt.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_llm.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_loaders.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_module_contract.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_outputs.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_outputs_pbt.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_proc.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_provider_wire.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_publish.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_qa_prompt.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_registry.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_repo_ascii.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_results.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_run_status.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_duration_charts.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_filters.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_key_stats.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_runs_js_metrics.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_runs_layout.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_runs_layout_key_stats.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_sdk_compat.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_secrets.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_secrets_integration.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_secrets_pipeline.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_source_resolution.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_stages.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_step_workspace.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_sync_back.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_unit11.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_unit11_pbt.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_unit12_reporting.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_unit13_runs_viz.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_unit5_config.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_unit5_pbt.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_unit5_pure.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_vendor_carbon_wc.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_verdict.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_viz.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_viz_demo.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_viz_layout.py +0 -0
- {agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/tests/test_viz_wheel_contents.py +0 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agentic-dev-loop
|
|
3
|
+
Version: 1.0.0b1
|
|
4
|
+
Summary: Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.
|
|
5
|
+
Author: Luke Wilson
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/lukedawilson/agentic-dev-loop
|
|
8
|
+
Project-URL: Documentation, https://lukedawilson.github.io/agentic-dev-loop/
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Operating System :: MacOS
|
|
13
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
14
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Software Development
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
24
|
+
Classifier: Topic :: Security
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.12
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: pydantic>=2.0
|
|
30
|
+
Requires-Dist: PyYAML>=6.0
|
|
31
|
+
Requires-Dist: openhands-sdk~=1.17.0
|
|
32
|
+
Requires-Dist: openhands-tools~=1.17.0
|
|
33
|
+
Requires-Dist: browser-use==0.11.13
|
|
34
|
+
Requires-Dist: pillow>=13.0.0
|
|
35
|
+
Requires-Dist: agent-client-protocol<1.0.0
|
|
36
|
+
Requires-Dist: langgraph>=1.2
|
|
37
|
+
Requires-Dist: langgraph-checkpoint-sqlite>=3.0
|
|
38
|
+
Requires-Dist: msgpack>=1.0
|
|
39
|
+
Requires-Dist: filelock>=4.2.1
|
|
40
|
+
Requires-Dist: pyasn1>=0.6.5
|
|
41
|
+
Requires-Dist: pypdf>=6.21.4
|
|
42
|
+
Provides-Extra: dev
|
|
43
|
+
Requires-Dist: hypothesis>=6.0; extra == "dev"
|
|
44
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
45
|
+
Requires-Dist: pip-audit>=2.0; extra == "dev"
|
|
46
|
+
Requires-Dist: pre-commit>=3.0; extra == "dev"
|
|
47
|
+
Provides-Extra: docs
|
|
48
|
+
Requires-Dist: mkdocs-material~=9.6; extra == "docs"
|
|
49
|
+
Requires-Dist: pymdown-extensions~=10.0; extra == "docs"
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
# agentic-dev-loop
|
|
53
|
+
|
|
54
|
+
> **Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.**
|
|
55
|
+
|
|
56
|
+
Describe your pipeline in one YAML file - agent steps, mechanical test gates, and
|
|
57
|
+
trusted actions - and `agentic-dev-loop` runs it end to end: agent and command steps get
|
|
58
|
+
kernel-level sandboxing via Docker, verdicts route the graph, every boundary is
|
|
59
|
+
checkpointed, and nothing gets committed until every gate passes.
|
|
60
|
+
|
|
61
|
+

|
|
62
|
+
|
|
63
|
+
## Key features
|
|
64
|
+
|
|
65
|
+
- **A tool, not a wiring project.** One CLI entry point, opinionated defaults,
|
|
66
|
+
fixed safety policies. You write the pipeline and the agent definitions -
|
|
67
|
+
nothing else.
|
|
68
|
+
- **Deterministic.** Same pipeline + same state means the same routing.
|
|
69
|
+
Verdicts are parsed from files and validated tool calls, retries are
|
|
70
|
+
bounded, nothing is best-effort.
|
|
71
|
+
- **Sandboxed by default.** The agent's shell and every command step run
|
|
72
|
+
inside an always-on Docker sandbox: network off by default, writes only to
|
|
73
|
+
declared `mounts:`, no `.git`. If no sandbox is available, the run stops
|
|
74
|
+
instead of degrading.
|
|
75
|
+
- **Crash-safe and resumable.** Every boundary is checkpointed; interrupt a
|
|
76
|
+
run and resume it from the exact checkpoint with `--resume`, notes intact.
|
|
77
|
+
- **Watchable.** A live browser graph view with per-stage consoles and an
|
|
78
|
+
event log, a browsable run history, and markdown reports.
|
|
79
|
+
- **Gated commits.** A single commit point that fires only when every gate
|
|
80
|
+
passed and the worktree was clean at start.
|
|
81
|
+
- **Supply-chain careful.** A digest-pinned dev image, a locked-by-default
|
|
82
|
+
dependency policy, and a CVE-audited restore step.
|
|
83
|
+
- **Secret-safe.** Secrets are refs in config, values in the host environment,
|
|
84
|
+
opted in per step, and scrubbed from every engine-written output; the
|
|
85
|
+
workspace may not contain `.env*` files.
|
|
86
|
+
- **Onboarding that stays honest.** `init` scaffolds a working loop for your
|
|
87
|
+
repo, `doctor` probes the host before every run, `upgrade` converges the
|
|
88
|
+
install and the pinned version.
|
|
89
|
+
- **Extensible.** Plugins add your own actions, tools, and document loaders,
|
|
90
|
+
loaded from outside the workspace only.
|
|
91
|
+
|
|
92
|
+
## Supported platforms
|
|
93
|
+
|
|
94
|
+
The engine is plain Linux under the hood and runs wherever a compliant
|
|
95
|
+
Docker engine does:
|
|
96
|
+
|
|
97
|
+
| Platform | Support |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| **Linux** | Native. Docker Engine, OrbStack, Colima, or podman with docker compat. |
|
|
100
|
+
| **macOS** | Native. Docker Desktop, OrbStack, or Colima. |
|
|
101
|
+
| **Windows** | Via **WSL2** (Ubuntu distro). Enable Docker Desktop's WSL integration (or run Docker Engine inside the distro) and keep the repo on the WSL filesystem (`~/dev/...`), not `/mnt/c` - bind-mounting a 9p path into containers breaks permissions and is slow. |
|
|
102
|
+
|
|
103
|
+
## Quickstart
|
|
104
|
+
|
|
105
|
+
### Prerequisites
|
|
106
|
+
|
|
107
|
+
| Requirement | Detail |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| Python | >= 3.12 |
|
|
110
|
+
| Docker engine | Engine API >= 1.43 (Engine 24). Any compliant engine works - Docker Desktop, OrbStack, Colima, Rancher Desktop, podman docker-compat. On Windows, run under WSL2: the repo must live on the WSL filesystem, not /mnt/c. |
|
|
111
|
+
| LLM API key | The env var named by your pipeline's `api_key_env` (e.g. `OPENAI_API_KEY`) must be set - a missing key fails fast, naming it. Alternatively, `agentic-dev-loop copilot-login` authenticates a Copilot subscription (see [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/)). |
|
|
112
|
+
|
|
113
|
+
### Installation
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pipx install agentic-dev-loop
|
|
117
|
+
agentic-dev-loop --version
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Install with **pipx**: the engine's venv lives outside the workspace, so it
|
|
121
|
+
is unmounted from the sandbox and never agent-writable. On the first run the
|
|
122
|
+
engine pulls the digest-pinned dev image and verifies its digest. Setup
|
|
123
|
+
details and troubleshooting live in the [setup guide](https://lukedawilson.github.io/agentic-dev-loop/setup/).
|
|
124
|
+
|
|
125
|
+
### Your first loop
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
cd <your-repo>
|
|
129
|
+
agentic-dev-loop init --profile python # writes the pipeline + agents
|
|
130
|
+
export OPENAI_API_KEY=... # whatever api_key_env names
|
|
131
|
+
agentic-dev-loop agentic-dev-loop/pipeline.yaml --dry-run # validate - no LLM, no Docker
|
|
132
|
+
agentic-dev-loop agentic-dev-loop/pipeline.yaml # run it
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`init` scaffolds `agentic-dev-loop/pipeline.yaml` plus the agent files it
|
|
136
|
+
names; `--dry-run` loads and validates with no LLM, no Docker, and no state
|
|
137
|
+
writes. A minimal pipeline looks like:
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
name: my-construction-loop
|
|
141
|
+
|
|
142
|
+
llm:
|
|
143
|
+
model: openai/deepseek-v4-pro
|
|
144
|
+
base_url: https://api.deepseek.com
|
|
145
|
+
api_key_env: OPENAI_API_KEY
|
|
146
|
+
|
|
147
|
+
max_attempts: 10
|
|
148
|
+
agents_dir: sdk_agents
|
|
149
|
+
|
|
150
|
+
steps:
|
|
151
|
+
- name: dev
|
|
152
|
+
agent: dev
|
|
153
|
+
produces: implementation-summary.md
|
|
154
|
+
on_pass: test
|
|
155
|
+
|
|
156
|
+
- name: test
|
|
157
|
+
command: .venv-sandbox/bin/python -m pytest tests/ -q
|
|
158
|
+
on_pass: review
|
|
159
|
+
on_fail: { goto: dev, retry: true }
|
|
160
|
+
|
|
161
|
+
- name: review
|
|
162
|
+
agent: review
|
|
163
|
+
artifact: review-findings.md
|
|
164
|
+
verdicts: { pass: APPROVED, fail: NEEDS CHANGES }
|
|
165
|
+
on_pass: commit
|
|
166
|
+
on_fail: { goto: dev, retry: true }
|
|
167
|
+
|
|
168
|
+
- name: commit
|
|
169
|
+
action: commit
|
|
170
|
+
params: { message: "feat: construct {subject}" }
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Every field - per-step isolation, mounts and egress, secrets, dependency
|
|
174
|
+
policy, named LLM profiles - is in the
|
|
175
|
+
[pipeline.yaml reference](https://lukedawilson.github.io/agentic-dev-loop/pipeline/).
|
|
176
|
+
|
|
177
|
+
## Documentation
|
|
178
|
+
|
|
179
|
+
| Page | What it covers |
|
|
180
|
+
| --- | --- |
|
|
181
|
+
| [Architecture](https://lukedawilson.github.io/agentic-dev-loop/architecture/) | The five layers, one full run end to end, and the host-boundary security model |
|
|
182
|
+
| [CLI](https://lukedawilson.github.io/agentic-dev-loop/cli/) | Run flags, resuming, the live view, reports, container management, and onboarding commands |
|
|
183
|
+
| [pipeline.yaml](https://lukedawilson.github.io/agentic-dev-loop/pipeline/) | The complete configuration reference: steps, isolation, secrets, networking, dependency policy |
|
|
184
|
+
| [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/) | OpenAI-compatible endpoints (OpenAI, DeepSeek, and others) and the GitHub Copilot subscription |
|
|
185
|
+
| [Authoring a loop](https://lukedawilson.github.io/agentic-dev-loop/authoring/) | From `init` to a committed pipeline: agent files, stage lineup, adaptation checklist |
|
|
186
|
+
| [Setup and troubleshooting](https://lukedawilson.github.io/agentic-dev-loop/setup/) | Docker engines, the dev image, caching, error codes |
|
|
187
|
+
| [Browser sandbox](https://lukedawilson.github.io/agentic-dev-loop/browser-sandbox/) | Running a browser inside the sandbox |
|
|
188
|
+
| [Known issues](https://lukedawilson.github.io/agentic-dev-loop/known-issues/) | Container lifecycle edge cases |
|
|
189
|
+
|
|
190
|
+
## Contributing
|
|
191
|
+
|
|
192
|
+
Read [AGENTS.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/AGENTS.md) first -
|
|
193
|
+
it is the instruction set for both human and agent contributors - then see
|
|
194
|
+
[CONTRIBUTING.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/CONTRIBUTING.md)
|
|
195
|
+
for the development workflow and the OpenCode commands.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
Built on [OpenHands SDK](https://github.com/OpenHands/software-agent-sdk) and
|
|
200
|
+
[LangGraph](https://github.com/langchain-ai/langgraph).
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# agentic-dev-loop
|
|
2
|
+
|
|
3
|
+
> **Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.**
|
|
4
|
+
|
|
5
|
+
Describe your pipeline in one YAML file - agent steps, mechanical test gates, and
|
|
6
|
+
trusted actions - and `agentic-dev-loop` runs it end to end: agent and command steps get
|
|
7
|
+
kernel-level sandboxing via Docker, verdicts route the graph, every boundary is
|
|
8
|
+
checkpointed, and nothing gets committed until every gate passes.
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
## Key features
|
|
13
|
+
|
|
14
|
+
- **A tool, not a wiring project.** One CLI entry point, opinionated defaults,
|
|
15
|
+
fixed safety policies. You write the pipeline and the agent definitions -
|
|
16
|
+
nothing else.
|
|
17
|
+
- **Deterministic.** Same pipeline + same state means the same routing.
|
|
18
|
+
Verdicts are parsed from files and validated tool calls, retries are
|
|
19
|
+
bounded, nothing is best-effort.
|
|
20
|
+
- **Sandboxed by default.** The agent's shell and every command step run
|
|
21
|
+
inside an always-on Docker sandbox: network off by default, writes only to
|
|
22
|
+
declared `mounts:`, no `.git`. If no sandbox is available, the run stops
|
|
23
|
+
instead of degrading.
|
|
24
|
+
- **Crash-safe and resumable.** Every boundary is checkpointed; interrupt a
|
|
25
|
+
run and resume it from the exact checkpoint with `--resume`, notes intact.
|
|
26
|
+
- **Watchable.** A live browser graph view with per-stage consoles and an
|
|
27
|
+
event log, a browsable run history, and markdown reports.
|
|
28
|
+
- **Gated commits.** A single commit point that fires only when every gate
|
|
29
|
+
passed and the worktree was clean at start.
|
|
30
|
+
- **Supply-chain careful.** A digest-pinned dev image, a locked-by-default
|
|
31
|
+
dependency policy, and a CVE-audited restore step.
|
|
32
|
+
- **Secret-safe.** Secrets are refs in config, values in the host environment,
|
|
33
|
+
opted in per step, and scrubbed from every engine-written output; the
|
|
34
|
+
workspace may not contain `.env*` files.
|
|
35
|
+
- **Onboarding that stays honest.** `init` scaffolds a working loop for your
|
|
36
|
+
repo, `doctor` probes the host before every run, `upgrade` converges the
|
|
37
|
+
install and the pinned version.
|
|
38
|
+
- **Extensible.** Plugins add your own actions, tools, and document loaders,
|
|
39
|
+
loaded from outside the workspace only.
|
|
40
|
+
|
|
41
|
+
## Supported platforms
|
|
42
|
+
|
|
43
|
+
The engine is plain Linux under the hood and runs wherever a compliant
|
|
44
|
+
Docker engine does:
|
|
45
|
+
|
|
46
|
+
| Platform | Support |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| **Linux** | Native. Docker Engine, OrbStack, Colima, or podman with docker compat. |
|
|
49
|
+
| **macOS** | Native. Docker Desktop, OrbStack, or Colima. |
|
|
50
|
+
| **Windows** | Via **WSL2** (Ubuntu distro). Enable Docker Desktop's WSL integration (or run Docker Engine inside the distro) and keep the repo on the WSL filesystem (`~/dev/...`), not `/mnt/c` - bind-mounting a 9p path into containers breaks permissions and is slow. |
|
|
51
|
+
|
|
52
|
+
## Quickstart
|
|
53
|
+
|
|
54
|
+
### Prerequisites
|
|
55
|
+
|
|
56
|
+
| Requirement | Detail |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| Python | >= 3.12 |
|
|
59
|
+
| Docker engine | Engine API >= 1.43 (Engine 24). Any compliant engine works - Docker Desktop, OrbStack, Colima, Rancher Desktop, podman docker-compat. On Windows, run under WSL2: the repo must live on the WSL filesystem, not /mnt/c. |
|
|
60
|
+
| LLM API key | The env var named by your pipeline's `api_key_env` (e.g. `OPENAI_API_KEY`) must be set - a missing key fails fast, naming it. Alternatively, `agentic-dev-loop copilot-login` authenticates a Copilot subscription (see [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/)). |
|
|
61
|
+
|
|
62
|
+
### Installation
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pipx install agentic-dev-loop
|
|
66
|
+
agentic-dev-loop --version
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Install with **pipx**: the engine's venv lives outside the workspace, so it
|
|
70
|
+
is unmounted from the sandbox and never agent-writable. On the first run the
|
|
71
|
+
engine pulls the digest-pinned dev image and verifies its digest. Setup
|
|
72
|
+
details and troubleshooting live in the [setup guide](https://lukedawilson.github.io/agentic-dev-loop/setup/).
|
|
73
|
+
|
|
74
|
+
### Your first loop
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
cd <your-repo>
|
|
78
|
+
agentic-dev-loop init --profile python # writes the pipeline + agents
|
|
79
|
+
export OPENAI_API_KEY=... # whatever api_key_env names
|
|
80
|
+
agentic-dev-loop agentic-dev-loop/pipeline.yaml --dry-run # validate - no LLM, no Docker
|
|
81
|
+
agentic-dev-loop agentic-dev-loop/pipeline.yaml # run it
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`init` scaffolds `agentic-dev-loop/pipeline.yaml` plus the agent files it
|
|
85
|
+
names; `--dry-run` loads and validates with no LLM, no Docker, and no state
|
|
86
|
+
writes. A minimal pipeline looks like:
|
|
87
|
+
|
|
88
|
+
```yaml
|
|
89
|
+
name: my-construction-loop
|
|
90
|
+
|
|
91
|
+
llm:
|
|
92
|
+
model: openai/deepseek-v4-pro
|
|
93
|
+
base_url: https://api.deepseek.com
|
|
94
|
+
api_key_env: OPENAI_API_KEY
|
|
95
|
+
|
|
96
|
+
max_attempts: 10
|
|
97
|
+
agents_dir: sdk_agents
|
|
98
|
+
|
|
99
|
+
steps:
|
|
100
|
+
- name: dev
|
|
101
|
+
agent: dev
|
|
102
|
+
produces: implementation-summary.md
|
|
103
|
+
on_pass: test
|
|
104
|
+
|
|
105
|
+
- name: test
|
|
106
|
+
command: .venv-sandbox/bin/python -m pytest tests/ -q
|
|
107
|
+
on_pass: review
|
|
108
|
+
on_fail: { goto: dev, retry: true }
|
|
109
|
+
|
|
110
|
+
- name: review
|
|
111
|
+
agent: review
|
|
112
|
+
artifact: review-findings.md
|
|
113
|
+
verdicts: { pass: APPROVED, fail: NEEDS CHANGES }
|
|
114
|
+
on_pass: commit
|
|
115
|
+
on_fail: { goto: dev, retry: true }
|
|
116
|
+
|
|
117
|
+
- name: commit
|
|
118
|
+
action: commit
|
|
119
|
+
params: { message: "feat: construct {subject}" }
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Every field - per-step isolation, mounts and egress, secrets, dependency
|
|
123
|
+
policy, named LLM profiles - is in the
|
|
124
|
+
[pipeline.yaml reference](https://lukedawilson.github.io/agentic-dev-loop/pipeline/).
|
|
125
|
+
|
|
126
|
+
## Documentation
|
|
127
|
+
|
|
128
|
+
| Page | What it covers |
|
|
129
|
+
| --- | --- |
|
|
130
|
+
| [Architecture](https://lukedawilson.github.io/agentic-dev-loop/architecture/) | The five layers, one full run end to end, and the host-boundary security model |
|
|
131
|
+
| [CLI](https://lukedawilson.github.io/agentic-dev-loop/cli/) | Run flags, resuming, the live view, reports, container management, and onboarding commands |
|
|
132
|
+
| [pipeline.yaml](https://lukedawilson.github.io/agentic-dev-loop/pipeline/) | The complete configuration reference: steps, isolation, secrets, networking, dependency policy |
|
|
133
|
+
| [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/) | OpenAI-compatible endpoints (OpenAI, DeepSeek, and others) and the GitHub Copilot subscription |
|
|
134
|
+
| [Authoring a loop](https://lukedawilson.github.io/agentic-dev-loop/authoring/) | From `init` to a committed pipeline: agent files, stage lineup, adaptation checklist |
|
|
135
|
+
| [Setup and troubleshooting](https://lukedawilson.github.io/agentic-dev-loop/setup/) | Docker engines, the dev image, caching, error codes |
|
|
136
|
+
| [Browser sandbox](https://lukedawilson.github.io/agentic-dev-loop/browser-sandbox/) | Running a browser inside the sandbox |
|
|
137
|
+
| [Known issues](https://lukedawilson.github.io/agentic-dev-loop/known-issues/) | Container lifecycle edge cases |
|
|
138
|
+
|
|
139
|
+
## Contributing
|
|
140
|
+
|
|
141
|
+
Read [AGENTS.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/AGENTS.md) first -
|
|
142
|
+
it is the instruction set for both human and agent contributors - then see
|
|
143
|
+
[CONTRIBUTING.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/CONTRIBUTING.md)
|
|
144
|
+
for the development workflow and the OpenCode commands.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
Built on [OpenHands SDK](https://github.com/OpenHands/software-agent-sdk) and
|
|
149
|
+
[LangGraph](https://github.com/langchain-ai/langgraph).
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agentic-dev-loop"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "1.0.0b1"
|
|
8
8
|
description = "Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -73,6 +73,7 @@ dependencies = [
|
|
|
73
73
|
|
|
74
74
|
[project.urls]
|
|
75
75
|
Homepage = "https://github.com/lukedawilson/agentic-dev-loop"
|
|
76
|
+
Documentation = "https://lukedawilson.github.io/agentic-dev-loop/"
|
|
76
77
|
|
|
77
78
|
[project.scripts]
|
|
78
79
|
agentic-dev-loop = "agentic_dev_loop.engine.cli:main"
|
|
@@ -84,6 +85,10 @@ dev = [
|
|
|
84
85
|
"pip-audit>=2.0",
|
|
85
86
|
"pre-commit>=3.0",
|
|
86
87
|
]
|
|
88
|
+
docs = [
|
|
89
|
+
"mkdocs-material~=9.6",
|
|
90
|
+
"pymdown-extensions~=10.0",
|
|
91
|
+
]
|
|
87
92
|
|
|
88
93
|
[tool.setuptools.packages.find]
|
|
89
94
|
where = ["src"]
|
{agentic_dev_loop-0.15.7 → agentic_dev_loop-1.0.0b1}/src/agentic_dev_loop/engine/isolation.py
RENAMED
|
@@ -728,7 +728,8 @@ def _guard_git(request: SandboxExecutionRequest,
|
|
|
728
728
|
name = " ".join(request.argv[:2])
|
|
729
729
|
raise SandboxError(
|
|
730
730
|
f"AE-SBX-008: git mutation {name!r} blocked - set "
|
|
731
|
-
"isolation.allow_git_mutations: true to allow
|
|
731
|
+
"isolation.allow_git_mutations: true to allow "
|
|
732
|
+
"(see the pipeline reference: docs/pipeline.md)")
|
|
732
733
|
|
|
733
734
|
|
|
734
735
|
def _request_digest(argv: list[str], cwd: str, env: dict[str, str]) -> str:
|
|
@@ -974,7 +975,7 @@ class DockerBackend(Sandbox):
|
|
|
974
975
|
raise SandboxError(
|
|
975
976
|
"AE-SBX-013: networked execution requested but no networked "
|
|
976
977
|
"container is running - declare `network: true` on the step "
|
|
977
|
-
"(docs/
|
|
978
|
+
"(see the pipeline reference: docs/pipeline.md)")
|
|
978
979
|
return self._exec(request, container)
|
|
979
980
|
|
|
980
981
|
def _run_profile(self, request: SandboxExecutionRequest) -> SandboxExecutionResult:
|
|
@@ -9,7 +9,7 @@ opinionated LangGraph + OpenHands SDK pipeline engine written in Python.
|
|
|
9
9
|
|
|
10
10
|
## WORKFLOW
|
|
11
11
|
|
|
12
|
-
1. Read the plan documents and
|
|
12
|
+
1. Read the plan documents, README.md, and docs/pipeline.md in the context below.
|
|
13
13
|
2. If the context contains a *Previous attempt feedback* section or a
|
|
14
14
|
*Mechanical gate output* section, treat every issue listed there as a
|
|
15
15
|
required fix from the pipeline's earlier stages - address each one before
|
|
@@ -128,7 +128,7 @@ opinionated LangGraph + OpenHands SDK pipeline engine written in Python.
|
|
|
128
128
|
|
|
129
129
|
## CONVENTIONS
|
|
130
130
|
|
|
131
|
-
- Follow README.md strictly - the fixed policies are binding (file-artifact
|
|
131
|
+
- Follow README.md and docs/pipeline.md strictly - the fixed policies are binding (file-artifact
|
|
132
132
|
verdicts, per-attempt artifact hygiene, single gated commit point,
|
|
133
133
|
fail-fast config and secrets).
|
|
134
134
|
- Tests never touch the network: agents are stubbed via the FakeAgents
|
|
@@ -160,7 +160,7 @@ turns building synthetic fixtures or debugging the harness.
|
|
|
160
160
|
probe and report it as the check. Fabricated checks are a QA failure in
|
|
161
161
|
themselves.
|
|
162
162
|
- Reality beats the docs. If live behaviour has legitimately drifted from the
|
|
163
|
-
README, note the deviation; fail only when the code is at fault.
|
|
163
|
+
README or the pipeline reference, note the deviation; fail only when the code is at fault.
|
|
164
164
|
- **Investigation budget.** If a probe failure cannot be diagnosed after a
|
|
165
165
|
few attempts, STOP and write the report. Mark the probe as `INCONCLUSIVE`
|
|
166
166
|
with the symptom and whatever you found. The pipeline will surface the
|
|
@@ -4,16 +4,16 @@ tools: [terminal, record_verdict]
|
|
|
4
4
|
---
|
|
5
5
|
# Review Agent
|
|
6
6
|
|
|
7
|
-
You are reviewing code for a unit of work against its plan documents
|
|
8
|
-
repo's README.
|
|
7
|
+
You are reviewing code for a unit of work against its plan documents, the
|
|
8
|
+
repo's README, and the pipeline reference.
|
|
9
9
|
|
|
10
10
|
## WORKFLOW
|
|
11
11
|
|
|
12
|
-
1. Read the plan documents and
|
|
12
|
+
1. Read the plan documents, README.md, and docs/pipeline.md in the context below.
|
|
13
13
|
2. Read the diff - understand what changed.
|
|
14
14
|
3. Check:
|
|
15
15
|
- Does the implementation match the plan?
|
|
16
|
-
- Are the README's fixed policies respected (file-artifact verdicts,
|
|
16
|
+
- Are the README's and the pipeline reference's fixed policies respected (file-artifact verdicts,
|
|
17
17
|
artifact hygiene, single gated commit point, fail-fast config)?
|
|
18
18
|
- Do the tests pin the new behavior without touching the network
|
|
19
19
|
(FakeAgents in tests/conftest.py is the only permitted stub)?
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agentic-dev-loop
|
|
3
|
+
Version: 1.0.0b1
|
|
4
|
+
Summary: Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.
|
|
5
|
+
Author: Luke Wilson
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/lukedawilson/agentic-dev-loop
|
|
8
|
+
Project-URL: Documentation, https://lukedawilson.github.io/agentic-dev-loop/
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Operating System :: MacOS
|
|
13
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
14
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Software Development
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
24
|
+
Classifier: Topic :: Security
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.12
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: pydantic>=2.0
|
|
30
|
+
Requires-Dist: PyYAML>=6.0
|
|
31
|
+
Requires-Dist: openhands-sdk~=1.17.0
|
|
32
|
+
Requires-Dist: openhands-tools~=1.17.0
|
|
33
|
+
Requires-Dist: browser-use==0.11.13
|
|
34
|
+
Requires-Dist: pillow>=13.0.0
|
|
35
|
+
Requires-Dist: agent-client-protocol<1.0.0
|
|
36
|
+
Requires-Dist: langgraph>=1.2
|
|
37
|
+
Requires-Dist: langgraph-checkpoint-sqlite>=3.0
|
|
38
|
+
Requires-Dist: msgpack>=1.0
|
|
39
|
+
Requires-Dist: filelock>=4.2.1
|
|
40
|
+
Requires-Dist: pyasn1>=0.6.5
|
|
41
|
+
Requires-Dist: pypdf>=6.21.4
|
|
42
|
+
Provides-Extra: dev
|
|
43
|
+
Requires-Dist: hypothesis>=6.0; extra == "dev"
|
|
44
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
45
|
+
Requires-Dist: pip-audit>=2.0; extra == "dev"
|
|
46
|
+
Requires-Dist: pre-commit>=3.0; extra == "dev"
|
|
47
|
+
Provides-Extra: docs
|
|
48
|
+
Requires-Dist: mkdocs-material~=9.6; extra == "docs"
|
|
49
|
+
Requires-Dist: pymdown-extensions~=10.0; extra == "docs"
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
|
|
52
|
+
# agentic-dev-loop
|
|
53
|
+
|
|
54
|
+
> **Turn an LLM into a gated, sandboxed, resumable construction loop over your codebase.**
|
|
55
|
+
|
|
56
|
+
Describe your pipeline in one YAML file - agent steps, mechanical test gates, and
|
|
57
|
+
trusted actions - and `agentic-dev-loop` runs it end to end: agent and command steps get
|
|
58
|
+
kernel-level sandboxing via Docker, verdicts route the graph, every boundary is
|
|
59
|
+
checkpointed, and nothing gets committed until every gate passes.
|
|
60
|
+
|
|
61
|
+

|
|
62
|
+
|
|
63
|
+
## Key features
|
|
64
|
+
|
|
65
|
+
- **A tool, not a wiring project.** One CLI entry point, opinionated defaults,
|
|
66
|
+
fixed safety policies. You write the pipeline and the agent definitions -
|
|
67
|
+
nothing else.
|
|
68
|
+
- **Deterministic.** Same pipeline + same state means the same routing.
|
|
69
|
+
Verdicts are parsed from files and validated tool calls, retries are
|
|
70
|
+
bounded, nothing is best-effort.
|
|
71
|
+
- **Sandboxed by default.** The agent's shell and every command step run
|
|
72
|
+
inside an always-on Docker sandbox: network off by default, writes only to
|
|
73
|
+
declared `mounts:`, no `.git`. If no sandbox is available, the run stops
|
|
74
|
+
instead of degrading.
|
|
75
|
+
- **Crash-safe and resumable.** Every boundary is checkpointed; interrupt a
|
|
76
|
+
run and resume it from the exact checkpoint with `--resume`, notes intact.
|
|
77
|
+
- **Watchable.** A live browser graph view with per-stage consoles and an
|
|
78
|
+
event log, a browsable run history, and markdown reports.
|
|
79
|
+
- **Gated commits.** A single commit point that fires only when every gate
|
|
80
|
+
passed and the worktree was clean at start.
|
|
81
|
+
- **Supply-chain careful.** A digest-pinned dev image, a locked-by-default
|
|
82
|
+
dependency policy, and a CVE-audited restore step.
|
|
83
|
+
- **Secret-safe.** Secrets are refs in config, values in the host environment,
|
|
84
|
+
opted in per step, and scrubbed from every engine-written output; the
|
|
85
|
+
workspace may not contain `.env*` files.
|
|
86
|
+
- **Onboarding that stays honest.** `init` scaffolds a working loop for your
|
|
87
|
+
repo, `doctor` probes the host before every run, `upgrade` converges the
|
|
88
|
+
install and the pinned version.
|
|
89
|
+
- **Extensible.** Plugins add your own actions, tools, and document loaders,
|
|
90
|
+
loaded from outside the workspace only.
|
|
91
|
+
|
|
92
|
+
## Supported platforms
|
|
93
|
+
|
|
94
|
+
The engine is plain Linux under the hood and runs wherever a compliant
|
|
95
|
+
Docker engine does:
|
|
96
|
+
|
|
97
|
+
| Platform | Support |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| **Linux** | Native. Docker Engine, OrbStack, Colima, or podman with docker compat. |
|
|
100
|
+
| **macOS** | Native. Docker Desktop, OrbStack, or Colima. |
|
|
101
|
+
| **Windows** | Via **WSL2** (Ubuntu distro). Enable Docker Desktop's WSL integration (or run Docker Engine inside the distro) and keep the repo on the WSL filesystem (`~/dev/...`), not `/mnt/c` - bind-mounting a 9p path into containers breaks permissions and is slow. |
|
|
102
|
+
|
|
103
|
+
## Quickstart
|
|
104
|
+
|
|
105
|
+
### Prerequisites
|
|
106
|
+
|
|
107
|
+
| Requirement | Detail |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| Python | >= 3.12 |
|
|
110
|
+
| Docker engine | Engine API >= 1.43 (Engine 24). Any compliant engine works - Docker Desktop, OrbStack, Colima, Rancher Desktop, podman docker-compat. On Windows, run under WSL2: the repo must live on the WSL filesystem, not /mnt/c. |
|
|
111
|
+
| LLM API key | The env var named by your pipeline's `api_key_env` (e.g. `OPENAI_API_KEY`) must be set - a missing key fails fast, naming it. Alternatively, `agentic-dev-loop copilot-login` authenticates a Copilot subscription (see [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/)). |
|
|
112
|
+
|
|
113
|
+
### Installation
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pipx install agentic-dev-loop
|
|
117
|
+
agentic-dev-loop --version
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Install with **pipx**: the engine's venv lives outside the workspace, so it
|
|
121
|
+
is unmounted from the sandbox and never agent-writable. On the first run the
|
|
122
|
+
engine pulls the digest-pinned dev image and verifies its digest. Setup
|
|
123
|
+
details and troubleshooting live in the [setup guide](https://lukedawilson.github.io/agentic-dev-loop/setup/).
|
|
124
|
+
|
|
125
|
+
### Your first loop
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
cd <your-repo>
|
|
129
|
+
agentic-dev-loop init --profile python # writes the pipeline + agents
|
|
130
|
+
export OPENAI_API_KEY=... # whatever api_key_env names
|
|
131
|
+
agentic-dev-loop agentic-dev-loop/pipeline.yaml --dry-run # validate - no LLM, no Docker
|
|
132
|
+
agentic-dev-loop agentic-dev-loop/pipeline.yaml # run it
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`init` scaffolds `agentic-dev-loop/pipeline.yaml` plus the agent files it
|
|
136
|
+
names; `--dry-run` loads and validates with no LLM, no Docker, and no state
|
|
137
|
+
writes. A minimal pipeline looks like:
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
name: my-construction-loop
|
|
141
|
+
|
|
142
|
+
llm:
|
|
143
|
+
model: openai/deepseek-v4-pro
|
|
144
|
+
base_url: https://api.deepseek.com
|
|
145
|
+
api_key_env: OPENAI_API_KEY
|
|
146
|
+
|
|
147
|
+
max_attempts: 10
|
|
148
|
+
agents_dir: sdk_agents
|
|
149
|
+
|
|
150
|
+
steps:
|
|
151
|
+
- name: dev
|
|
152
|
+
agent: dev
|
|
153
|
+
produces: implementation-summary.md
|
|
154
|
+
on_pass: test
|
|
155
|
+
|
|
156
|
+
- name: test
|
|
157
|
+
command: .venv-sandbox/bin/python -m pytest tests/ -q
|
|
158
|
+
on_pass: review
|
|
159
|
+
on_fail: { goto: dev, retry: true }
|
|
160
|
+
|
|
161
|
+
- name: review
|
|
162
|
+
agent: review
|
|
163
|
+
artifact: review-findings.md
|
|
164
|
+
verdicts: { pass: APPROVED, fail: NEEDS CHANGES }
|
|
165
|
+
on_pass: commit
|
|
166
|
+
on_fail: { goto: dev, retry: true }
|
|
167
|
+
|
|
168
|
+
- name: commit
|
|
169
|
+
action: commit
|
|
170
|
+
params: { message: "feat: construct {subject}" }
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Every field - per-step isolation, mounts and egress, secrets, dependency
|
|
174
|
+
policy, named LLM profiles - is in the
|
|
175
|
+
[pipeline.yaml reference](https://lukedawilson.github.io/agentic-dev-loop/pipeline/).
|
|
176
|
+
|
|
177
|
+
## Documentation
|
|
178
|
+
|
|
179
|
+
| Page | What it covers |
|
|
180
|
+
| --- | --- |
|
|
181
|
+
| [Architecture](https://lukedawilson.github.io/agentic-dev-loop/architecture/) | The five layers, one full run end to end, and the host-boundary security model |
|
|
182
|
+
| [CLI](https://lukedawilson.github.io/agentic-dev-loop/cli/) | Run flags, resuming, the live view, reports, container management, and onboarding commands |
|
|
183
|
+
| [pipeline.yaml](https://lukedawilson.github.io/agentic-dev-loop/pipeline/) | The complete configuration reference: steps, isolation, secrets, networking, dependency policy |
|
|
184
|
+
| [LLM providers](https://lukedawilson.github.io/agentic-dev-loop/llm-providers/) | OpenAI-compatible endpoints (OpenAI, DeepSeek, and others) and the GitHub Copilot subscription |
|
|
185
|
+
| [Authoring a loop](https://lukedawilson.github.io/agentic-dev-loop/authoring/) | From `init` to a committed pipeline: agent files, stage lineup, adaptation checklist |
|
|
186
|
+
| [Setup and troubleshooting](https://lukedawilson.github.io/agentic-dev-loop/setup/) | Docker engines, the dev image, caching, error codes |
|
|
187
|
+
| [Browser sandbox](https://lukedawilson.github.io/agentic-dev-loop/browser-sandbox/) | Running a browser inside the sandbox |
|
|
188
|
+
| [Known issues](https://lukedawilson.github.io/agentic-dev-loop/known-issues/) | Container lifecycle edge cases |
|
|
189
|
+
|
|
190
|
+
## Contributing
|
|
191
|
+
|
|
192
|
+
Read [AGENTS.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/AGENTS.md) first -
|
|
193
|
+
it is the instruction set for both human and agent contributors - then see
|
|
194
|
+
[CONTRIBUTING.md](https://github.com/lukedawilson/agentic-dev-loop/blob/main/CONTRIBUTING.md)
|
|
195
|
+
for the development workflow and the OpenCode commands.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
Built on [OpenHands SDK](https://github.com/OpenHands/software-agent-sdk) and
|
|
200
|
+
[LangGraph](https://github.com/langchain-ai/langgraph).
|