FlyLab is a WebMCP-enabled virtual neuroethology lab for investigating how an adult fruit-fly neural circuit could influence behavior. A person and an agent work in one visible page session while eight native site tools expose the current workflow state, exact next action, approval boundary, formal analysis methods, and evidence lineage.
The competition story leads with the adult Giant Fiber/DNp01 rapid-escape slice: a literature-supported, bilateral short-mode controller with middle-leg jump and wing-depressor output. FlyLab also includes an adult MDN reverse-walking slice. Both use the deterministic FlyLab mapped-motor model 0.3.0, state-coherent-mapped-circuit-adapter.v2, and stateful-open-field-model-scale.v3; neither executes a connectome, synapses, muscles, aerodynamics, FlyGym, neural dynamics, or a complete fly.
Sites version 29 now serves public model 0.3.0. The current local Chrome 151 report binds a clean 15-frame GF hero capture and 36 seeded runs to source commit 285d15718dcb6565fbc239fa54e4d55a9817ca39; the public Chrome 151 report binds the live deployment's 40-run MDN workflow, additional 36-run GF workflow, and HTTP-200/schema-valid v3 export to source revision 8ff890e07af63028c25a5b2cdbdf1e742493fe8b. Both record all eight tools registered and invoked through an automated, flag-enabled WebMCP protocol client. They are not ChatGPT agent transcripts or proof that an identified person operated the approval control. A ChatGPT Sol/Terra agent run, final video and narration, Devpost publication, and entrant eligibility attestations remain pending.
Use this exact rapid-escape prompt in a supported ChatGPT desktop session:
Investigate how the adult fruit-fly brain coordinates leg and wing output during rapid escape. Separate measured findings from connectome inference and simulation assumptions, draft a falsifiable hypothesis, and design a controlled experiment. Stop for my approval, then continue, analyze every metric, compare conditions, and save the complete evidence bundle.
The expected native path is:
inspect_flylab_state
→ find_fly_circuits
→ draft_fly_hypothesis
→ design_stimulation_trial
→ visible operator approval
→ inspect_flylab_state
→ run_fly_simulation
→ analyze_fly_behavior
→ compare_fly_trials
→ save_fly_evidence
Approval is deliberately absent from the tool inventory. The person reviews and approves the exact visible protocol; the agent then continues through the same eight-tool page surface.
- One read-only inspector plus seven state-changing scientific actions registered with
document.modelContext.registerTool(...). - A persisted discovery decision that records ranked candidates, rejected alternatives, evidence eligibility, and motor-map coverage gaps.
- Hypotheses with a primary outcome, expected direction, mandatory baseline/model-sham controls, causal evidence compatibility, explicit evidence limitations, and a falsification criterion.
- Same-page mutation guards: every state-changing call must echo the inspected
page_session_idandexpected_state_revision. - Caller-generated
operation_ididempotency for simulation and evidence saving. An identical completed retry replays the committed result without another mutation; reusing the ID for different logical input fails closed. - A non-tool approval record that binds the experiment to a detached, deeply frozen protocol snapshot and complete seed manifest. The caller must echo its cryptographic
approved_protocol_hashto run. - Common-random-number-paired deterministic trials with recorded policies, run seeds, trajectory seeds, state-coherent per-run trajectories, exact event timelines, and stable IDs. The Three.js arena replays the selected seeded run; the older
illustrative_condition_replayis retained only as a compatibility artifact and is excluded from analysis and the primary visual audit. - An explicit state model: MDN uses
stance → preparation → reverse_walk → recovery; GF usesstance → preparation → jump → wing_deployment → airborne → recovery. Threshold crossings that cannot express the required body sequence inside the observation window are reported ascensored, while nonexpressed runs remain grounded with zero body output. flylab.behavior-metrics.v5analyses computed from the authoritative per-run state trajectories, with machine-readable formula, unit, sign, aggregation, null, window, provenance, and boundary fields for every requested metric plus exact per-run inspection records.- Two declared batch hashes: legacy FNV-1a
runHashcovers run/trajectory identities only; SHA-256runContentHashcovers the approved protocol, model manifest, and complete condition-run content used by analysis. - Scoped evidence exports:
flylab.experiment-evidence-bundle.v3for the selected lineage andflylab.mission-evidence-bundle.v3for that lineage plus the goal, discovery decision, candidates, exclusions, and coverage gaps. Both travel in aflylab.evidence-exportschema-version-3envelope documented by the deployed portable export JSON Schema. - A declared calibration boundary: GF state-transition order and approximate event intervals are constrained by cited adult escape measurements, but response probabilities, amplitudes, controller gains, recovery timing, and all MDN dynamics remain hand-authored and unfitted.
- Bounded autoresearch: comparison may propose one follow-up within the visible person-selected budget, but never authorizes or executes it.
Requirements: Node.js 22.13 or newer.
npm ci
npm run devOpen the local URL printed by the development server.
Supported WebMCP execution surfaces for judging are:
- ChatGPT desktop's built-in browser with GPT-5.6 Sol or GPT-5.6 Terra, the current app, Settings → Browser → Permissions → Enable site tools enabled, and an eligible account/workspace rollout. The external Chrome extension is a browser-control surface, not the Site Tools bridge.
- Chrome 149 or newer with WebMCP testing and DevTools WebMCP support enabled.
An eligible product/version label is not proof that tools are available in the current page session. Check the visible runtime diagnostic and the client tool inventory. Do not substitute a static manifest, DOM packet, browser automation, or guided-example control for a WebMCP callback.
Local checks:
npm test
npm run lint
npm run build
FLYLAB_URL=http://localhost:3000/ npm run verify:webmcpUse the actual local URL if the development server chose a different port. npm run verify:webmcp is the supported Chrome protocol verifier; it is not evidence of a successful run until it exits successfully and its report is retained.
Call inspect_flylab_state before the first mutation and again after navigation, interruption, cancellation, any visible edit, or whenever a structured failure directs you back to inspection. Other failures publish semantic recovery for the exact invalid field, visible approval gate, discovery retry, or replacement operation ID. The inspector returns flylab.agent-context.v3, including the page-session ID, monotonic revision, artifact manifest, approval binding, blocker, and exactly one next action.
Every mutation requires:
page_session_id: the exact ID for the current open page;expected_state_revision: the most recently inspected or successfully returned revision.
A wrong session or revision returns non-retryable STALE_STATE, publishes no requested mutation, and points back to inspect_flylab_state. Successful flylab.tool-result.v3 envelopes include page_session_id, previous_state_revision, state_revision, created_artifact_ids, operation_id, idempotent_replay, next_action, a visible verification target, and field-addressed provenance.
run_fly_simulation and save_fly_evidence additionally require a stable caller-generated operation_id. The cache key is scoped to this page session and tool. Retrying a completed operation with the same logical input returns idempotent_replay: true, no new artifacts, and no state advance. The inspected revision may be newer because revision is excluded from logical operation identity. The same ID with changed logical input returns INVALID_INPUT with conflict: operation_id_input_mismatch.
design_stimulation_trial always creates an unapproved protocol. An operator reviews the exact visible experiment and clicks the approval control. FlyLab then creates a detached, deeply frozen flylab.experiment-approval record containing:
- the complete protocol snapshot, model version, metric-method version, and seed-policy version;
- every condition's compatibility-replay seed, retained and committed for deterministic backward compatibility;
- every replicate's run seed and trajectory seed;
- SHA-256 commitments at
protocol_hashandseed_manifest_hash.
The approval timestamp is metadata outside the hashes. run_fly_simulation requires the exact approved_protocol_hash exposed by the inspector and verifies both stored commitments against the current experiment. A protocol, model, metric method, or seed-manifest mismatch fails closed. Editing a protocol field creates a revised experiment and clears approval, batch, analyses, comparison, and bundle. This is visible authorization for one virtual experiment, not identity-authenticated protection against general browser automation and not wet-lab approval.
| Tool | Purpose | Boundary |
|---|---|---|
inspect_flylab_state |
Return current session, revision, artifacts, human gate, pipeline, and one next action. | Sole read-only tool. Human goal text is untrusted. |
find_fly_circuits |
Rank bounded circuit candidates and return a stable discovery decision, evidence closure, motor paths, and coverage. | Writes shared selection; source text is untrusted. |
draft_fly_hypothesis |
Create a falsifiable, metric-linked claim with compatible causal evidence and limitations. | Remains agent_hypothesized. |
design_stimulation_trial |
Create controls, timing, laterality, model settings, seed policy, and conditions. | Writes an unapproved virtual protocol. |
run_fly_simulation |
Execute the current approved protocol and expose exact per-run results and trajectories. | Requires session/revision, approval hash, and operation ID; output is simulation_predicted. |
analyze_fly_behavior |
Compute the complete motor-map metric panel and return formal definitions plus per-run audit rows. | Full-trial flylab.behavior-metrics.v5; derived from authoritative state trajectories only. |
compare_fly_trials |
Rank compatible analyses and propose one bounded next experiment. | Proposal is not execution authority. |
save_fly_evidence |
Save an experiment or mission v3 bundle and return its exact portable envelope. |
Requires operation ID; browser-local storage is convenience only. |
The page exposes a flylab.webmcp-capability-diagnostic.v1 record with secure-context, origin-cluster, permissions-policy, document.modelContext, registerTool, registration-attempt, accepted-count-before-rollback, failed-tool, and sanitized exception fields. It distinguishes:
- API absent;
registerToolmissing;- registration failed and rolled back;
- all eight page registrations accepted;
- a WebMCP callback observed in this page session.
Registration alone cannot establish client, model, account, workspace, permission, rollout, or agent identity. An observed callback proves invocation through the browser surface, not that the caller was a ChatGPT agent.
When WebMCP is unavailable, /agent, /flylab-agent-manifest.json, /flylab-tool-contracts.json, and the inline context/runtime/handoff packets remain read-only diagnostics. They do not register, emulate, or polyfill WebMCP; invocable_next_tool remains unavailable. The ordinary human interface can still be used, but that is not a successful site-tool run.
The GF panel is short-mode escape probability, response latency, vertical displacement, wing recruitment, and leg recruitment. The MDN panel is backward distance, signed speed, response latency, heading change, and stance stability. Each analysis returns its complete five-metric panel, formal method definitions, separate response-initiation and threshold/censoring summary definitions, and per-run rows linked to run and trajectory IDs.
Every replicate has its own simulation-generated state trajectory and exact event timeline. The Three.js arena renders the currently selected run, seed, state, contact state, appendage expression, and pose directly from that trajectory. The legacy condition-level illustrative_condition_replay remains in the batch only for compatibility; it is excluded from metric calculation and is not the primary arena replay.
The state vocabulary is stance, preparation, reverse_walk, jump, wing_deployment, airborne, and recovery. A stochastic threshold crossing is separate from an expressed response: if the modeled body sequence cannot complete inside the trial window, the run is right-censored and its body remains in stance. No-response and censored latency are JSON null, never trial duration. Analysis separately reports threshold crossings, censoring, and expressed initiation.
GF event order and approximate intervals are literature-constrained across distinct direct-GF and light-off paradigms. Response probabilities, body amplitudes, controller gains, recovery timing, and MDN dynamics remain hand-authored and unfitted; model-scale distances and speeds are not animal effect sizes or biological confidence intervals. The legacy FNV-1a runHash identifies the run/trajectory ID set only. The SHA-256 runContentHash is the content-integrity commitment over the protocol, model manifest, and complete condition runs, and analyses bind that hash.
Portable exports use media type application/vnd.flylab.evidence+json and the deployed v3 evidence-export JSON Schema. The export manifest hash detects payload changes; it is not a signature, authorship proof, or immutability guarantee.
That export checksum is distinct from the immutable in-memory approval snapshot and its protocol/seed-manifest commitments.
FlyLab uses five labels:
| Label | Meaning |
|---|---|
measured |
A biological observation reported under the cited experiment's conditions. |
derived |
A deterministic transformation or summary. |
connectome_inferred |
A structural pathway inference; wiring is not activity or behavior. |
simulation_predicted |
Output conditional on FlyLab's versioned model and seeds. |
agent_hypothesized |
An untested claim or proposal requiring human judgment. |
Discovery remains source-closed under evidence filtering. A hypothesis must cite at least one discovered role=hypothesis_support, kind=perturbation_effect record matching its perturbation and behavior; structural, inventory, and motor-context records are supplemental only. The local model card defines the method. FlyGym remains a pinned embodiment reference and is not executed.
The Three.js circuit viewer uses six reconstruction-derived BANC v888 L2 skeletons for the MDN/LBL40 slice. Its GF→TTMn/TTM and GF→PSI→DLMn/DLM paths are explicitly literature-schematic and have no invented reconstruction or dataset neuron ID. Purple indicates a selected model target, never measured neural activity. The procedural arena fly is also schematic rather than a scan or biomechanical reconstruction.
See Scientific boundaries, the mapped-motor model card, source verification, and BANC slice reproducibility. Third-party attribution and modification notices are in THIRD_PARTY_NOTICES.md.
- Judge testing instructions
- Chrome 149+ native WebMCP protocol test
- WebMCP verification
- Challenge demo plan
- Challenge submission copy
- YouTube metadata draft
lib/agent-context.ts—flylab.agent-context.v3state, approval references, and next-action contractlib/experiment-approval.ts— immutable protocol and seed-manifest approval commitmentslib/discovery-decision.ts— stable ranked-discovery decisions and exclusionslib/flylab.ts— evidence records, seed policy, simulation, formal metric definitions, and comparisonlib/evidence-export.ts— experiment/mission v3 portable envelopelib/webmcp.ts— eight tool contracts, validation, v3 results, diagnostics, and registration lifecycleapp/page.tsx— shared human-agent laboratory state and visible approval boundary
FlyLab is a hypothesis and simulation sandbox. It does not perform a wet-lab experiment, prescribe an animal protocol, establish necessity or sufficiency beyond cited conditions, infer natural neural activity, or generate new biological evidence. Its purpose is to make assumptions, controls, predictions, and source lineage inspectable while a person remains in control.