Mail and threads
Gmail messages, labels, attachments, thread links, important-mail triage, and source-page handoffs.
Personal archive infrastructure for Laravel
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
Norner treats each archive as a source with its own shape, not as generic text mulch.
Gmail messages, labels, attachments, thread links, important-mail triage, and source-page handoffs.
ChatGPT conversations, Codex CLI agent history, Apple Messages, MacBook Contacts, Facebook, Instagram, Twitter, LinkedIn, and their source-specific media references.
FidoNet areas, participants, messages, threads, cleanup notes, and observations kept separate from authored text.
Media collections, Apple Health records, Wayback captures, screenshots, extracted text, and provenance links.
Use cases
Norner turns archive sludge into evidence agents can actually use: biography, arcs, persona and voice memory, search, and review.
Reconstruct projects, roles, places, relationships, correspondence, habits, public writing, and awkward little details that vanish inside export zips.
Find long-running threads across mail, messages, posts, photos, health records, Wayback pages, and old databases without pretending one source tells the whole story.
Feed Huginn with supported observations about preferences, working style, recurring behaviors, language, and tone. No generic trait soup.
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
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.
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.
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.
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
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.
Importers, canonical MySQL tables, runs, artifacts, provenance, search documents, and source handoffs are real code now.
Biography mode reads bounded evidence and produces timelines, episodes, people, places, arcs, source maps, and unresolved gaps.
Runtime memory mode handles source summaries, decisions, concepts, persona and voice pages, annotations, Q&A, and health checks from traceable evidence.
Publishing mode turns Muninn and Huginn outputs into template-driven static sites, timelines, exhibits, and presentation layers.
Muninn
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.
Timelines, dated facts, episodes, people, places, relationships, project arcs, contradiction notes, unresolved gaps, and source maps.
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.
Muninn refuses unsupported story smoothing, personality inference, invented dates, merged identities, and clean narrative glue where the evidence is still messy.
Huginn
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.
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.
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.
Huginn deletes generic trait sludge, unsupported persona claims, personality-test truthiness, flattering contradiction cleanup, and any answer built from vibes instead of evidence.
Mimir
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.
Static pages, generated HTML/CSS/JS assets, timeline views, source exhibits, review dashboards, arc pages, and presentation-ready summaries.
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.
Mimir does not invent facts, leak private archives, hide missing provenance, become importer logic, or make generated presentation output the system of record.
Evidence
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.
Each importer can write bounded artifacts that describe what a source page proves, what it suggests, and what still needs human judgment.
Derived facts live beside raw imported records. They do not overwrite the source or pretend interpretation is capture.
Runs, artifacts, and links make it possible to trace a result back to source material instead of trusting a generated paragraph.
Proof
Norner is open enough to inspect the machinery without exposing the private archive it was built for.
The repo contains the importers, models, migrations, commands, tests, static analysis config, and project site build.
CI runs Pest, PHPStan, Pint, and Rector dry-run against the `norner_testing` database before the code gets to call itself healthy.
Private source dumps stay in ignored local storage. Generated markdown is output. MySQL remains the canonical memory store.
Boundaries
Norner is deliberately boring at the storage boundary because personal memory work gets dangerous when the machinery starts improvising.
Imported source material belongs in MySQL. Compiled markdown is output, not the source of truth.
Muninn, Huginn, and Mimir read named evidence or generated outputs. They do not rummage through private archives because a prompt felt ambitious.
Runtime memory can synthesize, but not without traceable support. Pretty lies are still lies, just wearing nicer shoes.
Pipeline
Capture source labels, paths, importer choices, run metadata, and enough context to replay or explain the import.
Map each source into focused Laravel tables and models instead of flattening everything into vague blobs.
Run `php artisan import:codex ~/.codex` to capture Codex threads, prompts, and session manifests without importing runtime logs or secrets.
Keep attachments, media references, timestamps, participants, labels, URLs, and source-specific identifiers intact.
Write derived observations as their own layer, with the source record still visible underneath.
Produce bounded artifacts for source navigation, important evidence bundles, and biography candidate work.
Run `php artisan import:contacts <AddressBook-v22.abcddb>` so phone numbers and email addresses can resolve to known people in review artifacts.
Run `php artisan huginn:personal-memory-pack --jsonl` to write editable Markdown plus optional local Meilisearch JSONL without mixing it into canonical source search.
Rebuild search documents and feed Muninn or Huginn work with evidence, not an undifferentiated text swamp.
Muninn
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.
Biography candidates can be built from important mail bundles and source handoffs, with support kept close.
Human analysis can be saved as artifacts instead of disappearing into chat history.
Each handoff names the slice it covers. No pretending a few records explain a whole life.
AI handoffs
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.
Source-page handoffs keep the relevant records together and leave unrelated archive noise outside the prompt.
Artifacts can carry misses, gaps, and weak signals instead of sanding every edge into false confidence.
The same evidence can support search, biography, review, and later synthesis without starting from scratch every time.
Search
Search documents are built from source-specific models. That keeps retrieval useful without erasing the structure that made the record meaningful.
Messages, labels, attachments, sender context, and important-mail scoring stay connected.
Posts, reactions, comments, profile snapshots, and media references keep their source-specific roles.
Wayback, FidoNet, and media imports keep enough provenance to explain where a record came from.
Quick start
Storage rule
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?
The Norns tend the threads. That fits a project that turns scattered personal archives into traceable memory without pretending the thread explains itself.
Norner is for the unglamorous part of personal AI work: importing the sources, keeping the boundaries clean, and making later synthesis answerable to evidence.