Track: Open Track / Bring Your Own Project.

MUNIN · Heimdall · Mjolnir · The Blind Eye · Gungnir · Realms · Bifrost

Live: https://munin-six.vercel.app (every deploy re-runs the whole chain from the code and regenerates these pages)

Code: https://github.com/Odin-creator369/munin (public)

In the Norse myth, Odin keeps two ravens. He sends them out every morning and they come back every night with what they have seen. One is Huginn, thought. The other is Munin, memory. This is Munin: the memory a construction trade local never kept.

The problem

A construction union local does not write its bids down. Not the bids, not the losses, not who beat them or by how much. There is no book. Ask a business manager what his market share was last quarter and he cannot tell you, because nobody is keeping score. Hard to tell whether you are winning or losing when no one is keeping score.

Man hours are the currency a union runs on. The tool a local has for winning a close job is the job recovery fund, and today the decision to use it is made by feel, not by the numbers. Construction trade locals can keep the score. Today, they do not.

What it does

One process, run once, on one local, written so that how it is done here is how it is done anywhere.

  • Heimdall, the gate. A business agent does not fill in a form; he says a sentence from the truck. Heimdall reads it and does one of three things: writes the row, holds it and names the one thing missing, or refuses it and says why. Wins and losses both go in the book. Every decision is logged.
  • Mjolnir, the verdict in hours. What it would have taken to win each lost job, priced against the fund contribution rate that was actually in effect on the day of the bid, not today's rate.
  • The Blind Eye, page one. Odin traded an eye for sight of the whole field. This page is what was sitting in the dark: the jobs the local lost by less than a waiver would have covered, where no waiver was offered. Free options, unused. Stated in hours of work the members did not get.
  • Gungnir, three scorecards. Standings for every signatory contractor across every territory. Whether the recovery fund was put to work and whether it paid. And the next winnable job on the street, ranked by hours of work returned per hour of contributions put at risk, with a plan for where the hours go first.
  • Realms. Reports, not logins. Four seats in a local, each with its own view. A business agent sees his territory and nothing else. A contractor sees his own row. The business manager alone has the wide lens.

Where it refuses

Munin says unresolved rather than guess, and prints the reason. A bid dated before any contribution rate was in effect: no verdict, because rates are renegotiated every year and the split is not set until after the union meeting. A contractor with too thin a book: not ranked low, not ranked. A territory with too little history: no projection. Three designed failures, caught live, every run.

What the agent does, and what it is not allowed to do

The model does one job: reading the sentence. Everything after that is rules, and every number is ordinary arithmetic. Same sentence in, same verdict out. A language model is not allowed near the money.

In a trial of 99 field reports phrased seven different ways, the gate decided all 99 correctly, including three deliberate double entries it refused. The trial holds at 99 of 99 on nine different random seeds, three of which the build had never been run on. Real speech is messier than a trial, which is why the model reads and the rules are the floor.

How it was built

Python 3 standard library, SQLite, and Claude (claude-opus-5 through the Anthropic Messages API), used for one thing only: reading a spoken field report into fields. With no key present it falls back to a rules-only reader, and every decision after the reading is rules and arithmetic, never a model. The report pages are generated HTML with no external loads; screenshots by Playwright. Deployed today: GitHub (public repository at github.com/Odin-creator369/munin; a zip copy is also attached for the judges), Vercel (every deploy re-runs the whole chain from the code and regenerates the pages), and Supabase Postgres holding the same record in an isolated schema. It still runs off a folder with one command on a laptop. Built by a team of one who is not a programmer: I talk, the agent writes, and I decide what gets built and why. I have sat on the business owner's side of the bid table for twenty six years. The agent has not.

Built during the hackathon: everything running. The gate, the arithmetic, the seed, the report pages, the trial run, the database load, the repository and the deploy were all written and done today.

Pre-existing work: a simulation harness and two design documents, written before the event. No code from them runs in the system.

What it is for

MUNIN is an add-on to ODIN, the Official Data Intelligence Network, a data platform for construction trade locals. All data here is simulated. The local is Electricians Local XXX. No real local, no real contractor, no real job.

Built With

Share this project:

Updates

Submission history