Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build AI agents that automate scientific research — hypothesis generation, experiment design, data analysis, and paper writing using agentic tree search. Use when: automating research workflows, generating and testing hypotheses, building AI-powered research assistants.
.claude/skills/terminalskills-ai-scientist/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -11% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -33% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -32% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -9% | 0% |
Build AI agents that automate scientific research using AI-Scientist-v2 — an agentic tree search framework for hypothesis generation, experiment design, data analysis, and paper writing.
AI Scientist explores research problems as a tree search: generate candidate hypotheses, evaluate them based on evidence and feasibility, design experiments for promising branches, and prune dead ends. It covers the full research lifecycle from literature review through paper drafting.
bashpip install ai-scientist
Set up API key:
bashexport ANTHROPIC_API_KEY="sk-ant-..." # or OPENAI_API_KEY
pythonfrom ai_scientist import Researcher researcher = Researcher( model="claude-sonnet-4-20250514", domain="machine-learning", ) result = researcher.investigate( question="How does data augmentation affect few-shot learning performance?", max_depth=3, max_hypotheses=5, budget_hours=2, ) print(result.best_hypothesis) print(result.evidence_summary) print(result.suggested_experiments)
pythonfrom ai_scientist import HypothesisGenerator generator = HypothesisGenerator(model="claude-sonnet-4-20250514") hypotheses = generator.generate( context="Recent work shows transformers struggle with compositional generalization", num_hypotheses=5, constraints=[ "Must be testable with existing benchmarks", "Should suggest a concrete architectural modification", ], ) for h in hypotheses: print(f"Hypothesis: {h.statement}") print(f"Novelty: {h.novelty:.2f}, Feasibility: {h.feasibility:.2f}") print(f"Test approach: {h.test_plan}")
pythonfrom ai_scientist import ExperimentDesigner designer = ExperimentDesigner(model="claude-sonnet-4-20250514") experiment = designer.design( hypothesis="Adding a symbolic reasoning layer improves compositional generalization", resources={ "compute": "4x A100 GPUs", "time": "48 hours", "datasets": ["COGS", "SCAN", "CFQ"], }, ) print(experiment.methodology) print(experiment.variables) print(experiment.metrics) print(experiment.code_outline)
pythonfrom ai_scientist import ResultAnalyzer analyzer = ResultAnalyzer(model="claude-sonnet-4-20250514") analysis = analyzer.analyze( hypothesis="Symbolic reasoning layer improves compositional generalization", results_path="./experiment_results/", metrics=["accuracy", "generalization_gap", "training_time"], ) print(analysis.supports_hypothesis) print(analysis.key_findings) print(analysis.next_steps)
pythonfrom ai_scientist import LiteratureReviewer reviewer = LiteratureReviewer(model="claude-sonnet-4-20250514") review = reviewer.review( topic="Compositional generalization in neural networks", sources=["arxiv", "semantic-scholar"], max_papers=50, ) print(review.summary) print(review.research_gaps) print(review.taxonomy)
pythonfrom ai_scientist import PaperWriter writer = PaperWriter(model="claude-sonnet-4-20250514") paper = writer.draft( title="Symbolic Reasoning Layers for Compositional Generalization", sections=["abstract", "introduction", "related-work", "method", "experiments", "results", "discussion", "conclusion"], results=analysis, literature=review, style="neurips", ) paper.save("draft.tex")
pythonfrom ai_scientist import ResearchPipeline pipeline = ResearchPipeline( model="claude-sonnet-4-20250514", output_dir="./research_output/", ) result = pipeline.run( question="Can retrieval-augmented generation reduce hallucination in code generation?", stages=["literature-review", "hypothesis-generation", "experiment-design", "result-analysis", "paper-draft"], config={"tree_search_depth": 3, "hypotheses_per_level": 4, "auto_prune_threshold": 0.3}, ) print(f"Hypotheses explored: {result.total_hypotheses}") print(f"Experiments designed: {result.total_experiments}") print(f"Best finding: {result.top_finding}") print(f"Paper draft: {result.paper_path}")
pythonfrom ai_scientist import Researcher researcher = Researcher(model="claude-sonnet-4-20250514", domain="machine-learning") result = researcher.investigate( question="Does contrastive pre-training improve few-shot classification on medical images?", max_depth=2, max_hypotheses=3, budget_hours=1, ) for h in result.all_hypotheses: print(f"{h.statement} — score: {h.score:.2f}, pruned: {h.pruned}") print(f"Best: {result.best_hypothesis.statement}")
max_depth=2 and max_hypotheses=3 to get quick results before scaling upauto_prune_threshold) controls exploration vs exploitation — lower values explore moresemantic-scholar for ML papers and pubmed for bio/medicalseed in the pipeline config| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 9,538 | 5,208 | -45% | 1 | 1 | 0% | 1,953 | 2,689 | +38% | 0 | 0 | — |
case-02 | fail→fail | 28,046 | 6,921 | -75% | 1 | 1 | 0% | 5,625 | 3,043 | -46% | 0 | 0 | — |
case-03 | fail→pass | 15,681 | 6,333 | -60% | 1 | 1 | 0% | 3,225 | 2,861 | -11% | 0 | 0 | — |
case-04 | fail→pass | 20,332 | 4,645 | -77% | 1 | 1 | 0% | 3,871 | 2,575 | -33% | 0 | 0 | — |
case-05 | fail→pass | 20,513 | 6,261 | -69% | 1 | 1 | 0% | 4,103 | 2,806 | -32% | 0 | 0 | — |
case-06 | fail→pass | 13,551 | 5,240 | -61% | 1 | 1 | 0% | 2,887 | 2,623 | -9% | 0 | 0 | — |
case-07 | fail→pass | 24,476 | 5,461 | -78% | 1 | 1 | 0% | 5,653 | 2,725 | -52% | 0 | 0 | — |
case-08 | fail→pass | 14,892 | 6,705 | -55% | 1 | 1 | 0% | 3,032 | 2,880 | -5% | 0 | 0 | — |
case-09 | fail→pass | 9,505 | 6,668 | -30% | 1 | 1 | 0% | 1,765 | 2,956 | +67% | 0 | 0 | — |
case-10 | pass→pass | 22,388 | 8,871 | -60% | 1 | 1 | 0% | 4,759 | 3,443 | -28% | 0 | 0 | — |
case-11 | fail→pass | 14,225 | 6,973 | -51% | 1 | 1 | 0% | 2,593 | 2,809 | +8% | 0 | 0 | — |
case-12 | fail→pass | 23,372 | 5,433 | -77% | 1 | 1 | 0% | 3,817 | 2,671 | -30% | 0 | 0 | — |
case-13 | fail→pass | 17,281 | 3,883 | -78% | 1 | 1 | 0% | 3,623 | 2,217 | -39% | 0 | 0 | — |
case-14 | fail→pass | 9,931 | 4,021 | -60% | 1 | 1 | 0% | 1,873 | 2,354 | +26% | 0 | 0 | — |
case-15 | fail→pass | 9,104 | 2,881 | -68% | 1 | 1 | 0% | 1,795 | 1,999 | +11% | 0 | 0 | — |
case-21 | pass→pass | 8,115 | 11,168 | +38% | 1 | 1 | 0% | 1,621 | 4,006 | +147% | 0 | 0 | — |
case-16 | fail→pass | 8,871 | 3,333 | -62% | 1 | 1 | 0% | 1,544 | 2,156 | +40% | 0 | 0 | — |
case-17 | pass→pass | 11,204 | 6,337 | -43% | 1 | 1 | 0% | 2,406 | 2,539 | +6% | 0 | 0 | — |
case-18 | fail→pass | 9,665 | 5,128 | -47% | 1 | 1 | 0% | 1,928 | 2,620 | +36% | 0 | 0 | — |
case-19 | fail→pass | 30,455 | 20,969 | -31% | 1 | 1 | 0% | 4,785 | 3,768 | -21% | 0 | 0 | — |
case-20 | pass→pass | 13,607 | 15,945 | +17% | 1 | 1 | 0% | 2,948 | 4,230 | +43% | 0 | 0 | — |
case-22 | pass→pass | 16,221 | 12,845 | -21% | 1 | 1 | 0% | 3,223 | 4,146 | +29% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +73 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.