Personal archive infrastructure for Laravel

Turn personal archives into traceable memory.

Norner is an evidence-first memory system. It imports mail, chats, social exports, health records, archived websites, and old message bases into clean Laravel models so later synthesis has receipts instead of vibes.

Sources

Messy history goes in. Named records come out.

Norner treats each archive as a source with its own shape, not as generic text mulch.

Mail and threads

Gmail messages, labels, attachments, thread links, important-mail triage, and source-page handoffs.

Chats and exports

ChatGPT conversations, Codex CLI agent history, Apple Messages, MacBook Contacts, Facebook, Instagram, Twitter, LinkedIn, and their source-specific media references.

Old networks

FidoNet areas, participants, messages, threads, cleanup notes, and observations kept separate from authored text.

Files and captures

Media collections, Apple Health records, Wayback captures, screenshots, extracted text, and provenance links.

Use cases

What this is for.

Norner turns archive sludge into evidence agents can actually use: biography, arcs, persona and voice memory, search, and review.

Biography and timelines

Reconstruct projects, roles, places, relationships, correspondence, habits, public writing, and awkward little details that vanish inside export zips.

Arcs and themes

Find long-running threads across mail, messages, posts, photos, health records, Wayback pages, and old databases without pretending one source tells the whole story.

Persona and voice

Feed Huginn with supported observations about preferences, working style, recurring behaviors, language, and tone. No generic trait soup.

Search and review

Inspect cross-source matches, build focused Gmail evidence bundles, find repeated agent-work friction in Codex prompts, generate a personal memory pack, and hand a model bounded context instead of dumping a whole private life into a prompt.

Audience

Who this is for.

Norner is not for normal consumer clicking. It expects someone technical enough to request their archives, backups, exports, and API access, then run a local Laravel app without turning the whole thing into smoke.

The archive nerd

You know where the exports live, can get Gmail API access working, can read a failing command, and understand why raw private data should stay local.

The assisted archive

It can still be for family, friends, partners, and spouses when a trusted technical person handles the ugly parts: downloads, tokens, backups, imports, and review boundaries.

Not a consumer app

There is no magic upload button that safely understands a whole life. Norner is infrastructure for people who can operate the machinery or have someone close who can.

System layers

The substrate is Laravel. The work modes are skills.

Norner is inspired by the LLM-WIKI runtime pattern: give agents a durable, structured knowledge surface instead of asking chat context to pretend it is memory. Norner is the evidence substrate. Muninn, Huginn, and Mimir are repo-local agent skills on top.

Norner - working

Importers, canonical MySQL tables, runs, artifacts, provenance, search documents, and source handoffs are real code now.

Muninn - partial - agent led

Biography mode reads bounded evidence and produces timelines, episodes, people, places, arcs, source maps, and unresolved gaps.

Huginn - agent skill

Runtime memory mode handles source summaries, decisions, concepts, persona and voice pages, annotations, Q&A, and health checks from traceable evidence.

Mimir - agent skill

Publishing mode turns Muninn and Huginn outputs into template-driven static sites, timelines, exhibits, and presentation layers.

Muninn

Biography without the fan fiction.

Muninn reads bounded Norner evidence and turns it into biography-facing structure. It works from named handoffs, review artifacts, canonical rows, source maps, and evidence bundles. The output is chronology, not mythology.

What it builds

Timelines, dated facts, episodes, people, places, relationships, project arcs, contradiction notes, unresolved gaps, and source maps.

How it reads

It starts with the smallest useful evidence boundary and keeps source ids, run ids, artifact ids, dates, and file paths attached to claim-bearing output.

What it refuses

Muninn refuses unsupported story smoothing, personality inference, invented dates, merged identities, and clean narrative glue where the evidence is still messy.

Huginn

Runtime memory with receipts.

Huginn adapts the LLM-WIKI runtime pattern for Norner. It keeps a durable working memory surface for source summaries, concepts, decisions, self/persona/voice pages, annotations, Q&A outputs, and wiki health checks.

What it builds

Source summaries, reusable concept notes, decision records, supported Q&A pages, annotation cleanup summaries, contradiction lists, persona or voice pages, and the deterministic personal memory pack.

How it calibrates

It processes annotations before synthesis: wrong claims get removed, vague claims get rewritten or deleted, kept claims stay, and missing notes become gaps until evidence supports them.

What it refuses

Huginn deletes generic trait sludge, unsupported persona claims, personality-test truthiness, flattering contradiction cleanup, and any answer built from vibes instead of evidence.

Mimir

Publishing is downstream.

Mimir turns supported outputs into static presentation layers. It renders sites, timelines, exhibits, arc views, review pages, and small presentation surfaces from templates. The rule is blunt: presentation is not source truth.

What it builds

Static pages, generated HTML/CSS/JS assets, timeline views, source exhibits, review dashboards, arc pages, and presentation-ready summaries.

How it publishes

It reads named Muninn and Huginn outputs, checks that claims carry support, keeps copy short, and preserves provenance cues such as dates, refs, source labels, links, or footnotes.

What it refuses

Mimir does not invent facts, leak private archives, hide missing provenance, become importer logic, or make generated presentation output the system of record.

Evidence

The claim is not enough.

Muninn work is evidence-first. Norner keeps observations, source handoffs, artifacts, and provenance attached so future biography work can show where each claim came from.

Source handoffs

Each importer can write bounded artifacts that describe what a source page proves, what it suggests, and what still needs human judgment.

Observations

Derived facts live beside raw imported records. They do not overwrite the source or pretend interpretation is capture.

Provenance

Runs, artifacts, and links make it possible to trace a result back to source material instead of trusting a generated paragraph.

Proof

The receipts are public. The diary is not.

Norner is open enough to inspect the machinery without exposing the private archive it was built for.

Runnable Laravel app

The repo contains the importers, models, migrations, commands, tests, static analysis config, and project site build.

Release gate

CI runs Pest, PHPStan, Pint, and Rector dry-run against the `norner_testing` database before the code gets to call itself healthy.

No archive leakage

Private source dumps stay in ignored local storage. Generated markdown is output. MySQL remains the canonical memory store.

Boundaries

Good fences. Fewer haunted conclusions.

Norner is deliberately boring at the storage boundary because personal memory work gets dangerous when the machinery starts improvising.

MySQL is canonical

Imported source material belongs in MySQL. Compiled markdown is output, not the source of truth.

Agent work is bounded

Muninn, Huginn, and Mimir read named evidence or generated outputs. They do not rummage through private archives because a prompt felt ambitious.

Huginn needs receipts

Runtime memory can synthesize, but not without traceable support. Pretty lies are still lies, just wearing nicer shoes.

Pipeline

From archive dump to usable memory.

  1. Record intake

    Capture source labels, paths, importer choices, run metadata, and enough context to replay or explain the import.

  2. Import records

    Map each source into focused Laravel tables and models instead of flattening everything into vague blobs.

  3. Import agent history

    Run `php artisan import:codex ~/.codex` to capture Codex threads, prompts, and session manifests without importing runtime logs or secrets.

  4. Preserve evidence

    Keep attachments, media references, timestamps, participants, labels, URLs, and source-specific identifiers intact.

  5. Observe carefully

    Write derived observations as their own layer, with the source record still visible underneath.

  6. Build handoffs

    Produce bounded artifacts for source navigation, important evidence bundles, and biography candidate work.

  7. Normalize contacts

    Run `php artisan import:contacts <AddressBook-v22.abcddb>` so phone numbers and email addresses can resolve to known people in review artifacts.

  8. Build review packs

    Run `php artisan huginn:personal-memory-pack --jsonl` to write editable Markdown plus optional local Meilisearch JSONL without mixing it into canonical source search.

  9. Search and synthesize

    Rebuild search documents and feed Muninn or Huginn work with evidence, not an undifferentiated text swamp.

Muninn

Biography work needs a paper trail.

Norner is the storehouse below the agent work modes. It gives Muninn, Huginn, and Mimir enough structured evidence to work cautiously, revise cleanly, and avoid turning memory into fan fiction.

Candidate artifacts

Biography candidates can be built from important mail bundles and source handoffs, with support kept close.

Manual notes

Human analysis can be saved as artifacts instead of disappearing into chat history.

Traceable scope

Each handoff names the slice it covers. No pretending a few records explain a whole life.

AI handoffs

Give the model rails.

Norner does not ask an AI to rummage through raw exports and improvise. It builds scoped, evidence-backed handoffs so a model can help without quietly inventing the load-bearing parts.

Bounded context

Source-page handoffs keep the relevant records together and leave unrelated archive noise outside the prompt.

Explicit uncertainty

Artifacts can carry misses, gaps, and weak signals instead of sanding every edge into false confidence.

Reusable outputs

The same evidence can support search, biography, review, and later synthesis without starting from scratch every time.

Quick start

Run it locally first.

Storage rule

MySQL is canonical. Markdown is compiled output.

Norner keeps imported source material in the database, writes compiled markdown under `wiki/`, and keeps private source dumps under ignored local storage. The public repo gets the machinery, not the diary.

Why Norner?

Threads, fate, memory. Fine, one myth reference.

The Norns tend the threads. That fits a project that turns scattered personal archives into traceable memory without pretending the thread explains itself.

Build from the receipts.

Norner is for the unglamorous part of personal AI work: importing the sources, keeping the boundaries clean, and making later synthesis answerable to evidence.