Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
066be28
fix(codex): reap session daemon; thread-aware resume
claude Jun 3, 2026
49ea02f
fix(exec): cap .odw/runs with a retention policy
claude Jun 3, 2026
d6a064a
feat(odw): add reviewed parallel worktree starter
claude Jun 3, 2026
5822d66
fix(odw): satisfy clippy sort lint
claude Jun 3, 2026
e08b8b6
fix(odw): protect fresh runs during retention
claude Jun 3, 2026
9d1c06b
fix(codex): preserve pending input on needs-input exit
claude Jun 3, 2026
0ed6539
fix(odw): target review repairs by primary blocker file
claude Jun 3, 2026
a44e735
test(odw): cover large-batch default repair rounds
claude Jun 3, 2026
abf6061
fix(odw): clarify new-file review workspace status
claude Jun 3, 2026
9ce59dc
fix(odw): block duplicate parallel task file ownership
claude Jun 3, 2026
f3400c7
fix(odw): require stable unique parallel task ids
claude Jun 3, 2026
12672ed
fix(odw): require declared file ownership for parallel tasks
claude Jun 3, 2026
7bbd9c2
fix(odw): validate parallel task file paths
claude Jun 3, 2026
4669315
fix(odw): require non-empty parallel task prompts
claude Jun 3, 2026
d591fbd
fix(odw): harden structured review prompts
claude Jun 3, 2026
8998fef
fix(odw): share batch context with parallel tasks
claude Jun 3, 2026
da4efdd
fix(odw): plan parallel tasks from high-level requests
claude Jun 3, 2026
73f6be6
fix(odw): extract structured output before truncation
claude Jun 3, 2026
7154003
fix(odw): constrain planned task runtimes
claude Jun 3, 2026
a3edeb0
fix(odw): summarize workflow history in runs show
claude Jun 3, 2026
ce99437
fix(odw): summarize workflow history in reports
claude Jun 3, 2026
30e8b0c
fix(odw): make runs list scannable
claude Jun 3, 2026
39c960f
fix(odw): surface failed run causes
claude Jun 3, 2026
451a800
ci: opt actions into node 24 runtime
claude Jun 3, 2026
b849988
ci: upgrade github actions runtimes
claude Jun 3, 2026
ab793b2
fix(pandacode): clarify task help text
claude Jun 3, 2026
2ed7da8
fix(pandacode): summarize inspection commands
claude Jun 3, 2026
e9013c8
fix(odw): repair review root-cause files
claude Jun 3, 2026
72d6780
fix(odw): preserve patch context when combining diffs
claude Jun 3, 2026
54ebbb6
fix(odw): surface review preflight blockers
claude Jun 3, 2026
50edef1
fix(odw): repair symbol-named root causes
claude Jun 3, 2026
a36877d
fix(odw): prefer defined symbols for repair matching
claude Jun 3, 2026
b6c3990
fix(odw): show review blocker samples in history
claude Jun 3, 2026
b0fe93b
fix(odw): scale default review rounds by task count
claude Jun 3, 2026
c0d9c7f
fix(pandacode): fallback status for completed codex sessions
claude Jun 3, 2026
b1d32b6
fix(pandacode): show codex sessions while starting
claude Jun 3, 2026
b238689
fix(odw): avoid prompt-symbol repair overmatching
claude Jun 4, 2026
67603e7
Dogfood ODW Codex backend orchestration
claude Jun 4, 2026
c5f5521
Record ODW dogfood commit evidence
claude Jun 4, 2026
b17dc59
pandacode 0.4.0: direct codex app-server + detach/wait/gc + multi-mod…
claude Jun 10, 2026
adf63d3
pandacode: remove codexctl_bin flag — full split from codexctl
claude Jun 10, 2026
d706289
odw + pandacode: complete the codexctl split
claude Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@ jobs:
gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Install Node (odw selftest runs under cargo test)
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 20
- name: Cache cargo
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: |
~/.cargo/registry
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

66 changes: 43 additions & 23 deletions odw/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ for the full self-contained usage guide, then write a workflow script and run it

```bash
odw guide # how to author + run (self-contained)
odw starter parallel-review-apply > wf.js # reusable large-project workflow
odw exec --script wf.js --input-file input.json --backend pandacode
odw exec --resume latest
odw runs show latest
Expand All @@ -32,10 +33,10 @@ Agent or CLI caller
-> pandacode claude|codex|bamboo exec
```

Claude Code remains an optional caller and compatibility surface through `/odw`
and `/workflows`. It is not required for the core path. Worker failures are also
part of the contract: failed workers return structured error feedback instead of
unclassified prose.
Claude Code, Codex, shell scripts, CI, or another agent can call the same CLI and
workflow files. ODW itself does not install slash commands or project files.
Worker failures are also part of the contract: failed workers return structured
error feedback instead of unclassified prose.

ODW is a pure orchestration runtime: the only executor backend is `pandacode`
(plus `mock` for token-free smoke tests). All Codex/Claude/Bamboo execution —
Expand Down Expand Up @@ -64,6 +65,7 @@ The binary is self-documenting, so any agent can use it straight from the CLI:

```bash
odw guide # the full self-contained authoring + run guide (read this first)
odw starter --list # built-in workflow templates
odw doctor # check node + the pandacode executor are wired up
odw spec | odw contract # machine-readable API types + the authoring contract
```
Expand Down Expand Up @@ -167,18 +169,30 @@ If blocked or failed, return .odw/schemas/error-feedback.schema.json.
));
```

## Claude Usage
## External Agent Usage

Inside Claude Code:
Any agent can use ODW through the CLI. The reliable bootstrap is:

```text
/odw-audit src/routes for missing auth checks
/odw-ship implement the agreed billing permission fix
/odw-flow decompose this feature into parallel Codex tasks
```bash
odw guide
odw starter parallel-review-apply > wf.js
odw exec --script wf.js --input-file input.json --backend pandacode
```

Claude should load `.odw/framework/workflow-api.d.ts` and write or adapt a
workflow with this shape:
The built-in starter is the large-project path: parallel Codex worktrees,
candidate-worktree review, bounded repair/re-review, approve-only atomic
landing, and read-only final verification. It repairs failed implementation
nodes or cross-owned file edits before review; declare each task with `task.file`
or `task.files` when you want maximum control. For lower decision cost, pass a
high-level `request` or `spec` without `tasks`; the starter first asks a
structured planner to produce owned task files, then runs the same preflight,
review, apply, and verification gates. Set `strictTaskFileBoundaries:false` only
with explicit owner intent. It also refuses to run when declared task files are
already dirty, because isolated worktrees branch from `HEAD`; commit/stash those
files first or pass `allowDirtyTaskFiles:true` only when the owner accepts that
workers will not see the dirty changes.

Then write or adapt a workflow with this shape:

```js
phase("Research", "read files");
Expand Down Expand Up @@ -246,22 +260,22 @@ agent(...))`.
bamboo are unreliable at structured output). If `schema` is omitted, ODW applies
no default schema.
- `error feedback`: `.odw/schemas/error-feedback.schema.json` is the standard
result when a worker, command, schema, or CodexCTL step fails.
result when a worker, command, schema, or Codex step fails.

`odw-orchestrator` plans and routes. The workflow script owns executable
branching, fan-out, loops, intermediate state, and final aggregation.

## Lifecycle

- run: `odw exec --script <workflow.js> --input <json> --backend <mock|pandacode>`
- optional Claude run: `/odw`, `/odw-audit`, `/odw-ship`, `/odw-flow`
- watch: `odw runs show latest`; optional Claude watch: `/workflows`
- watch: `odw runs show latest`
- pause/resume: `odw exec --resume latest`
- stop: stop the invoking process, or use `/workflows` for Claude-launched runs
- stop: stop the invoking process
- restart node: direct exec resumes by the stable `prompt + options` cache key;
completed nodes are skipped from state (editing a node's prompt re-runs it)
- live logs: `odw exec` streams node progress
- local journals: `odw runs list` and `odw runs show latest`
- local journals: `odw runs list` and `odw runs show latest`; use
`odw runs list --json` for the raw machine-readable list

## CLI

Expand All @@ -275,7 +289,8 @@ odw exec --script wf.js --input '{"goal":"x"}' --backend mock # token-free dry
odw exec --script wf.js --backend pandacode # real run
odw exec --resume latest
odw report --script wf.js --open # HTML execution-graph preview
odw runs list
odw runs list # compact run list
odw runs list --json # raw run records
odw runs show latest
```

Expand Down Expand Up @@ -350,7 +365,11 @@ runtime behaviors:
- **`isolation: "worktree"`.** Set it on an `agent(...)` node to run its executor
in a throwaway git worktree branched from `cwd`, so file-mutating agents in a
`parallel(...)` group do not conflict. The worktree is removed on success,
error, or timeout. Requires `cwd` to be a git repo.
error, or timeout. Requires `cwd` to be a git repo. Captured diffs can be
reviewed with `reviewWorktreeDiffs(results)` before landing; reviewers run in a
temporary candidate worktree where the combined diff is already applied. Land
only an `approve` gate with `applyWorktreeDiffs(results)`, which is atomic by
default.
- **Real `budget`.** Seed `args.budget.total` (tokens). `budget.spent()` sums
each node's **total** token usage (input + output + cache + reasoning) from
PandaCode reports. **This differs from the built-in tool, whose `spent()` counts
Expand Down Expand Up @@ -432,18 +451,19 @@ Honest tradeoffs — reach for the built-in Workflow when these matter:
Implemented now:

- Rust CLI named `odw`
- Open Dynamic Workflow project pack installer
- direct workflow script contract
- direct JavaScript runner through `odw exec`
- prompt-slot injection for node prompts
- complex flow starter with dynamic fan-out, join, parallel review, quality gate,
and bounded rework loop
- reusable large-project example: parallel Codex worktrees → candidate-workspace
review gate → approve-only atomic landing → read-only verification guard
- framework `.d.ts` and runtime contract docs
- project-level Claude Code agent types
- slash commands and starter workflow scripts
- built-in `odw starter parallel-review-apply`
- worker output schemas
- saved workflow artifact evidence reader
- live run journals under `.odw/runs`
- compact `odw runs show` summaries with report paths
- self-contained HTML execution reports
- checkpointed direct resume with `odw exec --resume`
- single-shot Codex execution through PandaCode (`runtime: "codex"`)
- Bamboo provider dispatch through PandaCode (`runtime: "bamboo", provider`)
Expand Down
2 changes: 1 addition & 1 deletion odw/docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ Open Dynamic Workflow maps the requested workflow controls as follows:
| dynamic task fan-out | `fanout(items, mapper)` maps structured upstream output into downstream workflow nodes |
| pipeline phases | `pipeline(items, ...stages)` plus normal script variables in starter workflows |
| live logs | `odw exec` streams workflow/phase/node/checkpoint events and writes `.odw/runs/<run_id>/events.jsonl` |
| local run journal | `odw runs list` / `odw runs show latest` |
| local run journal | `odw runs list` (or `--json`) / `odw runs show latest` |
| direct-run resume | `odw exec --resume <run_id|latest>` skips completed stable node ids |
| stop | stop the invoking process |
| save script | workflow scripts are normal files |
Expand Down
2 changes: 1 addition & 1 deletion odw/docs/FIRST_USER.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ Direct runner:
- run: `odw exec --script <workflow.js> --input <json> --backend <mock|pandacode>`
- observe: `odw runs show latest`
- resume a direct run: `odw exec --resume latest`
- list runs: `odw runs list --path .`
- list runs: `odw runs list --path .` (`--json` keeps the raw records)

Use `odw workflows remove <name>` for filesystem cleanup.

Expand Down
Loading