Structured document review grounded in Laura Serna Gaviria's Human–AI
Co-Evolution research. An MCP (Model Context Protocol) server: any agent submits
a plan or document, gets back structured findings across four lenses (free) or the
full 15-agent expert team (review_team) — no opaque score, every finding cites
the exact span of your text it's reacting to.
Renamed 2026-07-13: call-laura-core → lauras-core, laura-mcp → lauras-mcp,
laura-api → lauras-api, laura-team → lauras-team. All four now publish
together at v0.2.0.
Fully deterministic and local. No network call, no API key, no external
dependency. The same document always produces the same review — every finding
traces back to a plain keyword/pattern match you can read directly in
laura-core/src/lenses/. This is a deliberate trade: real semantic
understanding for full reproducibility, transparency, and zero cost. See "Why
it's different" below for what that trade actually costs.
Co-designed by Laura Serna Gaviria (Emergent Interaction Lab), Simeon Kepp (RFI-IRFOS), and Claude. Part of RFI-IRFOS's open-core model.
Live, 2026-07-13. Laura reviewed real sample output before this shipped, and confirmed
the licensing terms below before the 2026-07-13 public rename/republish. lauras-core,
lauras-mcp, lauras-team, and lauras-api are all published on crates.io at v0.2.0;
lauras-api is also deployed at laura-api.fly.dev, serving
/mcp (what the Smithery listing uses), /review, and /team.
50 unit tests, verified end-to-end against both the local stdio server and the live
public URL.
An earlier version of this tool called an LLM (NVIDIA-hosted) per lens. That
path is gone — not deferred, removed — after the NVIDIA account hit a
persistent 403 Forbidden on every inference call despite /v1/models
succeeding (an account-side entitlement gap, confirmed across 5 different
models). Rather than wait on that, every lens was rewritten as deterministic
keyword/pattern matching. This turned out to be a genuine improvement, not just
a workaround: zero cost, zero external dependency, and every decision is now
fully inspectable in source rather than living inside an LLM's judgment call.
This is the most important section in this README. Every one of the four lenses
below carries a mandatory source field in its output, and it is exactly one of:
source |
Meaning |
|---|---|
laura-8layer-2025 / laura-uip-2025 |
Directly Laura Serna Gaviria's own published framework — see her OSF preprint, Human–AI Interaction Emergent Co-Evolution. |
rfi-irfos-operationalization |
A concept she names in her paper, but this project's own operational definition of how to measure/apply it — not verbatim hers. |
rfi-irfos-addition |
Not from her framework at all. |
Only eight_layer and uip_check are directly hers — specifically, the
category/rule names. The classification method (keyword matching) applying
those names to your text is this project's own operationalization, not
something her paper specifies an algorithm for. resonance uses the same
general idea as her paper's CCET metric (compare passages, measure similarity)
applied to a different question (cross-section agreement in a static document,
not turn-to-turn stability in a live conversation) and a cruder mechanism
(shared words, not shared meaning) — it is explicitly not CCET.
ecocentric is entirely RFI-IRFOS's own addition and has no connection to her
research; it ships in this tool because the team co-designing it chose to
include it, not because it's grounded in her work.
This discipline is inherited directly from the production platform this project
was extracted from (emergent-interaction-lab), which holds itself to the same
standard for the same reason: a review tool bearing a named researcher's
identity only has integrity if you can verify, per finding, whether it's really
her work or this project's own judgment call.
-
No opaque score. Every finding names a
claim, quotes the exactevidencespan from your input it's reacting to, and carries aseverity.uip_check/ecocentricfindings are only ever constructed from spans actually present in your text — there's no separate "generate then verify" step to get wrong, the finding is the matched sentence. -
Four independent lenses, not one blended verdict:
Lens What it checks How Source eight_layerClassifies each section against Laura's 8-Layer taxonomy, flags entirely-absent layers Keyword triggers per layer laura-8layer-2025uip_checkHer UIP's four rules: stated constraints, unsupported absolute claims, unverified "done" claims, un-auditable conclusions Sentence-level pattern matching laura-uip-2025resonanceFlags low lexical overlap between sections that should plausibly agree (e.g. goals vs. success criteria) Local term-frequency cosine similarity rfi-irfos-operationalizationecocentricMissing environmental/downstream/long-term/systemic consideration Keyword-category presence check rfi-irfos-addition -
Honest, explicit limitations. Every lens's
attribution_notestates plainly what keyword matching can't do (miss things phrased without trigger words, false-positive on words used in an unrelated sense, no real semantic understanding). This isn't hedging — it's the actual shape of the trade this version makes, said out loud rather than implied by confident-sounding output. -
Honest partial failure. A lens with no classifiable input (e.g.
resonanceon a single-section document) reports its ownerrorfield rather than a fabricated result —call_laura_core::reviewruns every lens independently.
cargo install lauras-mcp
claude mcp add laura -s user -- lauras-mcpNo API key, no environment setup. Then, from any MCP-connected agent:
lauras-api is deployed to Fly.io. Three surfaces on the same server:
POST /mcp— MCP JSON-RPC over HTTP, keyless, rate-limited only. This is what the Smithery listing points at, so any MCP-connected agent can usereview_planwith zero setup.POST /review/POST /team— plain REST convenience endpoints,Authorization: Bearer <key>required, same JSON body/response shapes as the MCP tools.GET /healthfor a liveness check. 10 req/min per IP by default on all three — abuse/DoS hygiene, not cost protection (there's no external API cost per request, ever — both/reviewand/teamare fully local computation).
laura-core/ pure lens logic — package name "lauras-core" on crates.io,
open-core, LGPL-3.0-or-later
laura-mcp/ stdio MCP server binary, "lauras-mcp" on crates.io (BSL-1.1)
laura-api/ Fly-hosted HTTP surface, "lauras-api" on crates.io, also deployed (BSL-1.1)
laura-team/ 15-agent "SWAT team" module + Laura orchestrator, "lauras-team" on
crates.io (BSL-1.1) — free 4-lens core lives in laura-core
Every directory keeps its original name; only the crates.io package identity changed
in the 2026-07-13 rename (see each crate's own Cargo.toml for the name field).
lauras-core: LGPL-3.0-or-later. lauras-mcp/lauras-api/lauras-team: Business
Source License 1.1 with a non-commercial/research use grant, commercial/production use
requires a license from RFI-IRFOS. Confirmed with Laura Serna Gaviria 2026-07-13 — see
the NOTE at the top of LICENSE-LGPL and LICENSE-BSL. Full terms in LICENSE.