Use the recovery flow if any of these happen:
http://localhost:2026/api/modelsorhttp://localhost:2026/api/langgraph/openapi.jsonstarts failing.- DeerFlow claims success from
/mnt/user-data/workspacebut the repository working tree does not reflect the change. - Containers were restarted manually with raw
docker composeand thread workspace mounts look wrong.
./scripts/run_deerflow_epics.shThis wrapper syncs the local DeerFlow config into the vendored harness and starts the roadmap stack with the expected objective bundle. The live development checkout is bind-mounted at /workspaces/aigit, and the direct AIO sandbox contract remains /mnt/user-data for thread state and /mnt/user-data/workspace/repo for the staged checkout.
./scripts/recover_deerflow.shThe recovery script:
- re-syncs
.deerflow/config.yamland.deerflow/.envinto.deerflow/vendor/deer-flow/ - exports
DEER_FLOW_ROOTso Docker mounts the correct host-side thread workspace paths - restarts the DeerFlow development stack
- waits for
/api/modelsand/api/langgraph/openapi.jsonto become healthy again
Prefer the wrapper scripts over raw docker compose commands. If you bypass them, export the vendored DeerFlow root first:
export DEER_FLOW_ROOT=/absolute/path/to/.deerflow/vendor/deer-flowWithout that variable, DeerFlow can restart with incorrect host-mount paths and sandbox runs may complete against the wrong workspace.
- Reload
.deerflow/objectives/ALL_EPICS.md. - Prefer the live checkout at
/workspaces/aigitfor direct edits. - For isolated edit-heavy work, stage the checkout into the thread sandbox with
aigit deerflow-import-repo --thread-id <id>and tell DeerFlow to work inside/mnt/user-data/workspace/repowhile treating/mnt/user-dataas the mounted thread root. - Export validated changes back with
aigit deerflow-export-repo --thread-id <id>, then runpytest -qandpython -m aigit.cli chunk --repo /workspaces/aigit.