Every fish measured twice, or handed to the officer
An agent on Muse Spark 1.3 and SAM 3.1 for Sri Lanka's port fish sampling. It plans the job, measures each fish two ways, checks itself, and passes what it can't prove to a fisheries officer.
Checks it ran
limit · resultWhat the agent did
Fish
| Fish | Species | Fork length | Outline (about total length) | Across frames | Status | Rule |
|---|
Length frequency
1 cm classes, accepted fish onlyAudit receipt
what a reviewer needs to check this runAgent against the tape measure
About the build
Built for the Meta Global AI Developer Hackathon, Indie track. All code written from 27 Oct 2026.
What it does
Sri Lanka already measures coastal tuna from photographs, but a person still draws a line on every fish and names every species by hand. CatchLength does that work from a 20-second phone clip of fish laid next to printed marker sheets, and it can't skip checking its own work.
Theme: Build for Your World. "Bring Meta's models into your domain. Solve a problem you know firsthand, free up time and mental space, and make something possible that wasn't before."
How it checks itself
The checks live inside the agent's tools, so the model can't skip them. Calibration refuses a bent or missing sheet. A count that disagrees with the plan sends Muse Spark's boxes back to SAM 3.1 with negative points on the neighbouring fish (tested on scripted runs; on the real models SAM 3.1 separated touching fish on its own, so this never had to fire). Every fish is measured two ways and in several frames; when they disagree it is flagged, never averaged. A tool refused three times hands the job to the officer, who signs off on the report. The tape measurements it is graded on are never shown to it.
Rules it cites
No minimum landing size for the tunas and mackerel sampled here was found in the gazetted regulations we reviewed, so the report says "no rule found" for each of them. It cites the lobster and mud crab rules where they apply, and IOTC's rule that size data must be binned at 5 cm or finer.
Meta models and what each one does
- Muse Spark 1.3
- Runs the agent loop (one tool per turn), plans the clip, finds missed and merged fish, places snout and fork points, names the species from a closed list.
- SAM 3.1
- Segments every fish from the concept "fish", then again from Spark's boxes and negative points when a fish was missed or two were merged.
- Muse Wonder 1.0
- A last look at the filed report, after the agent is done. It can only add fish to the officer's queue, never change a length, a species or a status. On the recorded scenes it raised two doubts (five-fish scene, fish 3 and 4: "line extends past the fork notch", "no visible fork"); both outlines were within 0.4 cm of the true length, so the doubts were cautious, and both went to the queue as designed.
- Muse Spark Open
- Built, not yet run: the same bounded check by the open-weights model on Baseten, as an independent auditor.
Built during the hackathon (27 Oct to 4 Nov 2026)
- The agent loop, its tools and every check: calibration, count, two-way measurement, cross-frame drift, species, the rule pack and the report check
- The marker tiles (A4 print), the synthetic scenes and the geometry test
- This console, the officer sign-off, the size receipt and the audit receipt
- The tape benchmark and its grader, and the stress test on public footage
Existed before
- The idea and the application text
- The museum fish photographs: Smithsonian (USNM) specimens, public domain via Wikimedia Commons, used only for tests and the synthetic scenes, and marked wherever they appear
Links
- Source on GitHub, MIT licence
- NARA's photo-board method, IOTC-2025-WPM16-10rev1 (PDF)
- FWC, "How to Measure a Fish", the public footage used for the stress test (CC BY)