Litplan: ingest papers, compile pipeline IR, run multi-agent workflows.
Project description
Litplan
Litplan turns a research paper into structured document data, a checked and versioned PipelineSpec, optional approval records, and either a reference execution path or workflow files for your own runtime. It is the governed-plan layer, not a replacement for Snakemake, Nextflow, Airflow, or your HPC stack.
Start Here
Prerequisites
- Python 3.11+
- uv
- Docker, only if you want live PDF ingest via GROBID
- An LLM API key, only if you want live goal-driven planning
Run these commands from the repository root:
uv sync
cp .env.example .env
uv run litplan environment
uv run litplan ingest fixtures/tei/structural_minimal.tei.xml \
--parser-route tei_fixture_replay \
--document-ir
What to expect:
uv syncinstalls the package and CLI fromuv.lock.cp .env.example .envgives you a local config file; it defaults toLITPLAN_LLM_PROVIDER=stub, so this path stays offline.uv run litplan environmentprints JSON hints about paths and config resolution.- The offline
ingestcommand should return JSON with"ok": trueand inlineDocumentIRoutput.
Choose Your Path
| Path | Use it when | Needs | First step |
|---|---|---|---|
| Offline demo | You want a first successful run with no external services | uv |
Run the tei_fixture_replay ingest command above |
| Live PDF ingest | You want to parse a real PDF through GROBID | Docker + GROBID | docker compose -f docker-compose.grobid.yml up -d |
| LLM planning | You want plan-compile to draft a pipeline from a goal |
A real provider in .env plus a matching API key |
Set LITPLAN_LLM_PROVIDER and provider key in .env |
| Workflow export | You want Snakemake, Nextflow, or Airflow files from a stored run | A persisted run in the local DB | Compile with --create-run, then approve, then export-workflow |
Fastest Successful Runs
1. Offline ingest demo
This is the fastest self-contained path and works in a fresh checkout after uv sync.
uv run litplan ingest fixtures/tei/structural_minimal.tei.xml \
--parser-route tei_fixture_replay \
--document-ir
Expected outcome:
- You should get JSON output with
"ok": true. - You should get inline
DocumentIRJSON. - No Docker, database, or API key is required.
2. Persist a local run
Use this when you want approvals, execution, status, or export commands to work against the local SQLite store.
export LITPLAN_HOME="$(pwd)/.litplan-home"
uv run alembic upgrade head
RUN_ID="examples-linear-chain-run-$(date +%s)"
uv run litplan compile fixtures/workflowgen/pipeline_specs/linear_chain.json \
--pipeline-id examples.linear_chain \
--lockfile uv.lock \
--run-id "$RUN_ID" \
--create-run
Expected outcome:
- This creates
.litplan-home/and initializes the SQLite schema there. - The compile command should return
"ok": true. - The run and compiled revision are now persisted for later
approve,run-status,execute, and export commands.
3. Live PDF ingest with GROBID
If PDF ingest is the feature you care about, this is the shortest working setup.
Start GROBID:
docker compose -f docker-compose.grobid.yml up -d
curl -fsSL http://127.0.0.1:8070/api/isalive
Then set LITPLAN_GROBID_URL=http://127.0.0.1:8070 in .env and run:
uv run litplan ingest \
fixtures/papers/pdf/batatia-2022-mace-force-fields-arxiv-2206.07697v2.pdf \
--document-ir
Expected outcome:
- The health check should print an
aliveresponse from GROBID. - The ingest command should return
"ok": true. - You should get parsed document metadata and, with
--document-ir, inlineDocumentIRJSON for the PDF.
4. Live LLM planning
For this path, change .env from the default stub provider to a real provider and add its key. Example:
LITPLAN_LLM_PROVIDER=gemini
GOOGLE_API_KEY=your-real-key
Then run:
uv run litplan plan-compile "build linear noop pipeline" \
--pipeline-id examples.goal_demo \
--lockfile uv.lock \
--expanded-spec
Expected outcome:
- The command should return
"ok": truewhen the provider is configured correctly. - You should get a compiled pipeline result and expanded spec JSON.
- Use
compileinstead ofplan-compilewhen you already have fullPipelineSpecJSON and do not want an LLM involved.
5. Workflow export
Once you have a persisted run, you can approve it and generate engine-native workflow files.
uv run litplan approve "$RUN_ID"
uv run litplan export-workflow "$RUN_ID" snakemake ./tmp/workflow-out
Expected outcome:
approverecords a non-pending run status forRUN_ID.export-workflowwrites files under./tmp/workflow-out.- You can switch
snakemaketonextfloworairflow.
Main Commands
| Command | What it does |
|---|---|
litplan ingest |
Parse a PDF or TEI file into DocumentIR; can include inline JSON output |
litplan compile |
Validate and compile a PipelineSpec JSON input |
litplan plan-compile |
Use a goal-driven planner, then run the same compiler |
litplan approve |
Record approval or other status transitions for a run |
litplan execute |
Execute a persisted approved run through the reference Prefect path |
litplan run-status |
Show unified run, planning, and execution status |
litplan export-audit-bundle |
Write a reproducibility-oriented bundle for a run |
litplan export-workflow |
Generate Snakemake, Nextflow, or Airflow files from a stored revision |
litplan environment |
Print non-secret environment and path hints |
Run uv run litplan --help for the full CLI and option details.
Project Surfaces
- CLI:
uv run litplan - MCP server:
uv run litplan-mcp - Python library:
import litplan - Streamlit UI (optional):
uv run streamlit run src/litplan/ui/plan_draft_app.py
The CLI and MCP server call the same shared JSON tool layer, so they expose the same core operations.
Streamlit UI
The optional Streamlit app is a browser UI on top of the same SQLite project database. You can edit PlanDraft text and compare it to a prior draft, append approval records, append hallucination flags with chunk provenance, and load unified run status (LangGraph checkpoints, run timeline, execute-phase node checkpoints, OpenTelemetry hints). Ingest, compile, plan-compile, approve, execute, export, and other pipeline steps still run from the CLI or MCP; the UI does not replace those tools.
From the repository root, after uv sync and uv run alembic upgrade head for your chosen LITPLAN_HOME:
export LITPLAN_HOME="$(pwd)/.litplan-home"
uv run streamlit run src/litplan/ui/plan_draft_app.py
For a full step-by-step (including diff panels, approvals, flags, and run explorer), see Part 3 in MANUAL_CLI_MCP_UI_WORKFLOW.md.
Examples
Library-first examples live in examples/:
examples/paper_repro_sketch_tei.py: saved TEI ->DocumentIR-> chunking -> hand-authoredPipelineSpec-> compileexamples/paper_repro_sketch_pdf.py: PDF path -> live GROBID ingest -> the same chunk/plan/compile flow
Run them from the repository root:
uv run python examples/paper_repro_sketch_tei.py
uv run python examples/paper_repro_sketch_pdf.py \
fixtures/papers/pdf/batatia-2022-mace-force-fields-arxiv-2206.07697v2.pdf
What To Expect
- The package version is 0.0.1 (see
pyproject.toml); pre-1.0 semver releases may still evolve public APIs. - Offline and stub-backed flows remain supported for local development and tests.
- The bundled
executepath demonstrates orchestration, retries, checkpoints, and bookkeeping; use your own workflow engine or cluster stack for production-scale execution.
Where To Go Next
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file litplan-0.0.1.tar.gz.
File metadata
- Download URL: litplan-0.0.1.tar.gz
- Upload date:
- Size: 9.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05e1dec27268a485c6d86b01d018b66ad3f0769d9fe7078858017d55823dbcb8
|
|
| MD5 |
57c205c6265599fc59c2fd6904e225dc
|
|
| BLAKE2b-256 |
c45c98e209ce1c3c8fe61e50fc2815927354363c96b20f3a27ad1f9468790edf
|
Provenance
The following attestation bundles were made for litplan-0.0.1.tar.gz:
Publisher:
publish-pypi.yml on bogwi/litplan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
litplan-0.0.1.tar.gz -
Subject digest:
05e1dec27268a485c6d86b01d018b66ad3f0769d9fe7078858017d55823dbcb8 - Sigstore transparency entry: 1239304316
- Sigstore integration time:
-
Permalink:
bogwi/litplan@02f8bd350670d4d03b907b01ba2602d6123402be -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/bogwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@02f8bd350670d4d03b907b01ba2602d6123402be -
Trigger Event:
push
-
Statement type:
File details
Details for the file litplan-0.0.1-py3-none-any.whl.
File metadata
- Download URL: litplan-0.0.1-py3-none-any.whl
- Upload date:
- Size: 138.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa884e01f3b306c8f32abaaeeb9016db3ad7db571c0378f7b8f8b994bc977d42
|
|
| MD5 |
7ae581aabb050dc0ee92e9f4dce556b3
|
|
| BLAKE2b-256 |
5856c9ef0d4f8bb815f63f110e69bc15c3fcab26d1f0c9d86b09224da4482999
|
Provenance
The following attestation bundles were made for litplan-0.0.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on bogwi/litplan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
litplan-0.0.1-py3-none-any.whl -
Subject digest:
aa884e01f3b306c8f32abaaeeb9016db3ad7db571c0378f7b8f8b994bc977d42 - Sigstore transparency entry: 1239304320
- Sigstore integration time:
-
Permalink:
bogwi/litplan@02f8bd350670d4d03b907b01ba2602d6123402be -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/bogwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@02f8bd350670d4d03b907b01ba2602d6123402be -
Trigger Event:
push
-
Statement type: