{"id":"8017887a-ddee-426d-a8f5-50702111bd54","entityType":"agent","slug":"crewai-fhrochaf-lsm-reprochecker","name":"LSM_ReproChecker","canonicalUrl":"https://www.xpersona.co/agent/crewai-fhrochaf-lsm-reprochecker","canonicalPath":"/agent/crewai-fhrochaf-lsm-reprochecker","generatedAt":"2026-10-10T03:21:44.535Z","source":"GITHUB_REPOS","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T12:50:38.120Z","emptyReason":null},"description":"A multi-agent CrewAI flow that automatically screens landslide-mapping publications to analyze their methods and reproducibility. LSM ReproChecker $1 A $1 flow that automatically screens publications on landslide mapping (LSM) to check their detection methods and assess their reproducibility. What it does ReproCheckFlow (src/flow_reproassesslsm_st1/main.py) processes one publication at a time from a Scopus export CSV: 1. **Filter** — an abstract_screener agent reads the abstract and decides whether the paper is actually about a landslide mappin","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 10/9/2026.","installCommand":null,"sourceUrl":"https://github.com/fhrochaf/LSM_ReproChecker","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/fhrochaf/LSM_ReproChecker","kind":"source"}],"safetyScore":66,"overallRank":28.8,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"A multi-agent CrewAI flow that automatically screens landslide-mapping publications to analyze their methods and reproducibility. LSM ReproChecker $1 A $1 flow "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:50:38.120Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"crewai","status":"self-declared"},{"label":"multi-agent","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"crewai","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"multi-agent","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:crewai|supported|profile capability:multi-agent|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-10-09T12:50:38.120Z","emptyReason":"No source adoption metrics were available."},"stars":0,"forks":0,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:50:38.114Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T12:50:38.120Z","lastCrawledAt":"2026-10-09T12:50:38.114Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-16T12:50:38.114Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"GITHUB REPOS","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":null,"setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_REPOS","generatedAt":"2026-10-10T03:21:44.535Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-fhrochaf-lsm-reprochecker/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"GITHUB REPOS","verified":false,"confidence":"high","updatedAt":"2026-10-09T12:50:38.120Z","emptyReason":null},"readme":"# LSM ReproChecker\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n\n![alt text](cover.png)\n\nA [CrewAI](https://crewai.com) flow that automatically screens publications on landslide mapping (LSM) to check their detection methods and assess their reproducibility.\n\n## What it does\n\n`ReproCheckFlow` (`src/flow_reproassesslsm_st1/main.py`) processes one publication at a time from a Scopus export CSV:\n\n1. **Filter** — an `abstract_screener` agent reads the abstract and decides whether the paper is actually about a landslide mapping *method* (`INCLUDE`/`EXCLUDE`), as opposed to an inventory, susceptibility mapping, or review paper. The decision is written back to the CSV so it's never re-run for that row.\n2. **Availability check** — skipped if the CSV row already has prefilled `Webpage_*` availability columns (see [Prefilled availability](#prefilled-availability)); otherwise an `availability_web_scraper` agent visits the publication's DOI page to check for data/code availability statements and links.\n3. **Paper analysis** — a `paper_analyzer` agent reads the paper's PDF once (via RAG search or full-text, see [PDF reading modes](#pdf-reading-modes)) in a single `analyze_paper` task to extract every dataset used and the authors' own novel landslide mapping method. This task is run once by default, configurable to run multiple independent passes reconciled by fuzzy consensus (see [Multi-run consensus](#multi-run-consensus)). Every extracted excerpt is also checked by a guardrail against the actual PDF text before it's accepted (see [Guardrails](#guardrails-verbatim-fuzzy-matching)).\n4. **Dataset availability research** — for any consolidated dataset not yet catalogued in the project's dataset availability reference, a `dataset_availability_researcher` agent searches the web for its real-world access status and the reference is updated for future runs (see [Dataset availability reference](#dataset-availability-reference)).\n5. **Report compilation** — a `report_elaborator` agent combines the consolidated dataset/method findings, the availability summary, and the dataset availability reference into a final `reproducibility_status` (`REPRODUCIBLE` / `PARTIALLY_REPRODUCIBLE` / `NOT_REPRODUCIBLE`) plus a short assessment.\n\nResults are written back into the input CSV and saved as a JSON report per publication in the configured output directory.\n\n![alt text](crew_schema.png)\n\n## Agents\n\nDefined in `src/flow_reproassesslsm_st1/crews/reprochecker_crew/config/agents.yaml`, wired up in `reprochecker_crew.py`:\n\n| Agent | Role | LLM | Tools |\n|---|---|---|---|\n| `abstract_screener` | Fast triage from the abstract alone: INCLUDE/EXCLUDE with a reason | `llm_local` (local Ollama model) | — |\n| `paper_analyzer` | Extracts dataset and novel-method reproducibility info from the full paper in one pass | `llm_large` (remote/larger model) | `PDFSearchTool` (RAG) or `PDFFullTextTool`, plus the `lsm_domain_instructions` skill |\n| `availability_web_scraper` | Visits the DOI page to confirm real-world data/code availability | `llm_large` | `PublicationAvailabilityTool` |\n| `dataset_availability_researcher` | Web-searches the real-world access status of datasets not yet in the reference cache | `llm_large` | `TavilySearchTool` |\n| `report_elaborator` | Synthesizes everything into one final structured report; never introduces new claims | `llm_large` | — |\n\n`llm_local`/`llm_large` are configured in `src/flow_reproassesslsm_st1/config.py`. Splitting cheap triage (local model) from the heavier extraction/synthesis work (larger model) keeps cost and rate limits down — all agents are additionally capped at `MAX_RPM = 5` requests/minute.\n\n### PDF reading modes\n\n`paper_analyzer` reads the PDF one of two ways, toggled by `--use-full-text-tool`:\n\n- **Default (RAG)**: `PDFSearchTool` embeds and chunks the PDF (OpenAI `text-embedding-3-small`) into a per-paper Chroma collection, and the agent retrieves the top-matching chunks per query.\n- **Full text** (`--use-full-text-tool`): `PDFFullTextTool` dumps the entire extracted PDF text into the agent's context in one call — no chunking/retrieval, so nothing is missed due to an imperfect search query, at the cost of a much larger prompt.\n\n## Multi-run consensus\n\nExtraction is inherently noisy — the same paper read twice can turn up slightly different dataset/method lists. To reduce this, `analyze_paper` can be run multiple independent times (`reprochecker_crew.py::_repeat_task`), producing one `PaperAnalysisOutput` per run — configurable per invocation via `--multi-run-count` (default `1`, i.e. a single pass with no consensus reconciliation).\n\n`utils.merge_entries` (`src/flow_reproassesslsm_st1/utils.py`) then reconciles the runs per check into one list:\n\n1. **Cluster by fuzzy name match** — every entry from every run is folded into a cluster with any existing entry whose *normalized* name scores `>=75` on RapidFuzz `token_set_ratio` (`NAME_CLUSTER_THRESHOLD`). Normalization strips parenthetical citations and turns `-`/`_`/`/` into spaces, so e.g. `\"Faster-RCNN\"` and `\"Faster R-CNN (Ren et al. 2016)\"` cluster together even though they don't match verbatim.\n2. **Majority vote** — a cluster only survives into the final result if it has entries from at least `min_votes` of the runs. `min_votes` defaults to `min(2, number of runs)`: still 2 whenever there are 2+ runs (a dataset/method only one run found is dropped as likely a hallucination or a one-off misread), but relaxes to 1 when `--multi-run-count 1` is used, since a single run can never produce 2 agreeing votes.\n3. **Pick a representative** — within a surviving cluster, the entry with a non-null `link` wins (preferring the run that actually found the retrieval link); ties are broken by whichever entry has the most non-null fields (`source`, `link`, `verbatim`).\n\nThis consensus step runs entirely in Python between crew kickoffs — the Flow (`main.py::run_repro_check`) pulls the raw task outputs from `self._crew._analysis_runs` and merges their `datasets`/`methods` lists separately before handing the result to `report_elaborator`.\n\n## Guardrails: verbatim fuzzy-matching\n\nEvery `analyze_paper` task run (`src/flow_reproassesslsm_st1/tools/guardrails.py`) is attached a CrewAI task **guardrail** via `make_verbatim_guardrail`, which runs after each individual run and can force a retry before the output is accepted:\n\n- Any entry with `status: MENTIONED` must include a `verbatim` excerpt; a `MENTIONED` entry with no excerpt fails the guardrail outright.\n- The excerpt is fuzzy-matched against the paper's actual extracted PDF text (`pdfplumber`, cached per PDF) using RapidFuzz `partial_ratio`. It must score `>=80` (`FUZZY_MATCH_THRESHOLD`) — a lower score means the agent likely paraphrased or fabricated the quote, and the guardrail fails with a message telling the agent to quote verbatim or mark the entry `NOT_MENTIONED`.\n- If an entry also has a `link`, the link itself must fuzzy-match (`>=80`, `LINK_FUZZY_MATCH_THRESHOLD`) *inside* that entry's own verbatim excerpt — catching a URL the agent guessed/inferred rather than one actually printed next to the quote.\n- Matching first normalizes typographic characters (smart quotes, en/em dashes) that PDFs use but LLM transcriptions usually don't reproduce exactly, and retries a \"despaced\" comparison (all whitespace stripped) to tolerate spacing artifacts from `pdfplumber`'s text extraction on multi-column layouts.\n\nThis guardrail is what actually enforces grounding: it runs independently on each multi-run pass (not just once on the consolidated result), so a hallucinated dataset/method has to survive fuzzy verification on every pass before it can even reach the consensus step above.\n\n## Dataset availability reference\n\nA paper may name a dataset (e.g. `Sentinel-2 imagery`) without linking it, or cite a source that isn't a retrieval link. Rather than have `report_elaborator` guess whether such a dataset is realistically obtainable, the Flow maintains a small cache of researched availability facts, keyed by dataset name, at `crews/reprochecker_crew/skills/dataset_availability_reference/dataset_availability_reference.json` (path in `config.DATASET_AVAILABILITY_REFERENCE`). Each entry has a `summary`, an `availability` verdict (`PUBLIC_FREE`/`PUBLIC_REG`/`COMMERCIAL`/`RESTRICTED`/`VARIES`, with provider notes), and a `verified_via` source URL. It ships pre-populated with common remote-sensing datasets (Sentinel-1/2, SRTM, Landsat, ASTER GDEM, Copernicus DEM, etc.).\n\nFor every paper, `main.py::_resolve_dataset_availability_reference`:\n\n1. Fuzzy-matches each consolidated dataset name against the reference's keys (`utils.missing_dataset_names`, same `NAME_CLUSTER_THRESHOLD` logic as [multi-run consensus](#multi-run-consensus)) to find which ones aren't covered yet.\n2. If any are missing, runs `dataset_research_crew` — the `dataset_availability_researcher` agent, backed by `TavilySearchTool` — once for the whole batch of missing names, and appends the results to the JSON file (`utils.append_dataset_reference_entries`) so future papers referencing the same dataset skip this step entirely.\n3. Builds a slim, availability-only context (`utils.dataset_reference_context`: just `name` → `availability` for whichever reference entries match this paper's datasets) and passes it to `compile_final_report_from_consolidated` as supporting context — it does not override what the paper itself says, but lets the report distinguish \"not linked but PUBLIC_FREE elsewhere\" from \"not linked and effectively unobtainable.\"\n\n## Prefilled availability\n\nIf a CSV row already has `Webpage_Access_Status == \"ACCESSIBLE\"` plus at least one of `Webpage_Data_Status`/`Webpage_Code_Status` filled in (`utils._row_has_prefilled_availability`), the Flow skips `availability_web_scraper` entirely and reuses those columns (`utils._availability_from_row`) — including translating older/manual prefill vocabularies (e.g. `AVAILABLE`/`NOT_AVAILABLE`, `FOUND`/`NOT_FOUND`) into the current `MENTIONED`/`NOT_MENTIONED` schema. This lets a batch of availability checks be done once (e.g. by hand, or in an earlier pass) and reused across reruns of the reproducibility checks without re-scraping.\n\n## Project layout\n\n- `src/flow_reproassesslsm_st1/` — the CrewAI flow, crew, agents, tasks, and Pydantic models\n  - `main.py` — `ReproCheckFlow` (the flow graph) and the `kickoff`/`plot`/`run_with_trigger` CLI entry points\n  - `crews/reprochecker_crew/config/` — `agents.yaml` and `tasks.yaml` defining agent roles and task prompts\n  - `crews/reprochecker_crew/skills/lsm_domain_instructions/` — domain-knowledge skill (`SKILL.md`) given to `paper_analyzer`\n  - `crews/reprochecker_crew/skills/dataset_availability_reference/` — the JSON cache of researched dataset availability facts (see [Dataset availability reference](#dataset-availability-reference))\n  - `tools/custom_tool.py` — `PublicationAvailabilityTool` (DOI-page scraper) and `PDFFullTextTool`\n  - `tools/guardrails.py` — the verbatim fuzzy-match guardrail\n  - `utils.py` — multi-run consensus (`merge_entries`), dataset availability reference helpers, CSV row helpers, prefilled-availability coercion\n  - `models.py` — Pydantic schemas for every task output and the Flow's state\n  - `config.py` — paths, LLM configs, embedding config\n- `publications/` — source PDFs (named `<EID>.pdf`) and the Scopus CSV export used as input\n- `output*/` — generated per-publication reproducibility reports (JSON); the active output directory is set by `OUTPUT_DIR` in `config.py`\n- `scripts/` — batch/utility scripts (abstract filtering, DOI/link checks, PDF sampling, etc.)\n- `tests/` — pytest suite covering the crew config, filter step, and flow\n\n## Prerequisites\n\nBefore running the flow, you need:\n\n1. **A Scopus export CSV** — the input CSV listing the publications to process. It must contain at least:\n   - `EID` — a unique identification ID for each publication.\n   - `Abstract` — the publication's abstract text.\n   - `DOI` — the publication's DOI.\n\n   This project uses a CSV exported directly from the results of a query on [Scopus.com](https://www.scopus.com) (`;`-separated, with the standard Scopus export columns such as `Authors`, `Title`, `Year`, `DOI`, `Abstract`, `EID`, etc.). The path to this CSV is set in `INPUTS_PATH` in [src/flow_reproassesslsm_st1/config.py](src/flow_reproassesslsm_st1/config.py).\n\n2. **A PDF of each publication you want analyzed** (only required for papers that pass the abstract filter and go through the reproducibility checks). Place the PDF in `publications/` and **rename it to match the publication's `EID`**, e.g. `2-s2.0-85130393221.pdf` for the row where `EID` is `2-s2.0-85130393221`.\n\n## Setup\n\nRequires Python >=3.10,<3.14 and [uv](https://docs.astral.sh/uv/).\n\n```bash\nuv sync\n```\n\nAdd required API keys (e.g. `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `GEMINI_API_KEY`, `TAVILY_API_KEY` for `dataset_availability_researcher`'s web search) to a `.env` file. A local [Ollama](https://ollama.com) instance is used for `abstract_screener` (`llm_local`), so make sure it's running if you use the default config.\n\n## Serving local LLMs with Ollama\n\n```bash\n# Pull the desired model (only required once)\nollama pull qwen3\n\n# Verify that the model is available locally\nollama list\n\n# (Optional) Test the model interactively\nollama run qwen3\n\n# Start the Ollama server only if it is not already running\n# (On Windows, Ollama is typically started automatically.)\nollama serve\n```\n\n## Running\n\nThree CLI commands are exposed via `pyproject.toml`'s `[project.scripts]`:\n\n```bash\nuv run kickoff [OPTIONS]                   # batch-process rows from the input CSV\nuv run plot                                # generate a flow diagram (flow.html)\nuv run run_with_trigger '<json_payload>'   # run the flow once, from an explicit JSON payload\n```\n\n### `uv run kickoff` options\n\n`kickoff()` (`main.py`) iterates every row of the input CSV in order and runs `ReproCheckFlow` on each, skipping:\n- rows that already have a saved output report,\n- rows where `Filter_Decision`, `Human_Filter_Decision` is `EXCLUDE`, or `Webpage_Access_Status` is `NOT_ACCESSIBLE`.\n\n| Flag | Default | Meaning |\n|---|---|---|\n| `--max-papers N` | unlimited | Stop after successfully processing `N` papers in this invocation |\n| `--check-paper-only EID` | none | Restrict the run to a single row, matched by `EID` |\n| `--wait-seconds N` | `60` | Seconds to wait before retrying a row that raised an exception |\n| `--max-retries N` | `2` | Max retry attempts per row before giving up and moving to the next one |\n| `--use-full-text-tool` | off | Give `paper_analyzer` the full extracted PDF text (`PDFFullTextTool`) instead of the default `PDFSearchTool` RAG retrieval |\n| `--with-human-intervention` | off | Pause after **every** task for human review, via CrewAI's native `Task(human_input=True)`: the agent's answer is shown in the terminal and you can type feedback to send it back for another pass, or press Enter to accept and move on |\n| `--guardrail-max-retries N` | `3` | Max retries per task when the verbatim guardrail (see [Guardrails](#guardrails-verbatim-fuzzy-matching)) rejects an output, before giving up and accepting the last attempt |\n| `--multi-run-count N` | `1` | Independent runs of `analyze_paper`, reconciled by majority vote when `N >= 2` (see [Multi-run consensus](#multi-run-consensus)) |\n\nExamples:\n\n```bash\n# Process the whole CSV, retrying failures up to 3 times with a 2-minute backoff\nuv run kickoff --max-retries 3 --wait-seconds 120\n\n# Re-run a single paper, forcing full-text mode instead of RAG search\nuv run kickoff --check-paper-only 2-s2.0-85130393221 --use-full-text-tool\n\n# Process only the next 5 not-yet-processed papers (e.g. for a spot check)\nuv run kickoff --max-papers 5\n\n# Review every task's output by hand before it's accepted, and give the\n# guardrail a couple more tries before giving up on a verbatim match\nuv run kickoff --with-human-intervention --guardrail-max-retries 5\n\n# Higher-confidence extraction: 3 independent analyze_paper runs, reconciled by consensus\nuv run kickoff --check-paper-only 2-s2.0-85130393221 --multi-run-count 3\n```\n\n### `uv run run_with_trigger`\n\nRuns the flow once from an explicit JSON payload instead of iterating the CSV — useful for testing a single publication or wiring the flow into an external trigger:\n\n```bash\nuv run run_with_trigger '{\"publication_id\": \"2-s2.0-85130393221\", \"pdf_file\": \"2-s2.0-85130393221.pdf\", \"doi\": \"10.xxxx/xxxx\", \"abstract\": \"...\", \"use_full_text_tool\": false}'\n```\n","readmeExcerpt":"LSM ReproChecker $1 A $1 flow that automatically screens publications on landslide mapping (LSM) to check their detection methods and assess their reproducibility. What it does ReproCheckFlow (src/flow_reproassesslsm_st1/main.py) processes one publication at a time from a Scopus export CSV: 1. **Filter** — an abstract_screener agent reads the abstract and decides whether the paper is actually about a landslide mappin","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"uv sync"},{"language":"bash","snippet":"# Pull the desired model (only required once)\nollama pull qwen3\n\n# Verify that the model is available locally\nollama list\n\n# (Optional) Test the model interactively\nollama run qwen3\n\n# Start the Ollama server only if it is not already running\n# (On Windows, Ollama is typically started automatically.)\nollama serve"},{"language":"bash","snippet":"uv run kickoff [OPTIONS]                   # batch-process rows from the input CSV\nuv run plot                                # generate a flow diagram (flow.html)\nuv run run_with_trigger '<json_payload>'   # run the flow once, from an explicit JSON payload"},{"language":"bash","snippet":"# Process the whole CSV, retrying failures up to 3 times with a 2-minute backoff\nuv run kickoff --max-retries 3 --wait-seconds 120\n\n# Re-run a single paper, forcing full-text mode instead of RAG search\nuv run kickoff --check-paper-only 2-s2.0-85130393221 --use-full-text-tool\n\n# Process only the next 5 not-yet-processed papers (e.g. for a spot check)\nuv run kickoff --max-papers 5\n\n# Review every task's output by hand before it's accepted, and give the\n# guardrail a couple more tries before giving up on a verbatim match\nuv run kickoff --with-human-intervention --guardrail-max-retries 5\n\n# Higher-confidence extraction: 3 independent analyze_paper runs, reconciled by consensus\nuv run kickoff --check-paper-only 2-s2.0-85130393221 --multi-run-count 3"},{"language":"bash","snippet":"uv run run_with_trigger '{\"publication_id\": \"2-s2.0-85130393221\", \"pdf_file\": \"2-s2.0-85130393221.pdf\", \"doi\": \"10.xxxx/xxxx\", \"abstract\": \"...\", \"use_full_text_tool\": false}'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB REPOS","editorialOverview":"A multi-agent CrewAI flow that automatically screens landslide-mapping publications to analyze their methods and reproducibility. LSM ReproChecker $1 A $1 flow that automatically screens publications on landslide mapping (LSM) to check their detection methods and assess their reproducibility. What it does ReproCheckFlow (src/flow_reproassesslsm_st1/main.py) processes one publication at a time from a Scopus export CSV: 1. **Filter** — an abstract_screener agent reads the abstract and decides whether the paper is actually about a landslide mappin","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":376,"uniquenessScore":66,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T12:50:38.120Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T12:50:38.120Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:21:44.535Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/github_repos","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}