{"id":28989225,"url":"https://github.com/pipelex/pipelex","last_synced_at":"2026-05-26T01:00:41.211Z","repository":{"id":296009596,"uuid":"990481429","full_name":"Pipelex/pipelex","owner":"Pipelex","description":"Declarative language for composable Al workflows. Devtool for agents and mere humans.","archived":false,"fork":false,"pushed_at":"2026-05-19T19:54:58.000Z","size":70951,"stargazers_count":673,"open_issues_count":15,"forks_count":50,"subscribers_count":10,"default_branch":"main","last_synced_at":"2026-05-19T21:59:07.891Z","etag":null,"topics":["agents","ai","automation","dsl","language","llm","orchestration","pipeline","workflows"],"latest_commit_sha":null,"homepage":"https://pipelex.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Pipelex.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":"CLA.md"}},"created_at":"2025-05-26T07:21:34.000Z","updated_at":"2026-05-19T18:37:23.000Z","dependencies_parsed_at":"2025-07-11T10:07:57.521Z","dependency_job_id":null,"html_url":"https://github.com/Pipelex/pipelex","commit_stats":null,"previous_names":["pipelex/pipelex"],"tags_count":141,"template":false,"template_full_name":null,"purl":"pkg:github/Pipelex/pipelex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pipelex%2Fpipelex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pipelex%2Fpipelex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pipelex%2Fpipelex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pipelex%2Fpipelex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Pipelex","download_url":"https://codeload.github.com/Pipelex/pipelex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Pipelex%2Fpipelex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33499282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T14:31:05.219Z","status":"ssl_error","status_checked_at":"2026-05-25T14:31:02.878Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","ai","automation","dsl","language","llm","orchestration","pipeline","workflows"],"created_at":"2025-06-24T23:01:16.006Z","updated_at":"2026-05-26T01:00:41.205Z","avatar_url":"https://github.com/Pipelex.png","language":"Python","funding_links":[],"categories":["NLP"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.pipelex.com/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/Pipelex/pipelex/main/.github/assets/logo.png\" alt=\"Pipelex Logo\" width=\"400\" style=\"max-width: 100%; height: auto;\"\u003e\u003c/a\u003e\n\n  \u003cbr/\u003e\n  \u003cbr/\u003e\n  \u003cbr/\u003e\n  \u003ch2 align=\"center\"\u003eBuild \u0026 Run AI Methods\u003c/h2\u003e\n  \u003cp align=\"center\"\u003eA method is a reusable, typed AI procedure — declared in a \u003ccode\u003e.mthds\u003c/code\u003e file and executed by Pipelex.\u003cbr/\u003e\nEach step is explicit, each output is structured, and every run is repeatable.\u003c/p\u003e\n\n\n  \u003cdiv\u003e\n    \u003ca href=\"https://go.pipelex.com/demo\"\u003e\u003cstrong\u003eDemo\u003c/strong\u003e\u003c/a\u003e -\n    \u003ca href=\"https://docs.pipelex.com/\"\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/a\u003e -\n    \u003ca href=\"https://mthds.sh\"\u003e\u003cstrong\u003eHub\u003c/strong\u003e\u003c/a\u003e -\n    \u003ca href=\"https://github.com/Pipelex/pipelex/issues\"\u003e\u003cstrong\u003eReport Bug\u003c/strong\u003e\u003c/a\u003e -\n    \u003ca href=\"https://github.com/Pipelex/pipelex/discussions\"\u003e\u003cstrong\u003eFeature Request\u003c/strong\u003e\u003c/a\u003e\n  \u003c/div\u003e\n  \u003cbr/\u003e\n\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"MIT License\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/Pipelex/pipelex/tree/main/tests\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/Pipelex/pipelex/main/.badges/tests.json\" alt=\"Tests\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/pipelex/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/pipelex?logo=pypi\u0026logoColor=white\u0026color=blue\u0026style=flat-square\"\n     alt=\"PyPI – latest release\"\u003e\u003c/a\u003e\n    \u003cbr/\u003e\n    \u003ca href=\"https://go.pipelex.com/discord\"\u003e\u003cimg src=\"https://img.shields.io/badge/Discord-5865F2?logo=discord\u0026logoColor=white\" alt=\"Discord\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.youtube.com/@PipelexAI\"\u003e\u003cimg src=\"https://img.shields.io/badge/YouTube-FF0000?logo=youtube\u0026logoColor=white\" alt=\"YouTube\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pipelex.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Homepage-03bb95?logo=google-chrome\u0026logoColor=white\u0026style=flat\" alt=\"Website\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/Pipelex/pipelex-cookbook/tree/main\"\u003e\u003cimg src=\"https://img.shields.io/badge/Cookbook-5a0dad?logo=github\u0026logoColor=white\u0026style=flat\" alt=\"Cookbook\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://docs.pipelex.com/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docs-03bb95?logo=read-the-docs\u0026logoColor=white\u0026style=flat\" alt=\"Documentation\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://docs.pipelex.com/changelog/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Changelog-03bb95?logo=git\u0026logoColor=white\u0026style=flat\" alt=\"Changelog\"\u003e\u003c/a\u003e\n    \u003cbr/\u003e\n    \u003cbr/\u003e\n\u003c/div\u003e\n\n![Claude Code + Pipelex + MTHDS](https://raw.githubusercontent.com/Pipelex/pipelex/main/.github/assets/Claude-Code-Pipelex-MTHDS-Cursor.png)\n\n\n## What a Method Looks Like\n\n```toml\n[pipe.summarize_article]\ntype    = \"PipeLLM\"\ninputs  = { article = \"Text\", audience = \"Text\" }\noutput  = \"Text\"\nprompt  = \"Summarize $article in three bullet points for $audience.\"\n```\n\nFrom here, Pipelex handles model routing across 60+ models, structured output parsing, and pipeline orchestration.\n\n## Why Methods?\n\n| | |\n|---|---|\n| **Declarative** — Human-readable `.mthds` files that work across models | **Typed** — Semantic types: AI understands what you mean, every input/output connects with purpose |\n| **Repeatable** — Deterministic orchestration with controlled room for AI creativity | **Composable** — Chain pipes into sequences, nest methods inside methods, share with the community |\n\n# Quick Start\n\n## With Claude Code (Recommended)\n\nPaste this into Claude Code:\n\n```\nInstall mthds: run bash -c 'npm install -g mthds \u0026\u0026 mthds-agent bootstrap \u0026\u0026 claude plugin marketplace add mthds-ai/mthds-plugins \u0026\u0026 claude plugin install mthds@mthds-plugins'. Then tell me to /reload-plugins.\n```\n\nBuild your first method:\n\n```\n/mthds-build A method to summarize articles with key takeaways for different audiences\n```\n\nRun it:\n\n```\n/mthds-run\n```\n\n## With Codex\n\nPaste this into Codex:\n\n```\nInstall mthds: run bash -c 'npm install -g mthds \u0026\u0026 mthds-agent bootstrap \u0026\u0026 mthds-agent codex install-hook \u0026\u0026 mthds-agent codex apply-config \u0026\u0026 codex plugin marketplace add mthds-ai/mthds-plugins'. Then tell me to restart Codex and run /plugins to install mthds.\n```\n\nInstall the [VS Code extension](https://go.pipelex.com/vscode) for `.mthds` syntax highlighting and flowchart visualization.\n\n## From the Terminal\n\n```bash\nnpm install -g mthds\nmthds-agent bootstrap\npipelex init\n```\n\nInstall the [VS Code extension](https://go.pipelex.com/vscode) for `.mthds` syntax highlighting and flowchart visualization.\n\nVerify everything is set up correctly:\n\n```bash\npipelex doctor\n```\n\n## Standalone CLI\n\nIf you just need the Pipelex CLI without agent integration:\n\n```bash\nuv tool install pipelex\npipelex init\n```\n\n## Configure AI Access\n\n- **Pipelex Gateway (Recommended)** — Free credits, single API key for LLMs, OCR / document extraction, and image generation across all major providers. [Get your key](https://app.pipelex.com/), add `PIPELEX_GATEWAY_API_KEY=your-key-here` to `~/.pipelex/.env`, run `pipelex init`.\n- **Bring Your Own Keys** — Use existing API keys from OpenAI, Anthropic, Google, Mistral, etc. See [Configure AI Providers](https://docs.pipelex.com/latest/setup/configure-ai-providers/).\n- **Local AI** — Ollama, vLLM, LM Studio, or llama.cpp — no API keys required. See [Configure AI Providers](https://docs.pipelex.com/latest/setup/configure-ai-providers/).\n\n\n# Real-World Example: CV Batch Screening\n\nA 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.\n\n**cv_batch_screening.mthds**\n\n```toml\n[pipe.batch_analyze_cvs_for_job_offer]\ntype = \"PipeSequence\"\ndescription = \"\"\"\nMain orchestrator pipe that takes a bunch of CVs and a job offer in PDF format, and analyzes how they match.\n\"\"\"\ninputs = { cvs = \"Document[]\", job_offer_pdf = \"Document\" }\noutput = \"CandidateMatch[]\"\nsteps = [\n  { pipe = \"prepare_job_offer\", result = \"job_requirements\" },\n  { pipe = \"process_cv\", batch_over = \"cvs\", batch_as = \"cv_pdf\", result = \"match_analyses\" },\n]\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eView concepts, supporting pipes, flowchart, and run commands\u003c/b\u003e\u003c/summary\u003e\n\n**Concepts:**\n\n```toml\n[concept.CandidateProfile]\ndescription = \"A structured summary of a job candidate's professional background extracted from their CV.\"\n\n[concept.CandidateProfile.structure]\nskills       = { type = \"text\", description = \"Technical and soft skills possessed by the candidate\", required = true }\nexperience   = { type = \"text\", description = \"Work history and professional experience\", required = true }\neducation    = { type = \"text\", description = \"Educational background and qualifications\", required = true }\nachievements = { type = \"text\", description = \"Notable accomplishments and certifications\" }\n\n[concept.JobRequirements]\ndescription = \"A structured summary of what a job position requires from candidates.\"\n\n[concept.JobRequirements.structure]\nrequired_skills  = { type = \"text\", description = \"Skills that are mandatory for the position\", required = true }\nresponsibilities = { type = \"text\", description = \"Main duties and tasks of the role\", required = true }\nqualifications   = { type = \"text\", description = \"Required education, certifications, or experience levels\", required = true }\nnice_to_haves    = { type = \"text\", description = \"Preferred but not mandatory qualifications\" }\n\n[concept.CandidateMatch]\ndescription = \"An evaluation of how well a candidate fits a job position.\"\n\n[concept.CandidateMatch.structure]\nmatch_score        = { type = \"number\", description = \"Numerical score representing overall fit percentage between 0 and 100\", required = true }\nstrengths          = { type = \"text\", description = \"Areas where the candidate meets or exceeds requirements\", required = true }\ngaps               = { type = \"text\", description = \"Areas where the candidate falls short of requirements\", required = true }\noverall_assessment = { type = \"text\", description = \"Summary evaluation of the candidate's suitability\", required = true }\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eClick to view the supporting pipes implementation\u003c/b\u003e\u003c/summary\u003e\n\n```toml\n[pipe.prepare_job_offer]\ntype = \"PipeSequence\"\ndescription = \"\"\"\nExtracts and analyzes the job offer PDF to produce structured job requirements.\n\"\"\"\ninputs = { job_offer_pdf = \"Document\" }\noutput = \"JobRequirements\"\nsteps = [\n  { pipe = \"extract_one_job_offer\", result = \"job_offer_pages\" },\n  { pipe = \"analyze_job_requirements\", result = \"job_requirements\" },\n]\n\n[pipe.extract_one_job_offer]\ntype        = \"PipeExtract\"\ndescription = \"Extracts text content from the job offer PDF document\"\ninputs      = { job_offer_pdf = \"Document\" }\noutput      = \"Page[]\"\nmodel       = \"@default-text-from-pdf\"\n\n[pipe.analyze_job_requirements]\ntype = \"PipeLLM\"\ndescription = \"\"\"\nParses and summarizes the job requirements from the extracted job offer content, identifying required skills, responsibilities, qualifications, and nice-to-haves\n\"\"\"\ninputs = { job_offer_pages = \"Page\" }\noutput = \"JobRequirements\"\nmodel = \"$writing-factual\"\nsystem_prompt = \"\"\"\nYou are an expert HR analyst specializing in parsing job descriptions. Your task is to extract and summarize job requirements into a structured format.\n\"\"\"\nprompt = \"\"\"\nAnalyze the following job offer content and extract the key requirements for the position.\n\n@job_offer_pages\n\"\"\"\n\n[pipe.process_cv]\ntype = \"PipeSequence\"\ndescription = \"Processes one application\"\ninputs = { cv_pdf = \"Document\", job_requirements = \"JobRequirements\" }\noutput = \"CandidateMatch\"\nsteps = [\n  { pipe = \"extract_one_cv\", result = \"cv_pages\" },\n  { pipe = \"analyze_one_cv\", result = \"candidate_profile\" },\n  { pipe = \"analyze_match\", result = \"match_analysis\" },\n]\n\n[pipe.extract_one_cv]\ntype        = \"PipeExtract\"\ndescription = \"Extracts text content from the CV PDF document\"\ninputs      = { cv_pdf = \"Document\" }\noutput      = \"Page[]\"\nmodel       = \"@default-text-from-pdf\"\n\n[pipe.analyze_one_cv]\ntype = \"PipeLLM\"\ndescription = \"\"\"\nParses and summarizes the candidate's professional profile from the extracted CV content, identifying skills, experience, education, and achievements\n\"\"\"\ninputs = { cv_pages = \"Page\" }\noutput = \"CandidateProfile\"\nmodel = \"$writing-factual\"\nsystem_prompt = \"\"\"\nYou 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.\n\"\"\"\nprompt = \"\"\"\nAnalyze the following CV content and extract the candidate's professional profile.\n\n@cv_pages\n\"\"\"\n\n[pipe.analyze_match]\ntype = \"PipeLLM\"\ndescription = \"\"\"\nEvaluates how well the candidate matches the job requirements, calculating a match score and identifying strengths and gaps\n\"\"\"\ninputs = { candidate_profile = \"CandidateProfile\", job_requirements = \"JobRequirements\" }\noutput = \"CandidateMatch\"\nmodel = \"$writing-factual\"\nsystem_prompt = \"\"\"\nYou 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.\n\"\"\"\nprompt = \"\"\"\nAnalyze how well the candidate matches the job requirements. Evaluate their fit by comparing their skills, experience, and qualifications against what the position demands.\n\n@candidate_profile\n\n@job_requirements\n\nProvide a comprehensive match analysis including a numerical score, identified strengths, gaps, and an overall assessment.\n\"\"\"\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eView the pipeline flowchart\u003c/b\u003e\u003c/summary\u003e\n\n```mermaid\nflowchart LR\n    %% Pipe and stuff nodes within controller subgraphs\n    subgraph sg_n_8b2136e3fe[\"batch_analyze_cvs_for_job_offer\"]\n        subgraph sg_n_91d5d6dc7c[\"prepare_job_offer\"]\n            n_fde22777cb[\"analyze_job_requirements\"]\n            s_f9f703fbb4([\"job_requirements\u003cbr/\u003eJobRequirements\"]):::stuff\n            n_b8469c838f[\"extract_one_job_offer\"]\n            s_d998350046([\"job_offer_pages\u003cbr/\u003ePage\"]):::stuff\n        end\n        subgraph sg_n_f8d5afb7cd[\"process_cv_batch\"]\n            subgraph sg_n_6e53e16369[\"process_cv\"]\n                n_c18aded200[\"analyze_match\"]\n                s_5c911f7e54([\"match_analysis\u003cbr/\u003eCandidateMatch\"]):::stuff\n                n_a7ed00ac24[\"analyze_one_cv\"]\n                s_c5ae714e89([\"candidate_profile\u003cbr/\u003eCandidateProfile\"]):::stuff\n                n_d24f39aa60[\"extract_one_cv\"]\n                s_427beb5195([\"cv_pdf\u003cbr/\u003eDocument\"]):::stuff\n                s_f1f80289df([\"cv_pages\u003cbr/\u003ePage\"]):::stuff\n            end\n            subgraph sg_n_2cfb7a32c8[\"process_cv\"]\n                n_f6a25d1769[\"analyze_match\"]\n                s_ea99eee6ed([\"match_analysis\u003cbr/\u003eCandidateMatch\"]):::stuff\n                n_f48b73fbee[\"analyze_one_cv\"]\n                s_e1ffee913e([\"candidate_profile\u003cbr/\u003eCandidateProfile\"]):::stuff\n                n_d16f2fe381[\"extract_one_cv\"]\n                s_041bb18fb4([\"cv_pdf\u003cbr/\u003eDocument\"]):::stuff\n                s_5fbba7194a([\"cv_pages\u003cbr/\u003ePage\"]):::stuff\n            end\n            subgraph sg_n_08a7186be9[\"process_cv\"]\n                n_937e750ea4[\"analyze_match\"]\n                s_bb41a103f0([\"match_analysis\u003cbr/\u003eCandidateMatch\"]):::stuff\n                n_786a2969d5[\"analyze_one_cv\"]\n                s_c47fe821d7([\"candidate_profile\u003cbr/\u003eCandidateProfile\"]):::stuff\n                n_38f0cfd11c[\"extract_one_cv\"]\n                s_2634ece93d([\"cv_pdf\u003cbr/\u003eDocument\"]):::stuff\n                s_44e253b325([\"cv_pages\u003cbr/\u003ePage\"]):::stuff\n            end\n        end\n    end\n\n    %% Pipeline input stuff nodes (no producer)\n    s_9b7e74ac51([\"job_offer_pdf\u003cbr/\u003eDocument\"]):::stuff\n\n    %% Data flow edges: producer -\u003e stuff -\u003e consumer\n    n_a7ed00ac24 --\u003e s_c5ae714e89\n    n_b8469c838f --\u003e s_d998350046\n    n_f48b73fbee --\u003e s_e1ffee913e\n    n_d16f2fe381 --\u003e s_5fbba7194a\n    n_fde22777cb --\u003e s_f9f703fbb4\n    n_d24f39aa60 --\u003e s_f1f80289df\n    n_38f0cfd11c --\u003e s_44e253b325\n    n_786a2969d5 --\u003e s_c47fe821d7\n    n_c18aded200 --\u003e s_5c911f7e54\n    n_f6a25d1769 --\u003e s_ea99eee6ed\n    n_937e750ea4 --\u003e s_bb41a103f0\n    s_c5ae714e89 --\u003e n_c18aded200\n    s_9b7e74ac51 --\u003e n_b8469c838f\n    s_d998350046 --\u003e n_fde22777cb\n    s_e1ffee913e --\u003e n_f6a25d1769\n    s_427beb5195 --\u003e n_d24f39aa60\n    s_041bb18fb4 --\u003e n_d16f2fe381\n    s_2634ece93d --\u003e n_38f0cfd11c\n    s_5fbba7194a --\u003e n_f48b73fbee\n    s_f9f703fbb4 --\u003e n_c18aded200\n    s_f9f703fbb4 --\u003e n_f6a25d1769\n    s_f9f703fbb4 --\u003e n_937e750ea4\n    s_f1f80289df --\u003e n_a7ed00ac24\n    s_44e253b325 --\u003e n_786a2969d5\n    s_c47fe821d7 --\u003e n_937e750ea4\n\n    %% Batch edges: list-item relationships\n    s_52d84618d0([\"match_analyses\u003cbr/\u003eCandidateMatch\"]):::stuff\n    s_5c911f7e54 -.\"[0]\".-\u003e s_52d84618d0\n    s_ea99eee6ed -.\"[1]\".-\u003e s_52d84618d0\n    s_bb41a103f0 -.\"[2]\".-\u003e s_52d84618d0\n\n    %% Style definitions\n    classDef failed fill:#ffcccc,stroke:#cc0000\n    classDef stuff fill:#fff3e6,stroke:#cc6600,stroke-width:2px\n    classDef controller fill:#e6f3ff,stroke:#0066cc\n\n    %% Subgraph depth-based coloring\n    style sg_n_08a7186be9 fill:#fffde6\n    style sg_n_2cfb7a32c8 fill:#fffde6\n    style sg_n_6e53e16369 fill:#fffde6\n    style sg_n_8b2136e3fe fill:#e6f3ff\n    style sg_n_91d5d6dc7c fill:#e6ffe6\n    style sg_n_f8d5afb7cd fill:#e6ffe6\n```\n\n\u003c/details\u003e\n\n### Run Your Method\n\n**Via CLI:**\n\n```bash\npipelex run bundle cv_batch_screening.mthds --inputs inputs.json\n```\n\nCreate an `inputs.json` file with your PDF URLs:\n\n```json\n{\n  \"cvs\": {\n    \"concept\": \"native.Document\",\n    \"content\": [\n      { \"url\": \"https://pipelex-web.s3.amazonaws.com/demo/John-Doe-CV.pdf\" },\n      { \"path\": \"inputs/Jane-Smith-CV.pdf\" }\n    ]\n  },\n  \"job_offer_pdf\": {\n    \"concept\": \"native.Document\",\n    \"content\": {\n      \"url\": \"https://pipelex-web.s3.amazonaws.com/demo/Job-Offer.pdf\"\n    }\n  }\n}\n```\n\n**Via Python:**\n\n```python\nimport asyncio\nfrom pipelex.core.stuffs.document_content import DocumentContent\nfrom pipelex.pipelex import Pipelex\nfrom pipelex.pipeline.runner import PipelexRunner\n# Generated by: `pipelex build structures bundle cv_batch_screening.mthds`\nfrom structures.cv_batch_screening__candidate_match import CandidateMatch\n\nasync def run_pipeline() -\u003e list[CandidateMatch]:\n    runner = PipelexRunner()\n    response = await runner.execute_pipeline(\n        pipe_code=\"batch_analyze_cvs_for_job_offer\",\n        inputs={\n            \"cvs\": {\n                \"concept\": \"Document\",\n                \"content\": [\n                    DocumentContent(url=\"https://pipelex-web.s3.amazonaws.com/demo/John-Doe-CV.pdf\"),\n                    DocumentContent(path=\"inputs/Jane-Smith-CV.pdf\"),\n                ],\n            },\n            \"job_offer_pdf\": {\n                \"concept\": \"native.Document\",\n                \"content\": DocumentContent(url=\"https://pipelex-web.s3.amazonaws.com/demo/Job-Offer.pdf\"),\n            },\n        },\n    )\n    pipe_output = response.pipe_output\n    print(pipe_output)\n    return pipe_output.main_stuff_as_items(item_type=CandidateMatch)\n\nPipelex.make()\nasyncio.run(run_pipeline())\n```\n\n\u003c/details\u003e\n\n\n## See Pipelex in Action\n\n**Claude Code builds your AI Method**\n\n\u003ca href=\"https://go.pipelex.com/demo\"\u003e\n  \u003cimg src=\"https://go.pipelex.com/demo-thumbnail\" alt=\"Pipelex Demo\" width=\"500\" style=\"max-width: 100%; height: auto;\"\u003e\n\u003c/a\u003e\n\n## IDE Extension\n\nWe **highly** recommend installing our extension for `.mthds` syntax highlighting in your IDE:\n\n- **VS Code**: Install from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=pipelex.pipelex)\n- **Cursor, Windsurf, and other VS Code forks**: Install from the [Open VSX Registry](https://open-vsx.org/extension/Pipelex/pipelex), or search for \"Pipelex\" directly in your extensions tab\n\nRunning `pipelex init` will also offer to install the extension automatically if it detects your IDE.\n\n## Run Anywhere\n\nThe same `.mthds` file runs from multiple execution targets:\n\n| Target | How |\n|--------|-----|\n| **CLI** | `pipelex run bundle method.mthds --inputs inputs.json` |\n| **Python** | `PipelexRunner().execute_pipeline(...)` |\n| **TypeScript / Node** | [`mthds`](https://www.npmjs.com/package/mthds) SDK calling a Pipelex API server |\n| **REST API** | Self-hosted API server |\n| **MCP** | Model Context Protocol — agents call methods as tools |\n| **n8n** | Pipelex node for workflow automation |\n\n## Use Pipelex from TypeScript\n\nFor Node, Next.js, or any TypeScript app, call a Pipelex API server via the [`mthds`](https://www.npmjs.com/package/mthds) npm SDK (source: [`mthds-js`](https://github.com/mthds-ai/mthds-js)). Self-host the open-source [`pipelex-api`](https://github.com/Pipelex/pipelex-api) and point the SDK at your instance. A Pipelex-hosted runner at `api.pipelex.com` is also available in private beta — [join the waitlist](https://go.pipelex.com/waitlist).\n\n```bash\nnpm install mthds\n```\n\nFastest way to get started: fork the [`pipelex-starter-js`](https://github.com/Pipelex/pipelex-starter-js) template — a Next.js 16 + TypeScript app with three working demos (text entity extraction, PDF summary, image generation). Click *Use this template* on GitHub.\n\n\n# The MTHDS Ecosystem\n\n| | Description | Link |\n|---|---|---|\n| **MTHDS Standard** | The open standard specification — language, package system, and typed concepts | [mthds.ai](https://mthds.ai/latest/) |\n| **MTHDS Hub** | Discover and share methods — browse packages, search by signature | [mthds.sh](https://mthds.sh) |\n| **MTHDS Plugins** | Claude Code plugin — commands to build, run, edit, check, fix, and publish methods | [github.com/mthds-ai/mthds-plugins](https://github.com/mthds-ai/mthds-plugins) |\n| **Package System** | Versioned dependencies, lock files with SHA-256 integrity, cross-package references via `-\u003e` | [Packages docs](https://mthds.ai/latest/packages/structure/) |\n| **Know-How Graph** | Typed discovery — \"I have X, I need Y\" — find methods or chains by typed signature | [Know-How Graph](https://mthds.ai/latest/know-how-graph/) |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eView MTHDS skills\u003c/b\u003e\u003c/summary\u003e\n\n| Command | Description |\n|---------|-------------|\n| `/mthds-build` | Build new AI method bundles from scratch |\n| `/mthds-run` | Execute methods and interpret their JSON output |\n| `/mthds-edit` | Modify existing methods — change pipes, update prompts, add steps |\n| `/mthds-check` | Validate bundles for issues (read-only) |\n| `/mthds-fix` | Auto-fix validation errors |\n| `/mthds-explain` | Walk through execution flow in plain language |\n| `/mthds-inputs` | Prepare inputs: templates, synthetic data, user files |\n| `/mthds-install` | Install method packages from GitHub or local dirs |\n| `/mthds-pkg` | Package management — init, deps, lock, install, update |\n| `/mthds-publish` | Publish methods to the hub |\n| `/mthds-share` | Share methods on social media |\n\n\u003c/details\u003e\n\n\n## Examples \u0026 Cookbook\n\nExplore real-world examples in our **Cookbook** repository:\n\n[![GitHub](https://img.shields.io/badge/Cookbook-5a0dad?logo=github\u0026logoColor=white\u0026style=flat)](https://github.com/Pipelex/pipelex-cookbook/tree/main)\n\nClone it, fork it, and experiment with production-ready methods for various use cases.\n\n## Optional Features\n\nThe package supports the following additional features:\n\n- `anthropic`: Anthropic/Claude support for text generation\n- `google`: Google models (Vertex) support for text generation\n- `mistralai`: Mistral AI support for text generation and OCR\n- `bedrock`: Amazon Bedrock support for text generation\n- `fal`: Image generation with Black Forest Labs \"FAL\" service\n- `linkup`: Web search with Linkup\n- `docling`: OCR with Docling\n\nInstall all extras:\n\n```bash\nuv pip install \"pipelex[anthropic,google,google-genai,mistralai,bedrock,fal,linkup,docling]\"\n```\n\n---\n\n**Privacy \u0026 Telemetry** — Pipelex Gateway collects only technical data (model names, token counts, latency) — never prompts or business data. If you want to avoid Gateway telemetry, disable `pipelex_gateway` and use your own provider keys or local AI instead. [Learn more](https://docs.pipelex.com/latest/setup/telemetry/)\n\n**Contributing** — We welcome contributions! See our [Contributing Guidelines](CONTRIBUTING.md).\n\n**Community** — [![Discord](https://img.shields.io/badge/Discord-5865F2?logo=discord\u0026logoColor=white)](https://go.pipelex.com/discord) [GitHub Issues](https://github.com/Pipelex/pipelex/issues) · [Discussions](https://github.com/Pipelex/pipelex/discussions) · [Documentation](https://docs.pipelex.com/)\n\n## License\n\nThis project is licensed under the [MIT license](LICENSE). Runtime dependencies are distributed under their own licenses via PyPI.\n\n---\n\n\"Pipelex\" is a trademark of Evotis S.A.S.\n\n© 2025-2026 Evotis S.A.S.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpipelex%2Fpipelex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpipelex%2Fpipelex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpipelex%2Fpipelex/lists"}