Scientific Research Reasoning Engine for analyzing experimental evidence, evaluating scientific claims, and generating structured research reports.
FAQ
experiment-audit is a Claude Code plugin with 1 hand-picked skill for development work, indexed on Flowy. Install it with the command on its page. It includes experiment-audit. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
$ npx -y skills add SreeDharshan-GJ/experiment-audit --agent claude-code
A scientific reasoning engine for ML experiments.
Feed it claims and evidence โ it checks for missing support, scopes evidence to claims, catches contradictions, scores confidence, and renders a structured scientific report. The kind of review a careful advisor would give your results before you write them up.
Created and maintained by Sree Dharshan G J
Most experiment-tracking tools show you numbers.
experiment-auditchecks whether your claim about those numbers actually holds up โ missing evidence, out-of-scope comparisons, contradictions with earlier results, and confidence that isn't just assumed.
pip install experiment-audit
Requires Python 3.11+. See Quick start below, or jump straight to Claude Code integration.
from experiment_audit.reasoning import (
ScientificReasoningPipeline, ScientificReport,
Claim, ClaimCategory, Scope,
)
claim = Claim(
id="c1",
subject="model-x",
statement="model-x achieves 95% accuracy on CIFAR-10",
category=ClaimCategory.PERFORMANCE,
scope=Scope(dataset="cifar-10"),
)
pipeline = ScientificReasoningPipeline()
context = pipeline.build_initial_context(claims=[claim], evidence=[])
report = ScientificReport.from_pipeline_report(pipeline.execute(context))
print(report.to_markdown())
Claim โ Evidence โ Reasoning โ Scientific Report. Every finding in the output traces back to specific evidence โ the engine doesn't assert anything it can't point to.
Prefer the command line?
experiment-audit reasoning schema > claims.json # see the expected input shape
experiment-audit reasoning run --input claims.json --format markdown
The reasoning discipline behind this project โ how to phrase findings, weigh
contradictory evidence, and write structured reviewer-style feedback โ ships as a
Claude Code skill, with the eight MCP audit tools
available automatically wherever WANDB_API_KEY is set.
โ Claude Code โ run from inside this repo
/plugin marketplace add ./dev/experiment-audit-plugin
/plugin install experiment-audit@experiment-audit
It triggers automatically on prompts like:
See Quick start: the MCP server below for manual MCP setup, or the plugin's own README for full details.
Traditional experiment trackers are good at one thing: displaying metrics. They will happily tell you a run's final accuracy, loss curve, or config diff. What none of them do is check whether the sentence you're about to write about those numbers is actually supported by them.
experiment-audit treats a result the way a careful reviewer would before publication:
This matters most for reproducibility, ablations, and the kind of paper-writing claims that are easy to overstate under deadline pressure โ the exact places research claim verification tends to break down silently.
| ML engineers | sanity-check a result before it ships in a report or a PR description |
| AI researchers | catch confounded ablations and out-of-scope comparisons before submission |
| Graduate students | get reviewer-style feedback on a results section before your advisor does |
| Research labs | a shared, deterministic check for scientific claims across a team's experiments |
| Academic / open-source projects | structured, evidence-traced scientific reports instead of ad hoc write-ups |
Given a set of claims ("model-x achieves 95% accuracy on CIFAR-10") and the
evidence backing them (metrics, configs, logs, prior runs), the engine runs six rules
in sequence and produces a ScientificReport:
| # | Rule | What it checks |
|---|---|---|
| 1 | Missing evidence | Does this claim have any supporting evidence trace at all? |
| 2 | Scope | Does the evidence actually match the claim's stated scope (same dataset, same hardware, same evaluation protocol)? |
| 3 | Contradiction | Does any other claim or evidence item conflict with this one? |
| 4 | Confidence | A computed score, not a guess โ based on evidence quality, quantity, contradictions found, and what's missing. |
| 5 | Judgment | A verdict (supported / partially supported / unsupported) with the reasoning behind it. |
| 6 | Recommendation | What to do about it โ gather more evidence, narrow the claim's scope, retract it. |
Every finding traces back to specific evidence. Nothing in the report is an unsupported assertion โ that would rather defeat the point.
This is one of two reasoning pipelines in the package. The second, lower-level pipeline (
ScientificReasoningEngineโ Evidence โ Observations โ Hypotheses โ Confidence โ Judgment โ Recommendation) is a more generic, extensible framework for injecting custom hypothesis and confidence logic. Most people should start with the six-rule pipeline above. Seesrc/experiment_audit/reasoning/__init__.pyfor both.
Reasoning engine (the core)
Claim, EvidenceItem, Scope) with structured categoriesScientificReport โ Markdown, JSON, or plain textInterfaces around the engine
experiment_audit.reasoning, for embedding the pipeline in your own toolingexperiment-audit reasoning run|schemaThe original W&B experiment-audit tools are still here, unchanged, as an MCP
integration. Set a read-only W&B API key:
export WANDB_API_KEY="your-read-only-key"
export WANDB_ENTITY="your-team-or-username" # optional
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"experiment-audit": {
"command": "experiment-audit-mcp",
"env": {
"WANDB_API_KEY": "your-read-only-key"
}
}
}
}
Claude Code:
โ Claude Code
claude mcp add -e WANDB_API_KEY=your-read-only-key experiment-audit -- experiment-audit-mcp
-emust come before the server name, not after โ putting it after the name has been a source of "Invalid environment variable format" errors in some Claude Code versions.
Then ask your agent something like:
"Did I mess up my memory-ablation run? Compare
mamfac-baselineandmamfac-no-memoryin themamfacproject and check whether the only real difference isuse_memory."
The agent calls audit_ablation, which returns a verdict
(clean / confounded / uncertain), a confidence level, and the full config diff it
based that verdict on.
Full tool reference (all eight tools, exact schemas, methodology) is in
docs/design-spec-v1.md and
docs/audit-methods.md โ unchanged from the v1.0.0 release.
experiment_audit/
โโโ reasoning/ # the Scientific Reasoning Engine
โ โโโ claims.py # Claim, ClaimSet, Scope
โ โโโ evidence.py # Evidence, EvidenceItem (shared by both pipelines)
โ โโโ contradictions.py # Contradiction, ContradictionSet
โ โโโ scientific_rules/ # the six concrete rules
โ โ โโโ missing_evidence_rule.py
โ โ โโโ scope_rule.py
โ โ โโโ contradiction_rule.py
โ โ โโโ confidence_rule.py
โ โ โโโ judgment_rule.py
โ โ โโโ recommendation_rule.py
โ โโโ rules.py # RuleContext, ScientificRule base
โ โโโ pipeline.py # ScientificReasoningPipeline: runs the six rules in order
โ โโโ scientific_report.py # ScientificReport: to_markdown/to_json/to_text
โ โโโ observations.py # generic pipeline: pattern detection over Evidence
โ โโโ hypotheses.py # generic pipeline: candidate explanations
โ โโโ confidence.py # generic pipeline: confidence scoring
โ โโโ judgment.py # generic pipeline: verdict rendering
โ โโโ recommendation.py # generic pipeline: recommendations
โ โโโ engine.py # ScientificReasoningEngine: the generic pipeline's orchestrator
โโโ cli.py # `experiment-audit reasoning run|schema`
โโโ models.py # RunRef, Run, MetricPoint, MetricHistory, Sweep, Page[T]
โโโ errors.py # ToolError + the frozen error_type taxonomy
โโโ server.py # FastMCP entrypoint; registers the 8 W&B audit tools
โโโ backends/
โ โโโ base.py # ExperimentBackend ABC, BackendCapability
โ โโโ fake_backend.py # in-memory test double
โ โโโ wandb_backend.py # real W&B implementation
โโโ analysis/ # the W&B audit tools' pure heuristics
โโโ comparison.py
โโโ divergence.py
โโโ confound.py
โโโ sensitivity.py
The reasoning engine and the MCP/W&B layer are independent โ the reasoning engine takes
Claims and EvidenceItems directly and has no dependency on W&B, FastMCP, or any
backend. Feeding W&B run data into the reasoning engine as claims/evidence (rather than
hand-constructing them, as the quick-start example above does) is on the
roadmap.
For the reasoning engine's design rationale, see
research/07_reasoning_engine/
(reasoning-engine.md, reasoning-rules.md, confidence-system.md, evidence-model.md,
scientific-reviewer.md). For the MCP/W&B layer's frozen contract, see
docs/design-spec-v1.md.
Claims/EvidenceItems yet โ you
construct them yourself (CLI schema or Python), or write your own extraction step. This
is the top roadmap item.ScientificReasoningEngine) defaults its rule-engine stage to a
no-op unless you inject one โ it's an extensibility point, not a second complete
pipeline.pytest tests/ -q); this is real coverage of the pipeline's mechanics,
not a substitute for domain review of the six rules' thresholds by someone in your
research area.audit_sweep's correlation ranking only detects linear relationships.Full detail, including what's blocked purely by this build environment's lack of live
credentials, is in docs/design-spec-v1.md and the
CHANGELOG.
git clone https://github.com/SreeDharshan-GJ/experiment-audit.git
cd experiment-audit
pip install -e ".[dev]"
pytest tests/ -q # 274 tests
ruff check src/ tests/ # lint
The reasoning engine's tests need no network access or credentials at all โ they run
entirely on in-memory Claim/Evidence fixtures. The MCP/W&B layer's tests run against
FakeBackend, an in-memory test double that can inject every adversarial state named in
the design spec.
Contributions are welcome โ please read CONTRIBUTING.md first.
The MCP/W&B layer's v1 design (docs/design-spec-v1.md) is frozen: changes to its
tool schemas, model fields, or backend interface need an explicit, logged design decision,
not a silent PR. The reasoning engine's six rules and their thresholds are newer and more
open to discussion โ if you're proposing a change to rule logic (as opposed to wiring),
explain the reasoning-quality tradeoff you're making, not just the code change.
Claim/EvidenceItem objects.audit_* and reasoning-rule
contributions.If experiment-audit was useful in your research or workflow, a citation or a link back
is genuinely appreciated:
@software{experiment_audit,
author = {Sreedharshan G J},
title = {experiment-audit: A Scientific Research Reasoning Engine for ML Experiments},
year = {2026},
url = {https://github.com/SreeDharshan-GJ/experiment-audit}
}
Built and maintained by Sree Dharshan G J.
If this project is useful to you, a star on the repo is the easiest way to support it and helps others find it.
MIT โ see LICENSE.
.github/
workflows/
ci.yml
.gitignore
assets/
banner.png
banner1.png
CHANGELOG.md
CONTRIBUTING.md
dev/
experiment-audit-plugin/
.claude-plugin/
marketplace.json
plugin.json
.mcp.json
CHANGELOG.md
README.md
skills/
experiment-audit/
examples.md
prompts.md
reference.md
SKILL.md
docs/
audit-methods.md
design-spec-v1.md
implementation-roadmap-v1.md
launch-post.md
tool-selection-eval.md
wandb_fixture_plan.md
LICENSE
pyproject.toml
README.md
research/
00_vision/
roadmap-v2.md
vision.md
01_landscape/
competitor-analysis.md
market-map.md
user-problems.md
02_literature/
bibliography.md
notes.md
papers.md
related-work.md
03_workflows/
pain-points.md
researcher-workflows.md
workflow-ranking.md
04_benchmarks/
benchmark-plan.md
05_moonshots/
future-ideas.md
moonshot.md
rejected-ideas.md
07_reasoning_engine/
confidence-system.md
evidence-model.md
knowledge-memory.md
reasoning-engine.md
reasoning-rules.md
roadmap.md
scientific-reviewer.md
README.md
research-progress.md
scripts/
record_wandb_fixtures.py
tool_selection_eval.py
tool_selection_prompts.py
src/
experiment_audit/
__init__.py
analysis/
__init__.py
comparison.py
confound.py
divergence.py
sensitivity.py
auth.py
backends/
__init__.py
base.py
fake_backend.py
wandb_backend.py
cli.py
errors.py
models.py
reasoning/
__init__.py
claims.py
confidence.py
contradictions.py
engine.py
evidence.py
hypotheses.py
judgment.py
observations.py
pipeline.py
recommendation.py
rules.py
scientific_report.py
scientific_rules/
__init__.py
confidence_rule.py
contradiction_rule.py
judgment_rule.py
missing_evidence_rule.py
recommendation_rule.py
scope_rule.py
server.py
tests/
__init__.py
fixtures/
__init__.py
adversarial_cases.py
README.md
reasoning/
test_build_initial_context_regression.py
test_claims_contradictions_serialization_regression.py
test_contradiction_rule.py
test_engine_confidence_wiring_regression.py
test_pipeline_serialization_regression.py
test_reasoning_rules_scalability_regression.py
test_scientific_report_regression.py
test_adversarial_mcp_layer.py
test_backend_base.py
test_comparison.py
test_confound.py
test_divergence.py
test_fake_backend.py
test_models.py
test_package_imports.py
test_sensitivity.py
test_server.py
test_tool_selection_prompts.py
test_wandb_backend_fixtures.py
test_wandb_backend.py
validation/
annotation-guidelines.md
capability-matrix.md
datasets.md
experiments/
generate_wandb_testbed.py
README.md
results/
AUDIT_SWEEP.md
AUDIT_TRAINING_CURVE.md
RC1_VALIDATION_SUMMARY.md
V1_1_ROADMAP.md
validation-plan.mdยฉ 2026 Flowy ยท Free and open source
Built for Claude Code ยท Not affiliated with Anthropic