Singularity learns from your finished sessions (change committed, tests passing): where each kind of change goes in this repo, how it gets checked, and the mistakes made along the way. When the next task starts, a hook hands the agent the workflows that fit, pointed at the code as it is today. Picking them is plain text matching with no model call. It stores where to edit, never the code itself.
Results, medians of 3–4 runs per side, hidden tests decide pass/fail, every run passed. On excalidraw:
- A long task with four changes, all of kinds memory had learned: 1.9M → 423k tokens, $0.81 → $0.30, 28.5 → 9.5 turns.
- The same kind of task, but two of the four changes were bugs it had never seen: 39% fewer tokens, 38% lower cost. The unseen bugs cost the same with or without memory.
- Where it doesn't help: small tasks in validator.js and one-off bug fixes. The difference there is about zero, within noise.
Each measurement was written down before it was run. The plans and results are in the repo.
Caveats: 3–4 runs per side, mostly one repo. Only Claude Code sessions are learned from; Codex, Gemini CLI and Droid get the hand-over through their hooks. Learning uses your Claude account (about $0.25 a round, capped at $1 a day, and only if you opt in). Everything is stored locally in ~/.singularity.
Install (Windows PowerShell and more options in the README):
curl -fsSL https://raw.githubusercontent.com/pandacover/singularity/main/install.sh | sh
I'd love to hear where it breaks on your repos, and what memory should carry for one-off work like bug fixes.