Gil EskayoAI Engineer · Security · Research

MARVIN

I gave Claude a memory, its own skills and a way to keep working while I sleep.

PythonClaude CodeChromaDBJavaScriptElectronReact
GitHub ↗
The story

Claude is brilliant, and it forgets everything the moment a session ends. Every new session meant explaining myself again, and pasting in everything I know made it slower and worse. So I built MARVIN.

MARVIN remembers who I am and how I like to work, loads only the knowledge a task needs, and brings the right skill to it. While I'm away it picks up tickets, writes the code, proves the change with tests and hands me a pull request to approve. It runs across three machines, two Macs and a Linux box, and I steer it from a dashboard I built for it. It's open source and I use it every day.

33
skills in the public repo
7,550
automated tests (4,614 Python, 2,936 dashboard)
100
pull requests its pipeline wrote that I merged
27
background jobs across the machines
82
design decisions on record
3
machines, one system

Counted from the repository, GitHub and the machines themselves on 2 November 2026.

01

Explore the map

This is MARVIN, drawn from the real system instead of by hand: every skill, job, machine and project it runs. Drag to turn it, hover any dot to see what it does in plain words, and click it to open a larger one right here. The gold lines are the real wiring: which job runs on which Mac, which jobs feed the dashboard, what the ticket pipeline builds, and which skill belongs to which project. There's a full-screen version at g-eskayo.github.io/marvin.

02

How a session gets its context

Released

Most memory systems dump everything into every session. MARVIN picks. Each request runs two searches at once: a vector database (ChromaDB) finds memories that mean the same thing, and a keyword search finds the ones that use the same words. The two rankings are merged, and only the top of the list loads. If the vector store is down, a tag index takes over, so a session never starts empty.

Four kinds of memory carry over between sessions: who I am, corrections I've given, what each project is for, and where things live outside the code.

A request runs a vector search and a keyword search side by side; the rankings are merged and only the top loads. A tag index is the fallback.
Choosing context instead of dumping it.
03

Skills, loaded on demand

Released

A skill is a playbook Claude loads only when it’s needed: diagnosing a bug, test-driven development, researching a claim with sources, reviewing architecture, handing work off between sessions, writing in my voice. The list is generated from the skills themselves, so it can’t drift.

They’re all on the map at the top of this page, in the Skills branch. Hover one to see what it does, and the gold lines show which skills call each other.

04

It works while I'm away

Released

I write a ticket and label it ready. The pipeline claims it, works in an isolated copy of the code, and splits the job: a stronger model plans, a cheaper one writes the edits. Then it runs the project's own tests and keeps the change only if nothing got worse and something got better.

A passing change becomes a pull request with its evidence attached. Nothing merges until I approve it, and the merge gate rebases onto the latest code and re-runs every test the change could affect first.

From a ready ticket through planning, editing and testing to a pull request, approval and a gated merge.
From ticket to main.
Bar chart of pull requests MARVIN's pipeline wrote and I merged, per week from 24 August to 2 November 2026: 100 in total, 81 in MARVIN and 19 in Seal Speak, 83 of them in the week of 5 October.
Real work, merged: 100 pull requests the pipeline wrote, 81 in MARVIN itself and 19 in Seal Speak. The week of 5 October it shipped 83.
05

When it fails, it says why

Released

Every failed run is logged with its cause, and the dashboard shows them by family. When the same failure hits three tickets within two hours, the pipeline pauses itself instead of burning time repeating it.

My favourite bug: for about a month the pipeline looked healthy while its measurements were blind. Five separate defects, from a file-descriptor limit to a # in a folder name, meant it couldn't see test results at all. I found and fixed all five in October 2026, each one pinned by a test so it can't come back.

Bar chart of why 284 pipeline runs failed from 8 October to 2 November 2026: 65 crashed, 59 code review found must-fix issues, 41 no measurable improvement, 33 merge gate blocked, 28 checks timed out, 26 something got worse, 17 model unavailable or timed out, 11 tests could not run, 4 unusable plans.
Failures are data: 284 failed runs since 8 October, each with a cause. The second-biggest reason is the pipeline's own code review refusing to pass a change.
06

The dashboard

Released

I built a desktop app to steer all of this. Six tabs, one job each.

The Metrics tab of the MARVIN dashboard.
Metrics: every tool and skill call across my machines, with failure rates and 30 days of history.
The MR Review tab of the MARVIN dashboard.
MR Review: pull requests the pipeline wrote, each with its before-and-after test numbers, to approve or send back.
The Health tab of the MARVIN dashboard.
Health: every machine, every background job and its last result.
The Docs tab of the MARVIN dashboard.
Docs: every project's design docs and decision records, read live from disk.
The Activity tab of the MARVIN dashboard.
Activity: each project's board and what each machine is working on right now.
The Portfolio tab of the MARVIN dashboard.
Portfolio: the templates, checks and images behind this website.

Real screenshots, taken in October 2026. Private project names and credential details are blurred.

07

Three machines, one system

Released

The heavy automation runs on a Mac mini; I work on a MacBook. In October I added a third node: a 2012 Mac mini running Linux that takes test runs, benchmarks and security scans, with its own scheduled jobs. Code syncs over Tailscale, and health checks watch every machine, including telling a laptop that's simply asleep (a quiet moon) apart from one that's broken.

The MacBook is where I work, the Mac mini runs the ticket pipeline and background jobs, and a Linux box takes test runs, benchmarks and scans. Code syncs over Tailscale and health checks watch all three.
Where things run.
08

Proving it works

Released

MARVIN has a bench: the same tasks run under three configurations (a clean baseline, a lean one and the full stack) and scored on cost and correctness, so a claim that something is better has a number before it has an argument. From twelve runs in July:

OptionCost per taskResult
Local qwen2.5:14b with retrieval$0.00Same meaning; a judge passes it
claude-haiku with MARVINabout $0.02Matches the exact phrases
claude-sonnet with MARVINabout $0.05Full reasoning and exact recall

The bench also changes how MARVIN works. In October I scored two ways of answering questions about a codebase on 30 real questions with known answers: plain text search put the answer in the top five 67% of the time, a knowledge-graph tool 38%, and on questions that need several hops it was 3 of 4 against 0 of 4. So MARVIN's agents now search first and use the graph only for structure questions. The repository's scorecard lists the setbacks as well as the gains.

09

Built with MARVIN

MARVIN isn't a demo. It builds and runs my other projects:

  • Resume Tailor: a MARVIN skill that tailors one master resume to each job posting.
  • Paper Dive: a MARVIN skill for reading research papers and mapping a whole field's citations. It built the bibliography for a research paper.
  • Seal Speak: the live-captioning app I built for my mom, now a paid app on the App Store. MARVIN's pipeline wrote 19 of its 114 merged pull requests.
  • This website: MARVIN's portfolio tools build the pages, generate the project images and check every page for broken layouts, links and media before I publish.
10

Status

In daily use since May 2026, now on three machines: two Apple Silicon Macs and a Linux box. The tests and background jobs run on Linux as well as macOS, and the CI runs on Linux; the dashboard runs on macOS only so far, and WSL2 is untested. Everything is in the open: the roadmap, including what's deliberately not built yet, and a written record for every design decision.

Released shipped and in use Built, in testing built, not released yet Planned decided, not built yet

  • ReleasedMemory, skills, the ticket pipeline, the failure breaker, the dashboard and the bench. Everything above this list.
  • ReleasedThe Linux node. Test runs, benchmarks and security scans, with its own scheduled jobs.
  • Built, in testingTicket builds on the Linux node. The Mini hands Linux-safe tickets to a fresh virtual machine on the 2012 Mac mini, one per ticket.
  • Built, in testingAccounts in Vitals. A live check, an expiry warning and a renewal path for every credential MARVIN uses.
  • PlannedFailure containment, round two. One alert path to my phone that still works when Claude, the Mini or the network is what broke, and guards that say so when they can't read their input.
  • PlannedMARVIN Mobile. An iPhone app that talks to MARVIN over my private network. The design decisions are written; the app isn't built.

← More AI & Machine Learning   All projects →