This workflow lets you run Flow tasks in ~/run and ~/run/i from anywhere,
without manual cd.
~/run/ # public run repo (has flow.toml)
~/run/i/ # internal run repo (has flow.toml)
~/run/i/linsa/ # nested internal project example
f health now ensures ~/run and ~/run/i directories exist.
Root behavior:
- This is a hard path: run repos live under
~/run. RUN_ROOTcan still override the root explicitly.
| Command | Meaning |
|---|---|
f r <task> [args...] |
Run task in ~/run |
f ri <task> [args...] |
Run task in ~/run/i |
f rp <project> <task> [args...] |
Run task in project under run tree |
f rip <project> <task> [args...] |
Run task in ~/run/i/<project> |
f rp <project> ... resolves in this order:
~/run/<project>~/run/i/<project>(fallback)
If both exist, Flow fails with an ambiguity error and asks for explicit path:
f rp <project> ...for public pathf rp i/<project> ...orf rip <project> ...for internal path
Nested flow.toml projects are supported. Example:
f rip linsa bootstrap
f rp linsa opencode-codex-loginBoth target ~/run/i/linsa (unless ~/run/linsa also exists).
- Uses explicit
f run --config <dir>/flow.toml <task>internally. - Avoids task-lookup ambiguity when nested
flow.tomlfiles exist. - Blocks unsafe paths (
/absolute,..traversal) for run repo/project selectors.
f run-list # list all flow.toml repos/projects under ~/run (recursive)
f run-sync # sync all git repos under ~/run (recursive)
f run-sync i # sync only ~/run/iTask shortcuts are powered by:
scripts/run-repos.shDirect script commands:
bash ./scripts/run-repos.sh r <task> [args...]
bash ./scripts/run-repos.sh ri <task> [args...]
bash ./scripts/run-repos.sh rp <project> <task> [args...]
bash ./scripts/run-repos.sh rip <project> <task> [args...]RUN_ROOT can be overridden for testing:
RUN_ROOT=/tmp/my-run-layout f rp linsa whoami