MCPcopy Index your code
hub / github.com/Pipelex/pipelex

github.com/Pipelex/pipelex @v0.37.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.37.0 ↗ · + Follow
12,197 symbols 66,493 edges 1,815 files 7,523 documented · 62%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Pipelex Logo

Build & Run AI Methods

A method is a reusable, typed AI procedure — declared in a .mthds file and executed by Pipelex.

Each step is explicit, each output is structured, and every run is repeatable.

<a href="https://go.pipelex.com/demo"><strong>Demo</strong></a> -
<a href="https://docs.pipelex.com/"><strong>Documentation</strong></a> -
<a href="https://mthds.sh"><strong>Hub</strong></a> -
<a href="https://github.com/Pipelex/pipelex/issues"><strong>Report Bug</strong></a> -
<a href="https://github.com/Pipelex/pipelex/discussions"><strong>Feature Request</strong></a>










<a href="https://github.com/Pipelex/pipelex/raw/v0.37.0/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License"></a>
<a href="https://github.com/Pipelex/pipelex/tree/main/tests"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/Pipelex/pipelex/main/.badges/tests.json" alt="Tests"></a>
<a href="https://pypi.org/project/pipelex/"><img src="https://img.shields.io/pypi/v/pipelex?logo=pypi&logoColor=white&color=blue&style=flat-square"
 alt="PyPI – latest release"></a>



<a href="https://go.pipelex.com/discord"><img src="https://img.shields.io/badge/Discord-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
<a href="https://www.youtube.com/@PipelexAI"><img src="https://img.shields.io/badge/YouTube-FF0000?logo=youtube&logoColor=white" alt="YouTube"></a>
<a href="https://pipelex.com"><img src="https://img.shields.io/badge/Homepage-03bb95?logo=google-chrome&logoColor=white&style=flat" alt="Website"></a>
<a href="https://github.com/Pipelex/pipelex-cookbook/tree/main"><img src="https://img.shields.io/badge/Cookbook-5a0dad?logo=github&logoColor=white&style=flat" alt="Cookbook"></a>
<a href="https://docs.pipelex.com/"><img src="https://img.shields.io/badge/Docs-03bb95?logo=read-the-docs&logoColor=white&style=flat" alt="Documentation"></a>
<a href="https://docs.pipelex.com/changelog/"><img src="https://img.shields.io/badge/Changelog-03bb95?logo=git&logoColor=white&style=flat" alt="Changelog"></a>

Claude Code + Pipelex + MTHDS

What a Method Looks Like

[pipe.summarize_article]
type    = "PipeLLM"
inputs  = { article = "Text", audience = "Text" }
output  = "Text"
prompt  = "Summarize $article in three bullet points for $audience."

From here, Pipelex handles model routing across 60+ models, structured output parsing, and pipeline orchestration.

Why Methods?

Declarative — Human-readable .mthds files that work across models Typed — Semantic types: AI understands what you mean, every input/output connects with purpose
Repeatable — Deterministic orchestration with controlled room for AI creativity Composable — Chain pipes into sequences, nest methods inside methods, share with the community

Quick Start

With Claude Code (Recommended)

Paste this into Claude Code:

Install mthds: run bash -c 'npm install -g mthds && mthds-agent bootstrap && claude plugin marketplace add mthds-ai/mthds-plugins && claude plugin install mthds@mthds-plugins'. Then tell me to /reload-plugins.

Build your first method:

/mthds-build A method to summarize articles with key takeaways for different audiences

Run it:

/mthds-run

With Codex

Paste this into Codex:

Install mthds: run bash -c 'npm install -g mthds && mthds-agent bootstrap && mthds-agent codex install-hook && mthds-agent codex apply-config && codex plugin marketplace add mthds-ai/mthds-plugins'. Then tell me to restart Codex and run /plugins to install mthds.

Install the VS Code extension for .mthds syntax highlighting and flowchart visualization.

From the Terminal

npm install -g mthds
mthds-agent bootstrap
pipelex init

Install the VS Code extension for .mthds syntax highlighting and flowchart visualization.

Verify everything is set up correctly:

pipelex doctor

Standalone CLI

If you just need the Pipelex CLI without agent integration:

uv tool install pipelex
pipelex init

Configure AI Access

  • Pipelex Gateway (Recommended) — Free credits, single API key for LLMs, OCR / document extraction, and image generation across all major providers. Get your key, add PIPELEX_GATEWAY_API_KEY=your-key-here to ~/.pipelex/.env, run pipelex init.
  • Bring Your Own Keys — Use existing API keys from OpenAI, Anthropic, Google, Mistral, etc. See Configure AI Providers.
  • Local AI — Ollama, vLLM, LM Studio, or llama.cpp — no API keys required. See Configure AI Providers.

Real-World Example: CV Batch Screening

A production method that takes a stack of CVs and a job offer PDF, extracts and analyzes each, then scores how well each candidate matches the role.

cv_batch_screening.mthds

[pipe.batch_analyze_cvs_for_job_offer]
type = "PipeSequence"
description = """
Main orchestrator pipe that takes a bunch of CVs and a job offer in PDF format, and analyzes how they match.
"""
inputs = { cvs = "Document[]", job_offer_pdf = "Document" }
output = "CandidateMatch[]"
steps = [
  { pipe = "prepare_job_offer", result = "job_requirements" },
  { pipe = "process_cv", batch_over = "cvs", batch_as = "cv_pdf", result = "match_analyses" },
]

View concepts, supporting pipes, flowchart, and run commands

Concepts:

[concept.CandidateProfile]
description = "A structured summary of a job candidate's professional background extracted from their CV."

[concept.CandidateProfile.structure]
skills       = { type = "text", description = "Technical and soft skills possessed by the candidate", required = true }
experience   = { type = "text", description = "Work history and professional experience", required = true }
education    = { type = "text", description = "Educational background and qualifications", required = true }
achievements = { type = "text", description = "Notable accomplishments and certifications" }

[concept.JobRequirements]
description = "A structured summary of what a job position requires from candidates."

[concept.JobRequirements.structure]
required_skills  = { type = "text", description = "Skills that are mandatory for the position", required = true }
responsibilities = { type = "text", description = "Main duties and tasks of the role", required = true }
qualifications   = { type = "text", description = "Required education, certifications, or experience levels", required = true }
nice_to_haves    = { type = "text", description = "Preferred but not mandatory qualifications" }

[concept.CandidateMatch]
description = "An evaluation of how well a candidate fits a job position."

[concept.CandidateMatch.structure]
match_score        = { type = "number", description = "Numerical score representing overall fit percentage between 0 and 100", required = true }
strengths          = { type = "text", description = "Areas where the candidate meets or exceeds requirements", required = true }
gaps               = { type = "text", description = "Areas where the candidate falls short of requirements", required = true }
overall_assessment = { type = "text", description = "Summary evaluation of the candidate's suitability", required = true }

Click to view the supporting pipes implementation

[pipe.prepare_job_offer]
type = "PipeSequence"
description = """
Extracts and analyzes the job offer PDF to produce structured job requirements.
"""
inputs = { job_offer_pdf = "Document" }
output = "JobRequirements"
steps = [
  { pipe = "extract_one_job_offer", result = "job_offer_pages" },
  { pipe = "analyze_job_requirements", result = "job_requirements" },
]

[pipe.extract_one_job_offer]
type        = "PipeExtract"
description = "Extracts text content from the job offer PDF document"
inputs      = { job_offer_pdf = "Document" }
output      = "Page[]"
model       = "@default-text-from-pdf"

[pipe.analyze_job_requirements]
type = "PipeLLM"
description = """
Parses and summarizes the job requirements from the extracted job offer content, identifying required skills, responsibilities, qualifications, and nice-to-haves
"""
inputs = { job_offer_pages = "Page" }
output = "JobRequirements"
model = "$writing-factual"
system_prompt = """
You are an expert HR analyst specializing in parsing job descriptions. Your task is to extract and summarize job requirements into a structured format.
"""
prompt = """
Analyze the following job offer content and extract the key requirements for the position.

@job_offer_pages
"""

[pipe.process_cv]
type = "PipeSequence"
description = "Processes one application"
inputs = { cv_pdf = "Document", job_requirements = "JobRequirements" }
output = "CandidateMatch"
steps = [
  { pipe = "extract_one_cv", result = "cv_pages" },
  { pipe = "analyze_one_cv", result = "candidate_profile" },
  { pipe = "analyze_match", result = "match_analysis" },
]

[pipe.extract_one_cv]
type        = "PipeExtract"
description = "Extracts text content from the CV PDF document"
inputs      = { cv_pdf = "Document" }
output      = "Page[]"
model       = "@default-text-from-pdf"

[pipe.analyze_one_cv]
type = "PipeLLM"
description = """
Parses and summarizes the candidate's professional profile from the extracted CV content, identifying skills, experience, education, and achievements
"""
inputs = { cv_pages = "Page" }
output = "CandidateProfile"
model = "$writing-factual"
system_prompt = """
You are an expert HR analyst specializing in parsing and summarizing candidate CVs. Your task is to extract and structure the candidate's professional profile into a structured format.
"""
prompt = """
Analyze the following CV content and extract the candidate's professional profile.

@cv_pages
"""

[pipe.analyze_match]
type = "PipeLLM"
description = """
Evaluates how well the candidate matches the job requirements, calculating a match score and identifying strengths and gaps
"""
inputs = { candidate_profile = "CandidateProfile", job_requirements = "JobRequirements" }
output = "CandidateMatch"
model = "$writing-factual"
system_prompt = """
You are an expert HR analyst specializing in candidate-job fit evaluation. Your task is to produce a structured match analysis comparing a candidate's profile against job requirements.
"""
prompt = """
Analyze how well the candidate matches the job requirements. Evaluate their fit by comparing their skills, experience, and qualifications against what the position demands.

@candidate_profile

@job_requirements

Provide a comprehensive match analysis including a numerical score, identified strengths, gaps, and an overall assessment.
"""

View the pipeline flowchart

```mermaid flowchart LR %% Pipe and stuff nodes within controller subgraphs subgraph sg_n_8b2136e3fe["batch_analyze_cvs_for_job_offer"] subgraph sg_n_91d5d6dc7c["prepare_job_offer"] n_fde22777cb["analyze_job_requirements"] s_f9f703fbb4(["job_requirements

JobRequirements"]):::stuff n_b8469c838f["extract_one_job_offer"] s_d998350046(["job_offer_pages

Page"]):::stuff end subgraph sg_n_f8d5afb7cd["process_cv_batch"] subgraph sg_n_6e53e16369["process_cv"] n_c18aded200["analyze_match"] s_5c911f7e54(["match_analysis

CandidateMatch"]):::stuff n_a7ed00ac24["analyze_one_cv"] s_c5ae714e89(["candidate_profile

CandidateProfile"]):::stuff n_d24f39aa60["extract_one_cv"] s_427beb5195(["cv_pdf

Document"]):::stuff s_f1f80289df(["cv_pages

Page"]):::stuff end subgraph sg_n_2cfb7a32c8["process_cv"] n_f6a25d1769["analyze_match"] s_ea99eee6ed(["match_analysis

CandidateMatch"]):::stuff n_f48b73fbee["analyze_one_cv"] s_e1ffee913e(["candidate_profile

CandidateProfile"]):::stuff n_d16f2fe381["extract_one_cv"] s_041bb18fb4(["cv_pdf

Document"]):::stuff s_5fbba7194a(["cv_pages

Page"]):::stuff end subgraph sg_n_08a7186be9["process_cv"] n_937e750ea4["analyze_match"] s_bb41a103f0(["match_analysis

CandidateMatch"]):::stuff n_786a2969d5["analyze_one_cv"] s_c47fe821d7(["candidate_profile

CandidateProfile"]):::stuff n_38f0cfd11c["extract_one_cv"] s_2634ece93d(["cv_pdf

Document"]):::stuff s_44e253b325(["cv_pages

Page"]):::stuff end end end

%% Pipeline input stuff nodes (no producer)
s_9b7e74ac51(["job_offer_pdf

Document"]):::stuff

%% Data flow edges: producer -> stuff -> consumer
n_a7ed00ac24 --> s_c5ae714e89
n_b8469c838f --> s_d998350046
n_f48b73fbee --> s_e1ffee913e
n_d16f2fe381 --> s_5fbba7194a
n_fde22777cb --> s_f9f703fbb4
n_d24f39aa60 --> s_f1f80289df
n_38f0cfd11c --> s_44e253b325
n_786a2969d5 --> s_c47fe821d7
n_c18aded200 --> s_5c911f7e54
n_f6a25d1769 --> s_ea99eee6ed
n_937e750ea4 --> s_bb41a103f0
s_c5ae714e89

Core symbols most depended-on inside this repo

get
called by 532
pipelex/core/stuffs/stuff_artefact.py
make_from_blueprint
called by 354
pipelex/core/pipes/pipe_factory.py
verbose
called by 306
pipelex/tools/log/log.py
pretty_print
called by 286
pipelex/tools/misc/pretty.py
items
called by 265
pipelex/core/pipes/inputs/input_stuff_specs.py
make_stuff
called by 208
pipelex/core/stuffs/stuff_factory.py
agent_error
called by 166
pipelex/cli/agent_cli/commands/agent_output.py
keys
called by 159
pipelex/tools/jinja2/jinja2_template_registry.py

Shape

Method 7,929
Class 2,446
Function 1,713
Route 109

Languages

Python100%

Modules by API surface

pipelex/hub.py119 symbols
tests/unit/pipelex/cogt/templating/test_template_preprocessor.py102 symbols
tests/unit/pipelex/tools/tabular/test_csv_codec.py78 symbols
pipelex/cogt/exceptions.py71 symbols
tests/unit/pipelex/core/concepts/test_concept_representation_generator.py66 symbols
tests/unit/pipelex/pipe_operators/pipe_compose/test_structured_content_composer.py53 symbols
pipelex/core/memory/working_memory.py50 symbols
tests/unit/pipelex/tools/uri/test_uri_resolver.py48 symbols
tests/unit/pipelex/tools/typing/test_class_utils.py45 symbols
tests/unit/pipelex/cogt/img_gen/test_img_gen_param_support.py41 symbols
tests/integration/pipelex/pipes/operator/pipe_compose_structured/models_for_pipe_compose.py41 symbols
pipelex/core/pipes/pipe_abstract.py41 symbols

For agents

$ claude mcp add pipelex \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact