Project Info
Inspiration
There isn't a very mature way to put this, but my inspiration stems from a childhood fear of death - more specifically, watching a scene where a dead skeleton lay on the ground in Disney's Tangled kicked this whole thing off. After worrying about it for years, I started wondering why we died in the first place. The strongest indicator seemed to be the accumulation of harmful genetic mutations over time: given enough mutations, cells either produce faulty proteins that the immune system flags for destruction, or they become senescent and stop dividing. This led me to rediscover the idea of extending longevity, or possibly even achieving biological immortality, by editing the genome back to healthier states, or toward beneficial mutations as our environments change. Gene therapy is the most credible path I've found toward that goal. But there's a gap between the vision and the clinic: the therapies that reach patients today fail at an alarming rate not because the science is wrong, but because safety problems are discovered too late. ImmunoVerse is my attempt to close that gap.
What it does
ImmunoVerse screens gene therapy candidates for safety before they reach the wet lab. It is a patient-personalized, multi-stage in silico safety screening system for gene editing therapies. Given an edited protein sequence and a patient's HLA profile, it evaluates two independent failure modes before a therapy ever reaches the wet lab: Immunogenic rejection - will the immune system recognize the modified protein as foreign, mount a T-cell or antibody response, and destroy the edited cells? Systems-level disruption - even if the immune system tolerates the edit, will it destabilize cellular function by introducing a cryptic splice site, disrupting transcription factor binding, or triggering apoptotic signaling? The pipeline runs four stages in sequence: structural modeling (ESMFold + SASA surface exposure), HLA binding prediction (NetMHCpan Class I + II via IEDB), parallel immune reactivity analysis (T-cell and B-cell branches), and whole-transcriptome systems dynamics. A final LLM node - powered by ASI:One or Claude - synthesizes the results into a plain-language clinical report with a headline verdict, per-stage findings, risk rationale, and actionable mitigation suggestions. Each stage is implemented as an independent specialist agent registered on Agentverse. Any AI agent on the network can call individual stages directly or route through the orchestrator for a full pipeline run - making the system composable infrastructure for the broader biotech AI ecosystem, not just a one-off screening tool. The individual tools - ESMFold, NetMHCpan, BepiPred - are already used in research labs. They exist, but the integration doesn't. Commercial immunogenicity services are out there but are slow, expensive, and black boxes. No one has an open, composable, multi-agent pipeline that exposes each stage individually as a callable API.
How we built it
The pipeline has two parallel implementations that share the same underlying tool layer: LangGraph StateGraph drives the Streamlit web app and terminal demo. The graph uses conditional edges for the Stage 1 retry loop (low-confidence structural prediction triggers a fallback re-run), parallel Send dispatch for the Stage 3 T-cell and B-cell branches, and a single aggregation node that computes the weighted risk vector before the LLM report node. Fetch AI uAgents provides the multi-agent network layer. Seven specialist agents, one per pipeline stage plus an orchestrator, are independently registered on Agentverse using register_chat_agent with cryptographic identity derived from seed phrases. The orchestrator holds the addresses of all specialists and routes messages through the Agentverse relay. Each agent can also be called directly by any Agentverse-compatible client. Real biology tools are wired at Stage 1 (ESMFold via the ESM Atlas REST API), Stage 2 (IEDB's NetMHCpan-4.1 and NetMHCIIpan-4.0), and Stage 3b (BepiPred via IEDB). Stages 3a (NetTCR-2.0) and 4 (GenBio AI AIDO) use high-fidelity mock implementations that replicate the expected output schemas. All tools share a common abstract base class layer, so swapping a mock for a real implementation requires no changes to the pipeline graph or agent logic.
Challenges we ran into
Agentverse endpoint routing was the hardest bug to diagnose. When agents were registered with http://localhost:{port}/submit endpoints via the registration API, Agentverse attempted push-delivery to localhost - which it can't reach from its servers. The fix required running all agents with mailbox=True first so the uAgents runtime updates the Almanac with the relay URL, then re-running registration to store the correct endpoint. The client also needed to route via the Almanac rather than Agentverse's push-delivery system, or it would hit the same localhost failure. Parallel fan-out in LangGraph required understanding the Send primitive. Standard edges broadcast state to both Stage 3 branches simultaneously, but without Send the graph couldn't dispatch different payloads to each branch independently. Getting the join node to wait for both branches to complete before proceeding to Stage 4 required careful state merging. Schema consistency across both implementations was a recurring constraint. The Pydantic models powering the LangGraph state also needed to survive serialization through uAgents JSON message passing, which caught several field name mismatches between what the orchestrator sent and what the specialist agents expected. Real biology API quirks - IEDB's rate limits, ESMFold's sequence length constraints, and BepiPred's non-standard response format meaning each required custom retry logic and fallback handling.
Accomplishments we're proud of
Running a biologically meaningful end-to-end screen from a raw sequence to plain-language clinical verdict in under 30 seconds, personalized to a patient's HLA haplotype, is something that would have taken a computational biologist days to do manually a few years ago. Getting seven specialist agents independently registered and callable on Agentverse, each with a clean public message contract, demonstrates that AI-native biomedical infrastructure is achievable today. The LOW_IMMUNOGENIC scenario is my favorite result: the HLA bindings are low and so there is little T-Cell reactivity which wouldn't reject the KRAS edit. However, the BepiPred B-Cell reactivity is high which means the edit would get flagged. Stage 4 catches the RAS/MAPK pathway disruption independently at the systems level. That's the case for always running the full pipeline - if there was neither high T-Cell or B-Cell reactivity experimentation would continue, but having insight into how these edits work on a cellular level can save a lot of time and money.
What we learned
Designing message contracts first and implementations second makes multi-agent systems dramatically easier to debug. Every inter-agent message in ImmunoVerse is a typed Pydantic model with a single serialization path and so when something breaks, it's immediately obvious which stage sent the wrong shape. Agentverse's relay model (agent polls Agentverse, not the other way around) is the right mental model for agents running behind NAT or on developer laptops. The documentation undersells this; most of the routing confusion stemmed from conflating push-delivery with mailbox polling. Designing the risk scoring and clinical report to communicate uncertainty honestly - not overstating confidence in a result that's only as good as its weakest tool - required as much thought as the engineering.
What's next
The immediate next step is retrospective validation - running the pipeline against gene therapy candidates with known clinical immunogenicity outcomes to measure sensitivity and specificity end-to-end. That's the study that moves this from a promising screening tool to an evidence-based one. The two mock stages are the next most important near-term targets. Wiring NetTCR-2.0 behind a local Docker service and connecting to the GenBio AI AIDO API for real transcriptome perturbation prediction would make the systems-level signal clinically actionable rather than illustrative. Beyond completing the tool layer, the most compelling direction is cohort-level analysis: given a proposed edit and a population's HLA frequency distribution, what fraction of patients would be at high risk? That's the question gene therapy developers actually need answered before Phase I. The composable Agentverse architecture makes it straightforward to fan out hundreds of personalized pipeline runs in parallel. Longer term, integrating with clinical trial databases to validate predictions against known immunogenicity outcomes would let the risk model be calibrated on real-world data - closing the loop between in silico prediction and clinical observation that is currently the biggest gap in the field.
Gene Therapy Safety Screener
Multi-stage, patient-personalised in silico immunogenicity and systems safety screening for gene editing therapies. Detects immune rejection risk and cell-autonomous disruption before a therapy reaches the wet lab.
Problem
Gene therapy edits can trigger two independent failure modes:
- Immunogenic rejection — the immune system recognises the modified protein as foreign, mounts a T-cell or antibody response, and destroys transduced cells.
- Systems disruption — even if the immune system tolerates the edit, cellular machinery may not: cryptic splice sites, altered transcription factor binding, or apoptotic signalling.
Current in-clinic safety screening is slow, expensive, and happens late in development. This pipeline runs in seconds.
Pipeline
Input: patient sequence + edit positions + HLA profile
│
▼
Stage 1 — Structural Modelling
ESMFold (ESM Atlas REST API) → pLDDT confidence + SASA surface exposure
Low confidence → fallback retry
│
▼
Stage 2 — HLA Binding Prediction
IEDB REST API (NetMHCpan-4.1 Class I + NetMHCIIpan-4.0 Class II)
Both gates clear → early exit (safe — no peptide can be presented)
│
▼
Stage 3 — Immune Reactivity [parallel branches]
3a: T-cell — NetTCR-2.0 TCR binding probability
3b: B-cell — BepiPred via IEDB (linear epitope prediction)
Either flag → early exit (high risk — adaptive immunity activated)
│
▼
Stage 4 — Systems Dynamics
Transcriptome perturbation, splice-site disruption, apoptosis signalling
│
▼
Report — ASI:One or Claude (claude-opus-4-6)
Structured clinical summary: headline, stage findings, risk rationale,
mitigation suggestions, confidence caveats
│
▼
Output: SAFE / CAUTION / HIGH RISK + risk vector + clinical report
Architecture
The pipeline has two parallel implementations that share the same tool layer:
- LangGraph graph (
src/agents/graph.py) — compiled StateGraph used by the Streamlit web app and the terminal demo - Fetch AI multi-agent bureau (
fetch/bureau_multi.py) — seven specialist uAgents (one per stage + an orchestrator) that communicate via the Agentverse message protocol
Both use the same PipelineRequest / PipelineResponse contract and the same underlying tools.
Real Tools
| Stage | Tool | Status |
|---|---|---|
| Stage 1 | ESMFold via ESM Atlas REST API | ESMFOLD_ENABLED=1 |
| Stage 2 | IEDB REST API (NetMHCpan / NetMHCIIpan) | IEDB_ENABLED=1 |
| Stage 3b | BepiPred via IEDB REST API | BEPIPRED_ENABLED=1 |
| Report | ASI:One | ASI1_API_KEY=<key> |
| Report | Claude (claude-opus-4-6) | ANTHROPIC_API_KEY=<key> |
Stages 3a (NetTCR-2.0) and 4 (GenBio AIDO) have mock implementations. The abstract base classes in src/tools/base.py map 1:1 to real implementations — no graph changes required to wire them.
Quick Start
See SETUP.md for full installation and configuration instructions.
# Install
uv sync
# Run the web app (recommended)
uv run streamlit run app.py
# Run the terminal demo (no API keys required)
uv run python demo.py
# Run with all available real tools
export ESMFOLD_ENABLED=1
export IEDB_ENABLED=1
export BEPIPRED_ENABLED=1
export ASI1_API_KEY=<your key>
uv run streamlit run app.py
Fetch AI Multi-Agent Demo
Each of the 7 specialist agents + orchestrator runs in its own terminal with an Agentverse mailbox. The full pipeline routes through Agentverse's relay — agents are individually reachable from any Agentverse client.
# One-time setup: register all 7 agents on Agentverse
export AGENTVERSE_KEY=<your Agentverse API key>
uv run python register_agents.py
# Start all agents (one terminal each, all with AGENTVERSE_MAILBOX=1)
export AGENTVERSE_MAILBOX=1 && uv run python -m fetch.multi.orchestrator
export AGENTVERSE_MAILBOX=1 && uv run python -m fetch.multi.stage1_agent
# ... (repeat for stage2, stage3_tcr_agent, stage3_bcell_agent, stage4_agent, report_agent)
# Re-register after agents are running (updates Agentverse with relay URLs)
uv run python register_agents.py
# Run the full pipeline via the orchestrator — do NOT set AGENTVERSE_MAILBOX on the client
export ORCHESTRATOR_AGENT_ADDRESS=agent1q... # from orchestrator startup log
uv run python -m fetch.demo_client --target orchestrator --scenario high_risk
# Call any individual stage directly
export STAGE2_AGENT_ADDRESS=agent1q...
uv run python -m fetch.demo_client --target stage2 --scenario high_risk
Available targets: orchestrator, stage1, stage2, stage3-tcr, stage3-bcell, stage4.
Available scenarios: high_risk, early_exit, systems_failure, all_clear.
Project Structure
src/
models/pipeline.py Pydantic schemas (stage I/O + PipelineState)
tools/
base.py Abstract base classes for each tool type
registry.py Tool factory — controls mock / real selection
mock/ Mock implementations (all 4 stages)
real/
structural_tool.py ESMFold via ESM Atlas + HuggingFace
hla_tool.py IEDB NetMHCpan Class I + II
bcell_tool.py BepiPred via IEDB
report/
asi1_tool.py ASI:One clinical report
claude_tool.py Claude (claude-opus-4-6) clinical report
mock_tool.py Canned scenario-specific reports
agents/
nodes.py LangGraph node functions and routing logic
graph.py StateGraph definition and compilation
scoring.py Risk vector aggregation
fetch/
messages.py Public message contract
pipeline_agent.py Monolithic uAgent
bureau.py Monolithic bureau
bureau_multi.py Multi-agent bureau — starts 7 agents + orchestrator, no auto-run
demo_client.py Interactive client — full pipeline or individual stage
client_agent.py Batch client — sends all 4 scenarios to the orchestrator
multi/ Specialist agent implementations
register_agents.py One-shot Agentverse registration for all 7 agents
app.py Streamlit web app
demo.py Rich terminal demo — 4 scenarios
Scenarios
| Scenario | Description |
|---|---|
| A — HIGH_RISK | Full pipeline, strong HLA binder, TCR + B-cell reactivity flags, high_risk result |
| B — EARLY_EXIT | Pipeline terminates at Stage 2 (both HLA class thresholds clear) |
| C — SYSTEMS_FAILURE | Immune system tolerates the edit; Stage 4 detects cellular disruption |
| D — ALL_CLEAR | Full pipeline, safe result |
Analysis
View
Metric
No commits on this project resolved to a GitHub account.
Technology
- AnthropicIn code
- OpenAIIn code
- PythonIn code
- StreamlitIn code
4 of 4 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
286 KB
Source files
52
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Gr1nx-bitbit/ai_hackathon_2026
59 files · 610 KB · @ 756c328
Structure
Application logic
29 files · 49%Domain rules, services and shared utilities.
Data & schema
2 files · 3%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python78%
- Markdown22%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
pyproject.toml
pypi · 10- anthropic
- biopython
- langchain-core
- langgraph
- openai
- plotly
- pydantic
- rich
- streamlit
- uagents
requirements.txt
pypi · 8- anthropic
- biopython
- langchain-core
- langgraph
- pydantic
- requests
- rich
- uagents
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Fetch AI uAgents multi-agent network layer with orchestrator routingVerified
Fetch AI uAgents provides the multi-agent network layer; the orchestrator holds addresses of all specialists and routes messages through the Agentverse relay. Any agent can be called directly.
Claimed on Devposthigh confidencefetch/multi/orchestrator.py:61— create_orchestrator takes specialist addresses, sends typed Stage*Request/Response messages between agents via uAgents Agent/Context, supporting a mailbox relay modefetch/bureau_multi.py:25— bureau_multi wires the orchestrator with all six specialist agent addresses and runs them together via uagents.Bureau
Four-stage in silico safety pipeline (structural, HLA, immune reactivity, systems)Verified
The pipeline runs four stages in sequence: structural modeling, HLA binding prediction, parallel immune reactivity analysis, and whole-transcriptome systems dynamics.
Claimed on Devposthigh confidencesrc/agents/graph.py:44— build_graph wires stage1 -> stage2 -> [stage3_tcr, stage3_bcell] -> stage3_join -> stage4 -> aggregate -> reportsrc/agents/nodes.py:32— Node functions implement each stage by calling the corresponding tool from the registry
LLM clinical report synthesis via ASI:One or ClaudeVerified
A final LLM node, powered by ASI:One or Claude, synthesizes results into a plain-language clinical report with headline, per-stage findings, risk rationale, and mitigation suggestions.
Claimed on Devposthigh confidencesrc/tools/report/asi1_tool.py:74— ASI1ReportTool calls the ASI:One OpenAI-compatible API and validates a ClinicalReport with headline/stage_findings/risk_rationale/mitigation_suggestions/confidence_notesrc/tools/report/claude_tool.py:41— ClaudeReportTool calls anthropic.Anthropic().messages.parse with structured ClinicalReport outputsrc/tools/registry.py:66— get_report_tool auto-selects ASI:One, then Claude, then mock based on env vars, matching the described selection order
Mock-to-real tool swapping via a common abstract base class layerVerified
All tools share a common abstract base class layer, so swapping a mock for a real implementation requires no changes to the pipeline graph or agent logic.
Claimed on Devposthigh confidencesrc/tools/base.py:1— Defines abstract base classes (StructuralTool, HLABindingTool, TCRTool, BCellTool, SystemsTool, ReportTool) implemented by both mock/ and real/ tool modulessrc/tools/registry.py:32— get_structural_tool/get_hla_tool/get_bcell_tool switch between mock and real implementations behind the same function signature, controlled by env flags
Parallel Stage 3 T-cell (NetTCR mock) and B-cell (BepiPred) branchesVerified
Parallel Send dispatch for the Stage 3 T-cell and B-cell branches, with a single aggregation/join node.
Claimed on Devposthigh confidencesrc/agents/nodes.py:73— route_after_stage2 returns [Send('stage3_tcr', state), Send('stage3_bcell', state)] for true parallel fan-outsrc/tools/real/bcell_tool.py:237— BepiPredBCellTool implements real B-cell epitope prediction via IEDB bcell/ endpointsrc/tools/mock/stage3.py:26— MockTCRTool provides the NetTCR-2.0 stand-in referenced as a high-fidelity mock
Seven specialist agents + orchestrator registered on Agentverse via register_chat_agentVerified
Seven specialist agents, one per pipeline stage plus an orchestrator, are independently registered on Agentverse using register_chat_agent with cryptographic identity derived from seed phrases.
Claimed on Devposthigh confidenceregister_agents.py:34— AGENTS list defines exactly 7 entries (orchestrator + 6 stage agents) each registered via register_chat_agent with a seed phrase and RegistrationRequestCredentials
Stage 1 structural modeling via ESMFold with pLDDT/SASA and retry loopVerified
Structural modeling (ESMFold + SASA surface exposure); low confidence prediction triggers a fallback re-run.
Claimed on Devposthigh confidencesrc/tools/real/structural_tool.py:302— ESMFoldStructuralTool calls ESM Atlas/HuggingFace REST APIs, parses PDB for pLDDT (B-factor) and computes SASA via BioPython ShrakeRupleysrc/agents/nodes.py:45— route_after_stage1 retries once via increment_retry when confidence is low, matching the conditional-edge retry loop
Stage 2 HLA Class I + II binding prediction via IEDB NetMHCpan/NetMHCIIpanVerified
HLA binding prediction (NetMHCpan Class I + II via IEDB).
Claimed on Devposthigh confidencesrc/tools/real/hla_tool.py:214— IEDBHLABindingTool posts to IEDB mhci/ and mhcii/ endpoints per allele, computing top_class_i_rank and top_class_ii_rank
Streamlit web app for running the pipelineVerified
uv run streamlit run app.py runs the recommended web app.
Claimed on readmehigh confidenceapp.py:14— app.py imports build_graph from src.agents.graph and streams pipeline updates (pipeline.stream(...)) inside a Streamlit UI
Terminal demo with four named scenarios (high_risk, early_exit, systems_failure, all_clear)Verified
Terminal demo (demo.py) runs 4 scenarios, no API keys required.
Claimed on readmehigh confidencedemo.py:30— SCENARIOS list and SCENARIO_LABELS (including 'high_risk') define the four named scenarios referenced in the README
Two parallel implementations sharing a common tool layer (LangGraph + uAgents)Verified
The pipeline has two parallel implementations that share the same underlying tool layer: LangGraph StateGraph and Fetch AI uAgents.
Claimed on Devposthigh confidencesrc/agents/nodes.py:18— LangGraph nodes call src.tools.registry get_*_tool functionsfetch/multi/stage1_agent.py:1— uAgents stage agents also invoke the same src.tools tool layer (imported per stage), confirming a shared tool layer across both implementations
Weighted risk vector aggregation with SAFE/CAUTION/HIGH RISK verdictVerified
Pipeline synthesizes results into a headline verdict with per-stage findings and risk rationale (SAFE / CAUTION / HIGH RISK).
Claimed on readmehigh confidencesrc/scoring.py:69— compute_risk_vector computes weighted structural/immunogenic/reactivity/systems risk and maps overall score to safe/caution/high_risk thresholds
Composable individual-stage API (any agent can call a stage directly)Code-supported
Any AI agent on the network can call individual stages directly or route through the orchestrator for a full pipeline run, making the system composable infrastructure.
Claimed on Devpostmedium confidencefetch/demo_client.py:1— demo_client supports --target orchestrator|stage1|stage2|stage3-tcr|stage3-bcell|stage4, implying individually addressable stage agents, though true third-party composability beyond this repo's own client cannot be confirmed
Pipeline dual-gate / high-risk early exit at Stage 2 and Stage 3Code-supported
Both gates clear -> early exit (safe); either flag -> early exit (high risk - adaptive immunity activated). Comments describe 'Stage2 early exit gate' and 'Stage3 high-risk early exit'.
Claimed on readmehigh confidencesrc/agents/graph.py:69— route_after_stage2 always fans out to both Stage 3 branches regardless of gate status ('always fan out', per inline comment), and stage3_join unconditionally edges to stage4 ('always runs'); no conditional short-circuit to report/aggregate exists in the compiled graphfetch/multi/orchestrator.py:309— handle_stage2_response always sends to both stage3_tcr_addr and stage3_bcell_addr with no gate check, and _proceed_after_stage3 always calls Stage4 regardless of high_risk flag, despite the module docstring claiming 'Stage2 early exit gate' and 'Stage3 high-risk early exit'app.py:338— UI only displays early-exit messaging in text/info boxes after the full pipeline has already run; it does not reflect an actual skipped computation
Stage 4 whole-transcriptome systems dynamics (mock GenBio AIDO)Code-supported
Whole-transcriptome systems dynamics detects transcriptome perturbation, splice-site disruption, apoptosis signalling.
Claimed on readmemedium confidencesrc/tools/mock/stage4.py:1— Mock systems tool exists and is wired via get_systems_tool; registry.py raises NotImplementedError for real mode, so only the mock implementation backs this stagesrc/tools/registry.py:60— get_systems_tool raises NotImplementedError when mode=='real', confirming GenBio AIDO is not actually integrated, only mocked
NetTCR-2.0 and GenBio AI AIDO real integrationsClaimed only
Stages 3a (NetTCR-2.0) and 4 (GenBio AI AIDO) use high-fidelity mock implementations that replicate the expected output schemas.
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.