Pipeline Router
“Routing” usually means two different things:
- •Pipeline selection + lock: choose a single pipeline and write
PIPELINE.lock.md. - •Checkpoint routing: keep the run auditable by drafting/updating checkpoint blocks in
DECISIONS.md(and, forC0, seedingqueries.mdfromGOAL.md).
This skill supports both, but keeps the semantic choice LLM-first and the repetitive checkpoint scaffolding scriptable.
Inputs
Workspace context (when available):
- •
GOAL.md - •
STATUS.md - •
DECISIONS.md - •
PIPELINE.lock.md
Optional template:
- •
assets/pipeline-selection-form.md
Outputs
- •
PIPELINE.lock.md(Mode A; selection + lock) - •Updates to
DECISIONS.md(all modes; checkpoint blocks + approvals checklist) - •
queries.md(best-effort forC0; seeded fromGOAL.md) - •Optional: updates to
STATUS.md
Decision tree (selection)
User goal → choose:
- •“survey / 综述 / 调研” →
pipelines/arxiv-survey.pipeline.md - •“survey + PDF / LaTeX / 可编译” →
pipelines/arxiv-survey-latex.pipeline.md - •“tutorial / 教程” →
pipelines/tutorial.pipeline.md - •“systematic review / PRISMA / 系统综述” →
pipelines/systematic-review.pipeline.md - •“peer review / 审稿” →
pipelines/peer-review.pipeline.md - •“snapshot / 速览” →
pipelines/lit-snapshot.pipeline.md
Workflow
Mode A — selection + lock (LLM-first)
- •Read the goal from
GOAL.md(or the user message). - •If key details are missing, use
assets/pipeline-selection-form.mdto draft a concise question list intoDECISIONS.mdand stop. - •Select exactly one pipeline under
pipelines/*.pipeline.md. - •Write
PIPELINE.lock.mdwith:- •
pipeline: <path> - •
units_template: <path from pipeline front matter> - •
locked_at: <YYYY-MM-DD>
- •
- •Update
STATUS.md(“Current pipeline” + checkpoint).
Mode B — checkpoint blocks (script helper)
Use the helper to keep DECISIONS.md in sync with checkpoints:
- •Kickoff questions + seed queries (C0):
- •
python .codex/skills/pipeline-router/scripts/run.py --workspace <ws> --checkpoint C0
- •
- •Scope/outline approval summary (C2):
- •
python .codex/skills/pipeline-router/scripts/run.py --workspace <ws> --checkpoint C2
- •
- •Other checkpoints:
- •
python .codex/skills/pipeline-router/scripts/run.py --workspace <ws> --checkpoint C1
- •
Quality checklist
- •
DECISIONS.mdhas a checkpoint block for the activeC*. - • Approvals checklist exists and includes
Approve C*checkboxes. - • If selection was needed,
PIPELINE.lock.mdpoints to exactly one pipeline file. - • If the run is retrieval-based,
queries.mdis non-empty afterC0seeding.
Side effects
- •Allowed: create/update
PIPELINE.lock.md; editSTATUS.md; append/updateDECISIONS.md; seedqueries.md. - •Not allowed: modify files under
.codex/skills/assets/templates.
Script
Quick Start
- •
python .codex/skills/pipeline-router/scripts/run.py --help - •
python .codex/skills/pipeline-router/scripts/run.py --workspace <workspace_dir> --checkpoint C0
All Options
- •
--checkpoint <C0|C1|C2|...>: which checkpoint block to draft/update (unknown checkpoints get a generic template)
Examples
- •Kickoff questions + seed queries:
- •
python .codex/skills/pipeline-router/scripts/run.py --workspace <ws> --checkpoint C0
- •
- •Generic protocol approval block (systematic review C1):
- •
python .codex/skills/pipeline-router/scripts/run.py --workspace <ws> --checkpoint C1
- •
- •Scope/outline approval summary:
- •
python .codex/skills/pipeline-router/scripts/run.py --workspace <ws> --checkpoint C2
- •
Notes
- •
python scripts/pipeline.py kickoff|initwritesPIPELINE.lock.mdand then (best-effort) runs this script forC0. - •The script reads
PIPELINE.lock.md(if present) to display the pipeline in the kickoff block; it does not choose the pipeline.
Troubleshooting
Issue: PIPELINE.lock.md points to one pipeline but UNITS.csv looks like another
Cause:
- •Workspace was initialized from one pipeline and later re-pointed without updating
UNITS.csv.
Fix:
- •Re-run
python scripts/pipeline.py init --workspace <ws> --pipeline <name> --overwrite-units, or copy the correcttemplates/UNITS.*.csvintoUNITS.csv.