{"id":"d2b8f3de-32ad-4b09-a64c-254174110d4c","slug":"reafuse","kind":"skill","name":"ReaFuse","summary":"Built on REA (Reverse Engineer Anything): dissect two projects, fuse their capabilities, and grow a brand-new verified creature.","owner":"sickpyramid","repoUrl":"https://github.com/sickpyramid/ReaFuse","license":"MIT","licenseTier":"permissive","trust":"community","stars":6,"match":null,"fewStars":false,"format":"skill","createdAt":"2026-10-13T12:40:02.000Z","addedAt":"2026-10-21T18:15:10.476Z","logoUrl":"https://avatars.githubusercontent.com/u/222699863?u=d05c1d4c746f0a3b6303fad46da3a1f5ce5f46d2&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools"],"tags":["ai-agents","clean-room","cli","code-generation","llm","nodejs","rea","reverse-engineer-anything"],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-25T19:52:15.771Z","sample":false,"url":"https://conduits.dev/tools/reafuse","language":"JavaScript","transports":["stdio"],"install":{"npm":"reafuse"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<div align=\"center\">\n\n# 🧟 ReaFuse\n\n### Built on [REA — Reverse Engineer Anything](https://github.com/morluto/rea)\n\n**Two apps in. One new thing out.**\n\nName two apps or repos, for example `Spotify` and `WhatsApp`. ReaFuse studies both with REA, invents three new projects that combine them, writes the one you pick from scratch, and tests it until it works.\n\n[![Built on REA](https://img.shields.io/badge/built%20on-REA%20%E2%80%94%20Reverse%20Engineer%20Anything-5c4ee5?style=flat-square)](https://github.com/morluto/rea)\n[![rea-agents](https://img.shields.io/badge/rea--agents-6.4.0-cb3837?style=flat-square&logo=npm)](https://www.npmjs.com/package/rea-agents)\n[![MCP server](https://img.shields.io/badge/MCP-server-5c4ee5?style=flat-square)](#use-it-inside-your-ai-agent)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D22.19-339933?style=flat-square&logo=nodedotjs&logoColor=white)](#quick-start-5-minutes)\n[![MIT license](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](LICENSE)\n\n**[▶ Try it live](https://reafuse.140-82-32-12.sslip.io)** · [Quick start](#quick-start-5-minutes) · [Use it in your agent](#use-it-inside-your-ai-agent) · [How it works](#how-it-works) · [Troubleshooting](#troubleshooting) · [FAQ](#faq)\n\n<sub>Independent community project built on REA. Not made by, affiliated with or endorsed by the REA maintainers.</sub>\n\n</div>\n\n---\n\n## What does it do?\n\n```text\n  Spotify ─┐\n           ├─▶  study both with REA  ─▶  3 new ideas  ─▶  you pick one  ─▶  write it  ─▶  test it  ─▶  ✅ ALIVE\n WhatsApp ─┘\n```\n\nFor **Spotify × WhatsApp**, ReaFuse proposed:\n\n1. **listen-party**: synchronized group listening with a shared queue and chat\n2. **lyric-lab**: collaborative lyric annotation with AI suggestions\n3. **wave-share**: generate and share animated audio-visualization clips\n\nYou choose one, and ReaFuse writes it as a brand-new project with its own tests, README and command-line tool. It never copies the original apps' code: a built-in scanner checks for that.\n\n## Three ways to use it\n\n| | For | What you need |\n|---|---|---|\n| **[Online](https://reafuse.140-82-32-12.sslip.io)** | Trying it out | A browser |\n| **[On your computer](#quick-start-5-minutes)** | Running it yourself | Node.js and git, 5 minutes |\n| **[Inside your AI agent](#use-it-inside-your-ai-agent)** | Claude Code, Codex, Cursor users | One command; your agent does the thinking, no API key |\n\n## Quick start (5 minutes)\n\n**1. Install the two prerequisites** (skip what you already have):\n\n- [Node.js 22 or newer](https://nodejs.org) (choose the LTS download)\n- [git](https://git-scm.com/downloads)\n\n**2. Download ReaFuse and set it up:**\n\n```bash\ngit clone https://github.com/sickpyramid/ReaFuse\ncd ReaFuse\nnpm install\nnpm link\n```\n\n`npm link` creates the `reafuse` command. If it fails with a permission error, skip it and type `npm start --` instead of `reafuse` in the commands below (for example `npm start -- doctor`).\n\n**3. Check everything is ready:**\n\n```bash\nreafuse doctor\n```\n\nYou should see four ✓ marks. If not, the line with ✗ tells you what to do.\n\n**4. Fuse something:**\n\n```bash\nreafuse fuse Spotify WhatsApp\n```\n\nor with real repositories:\n\n```bash\nreafuse fuse vercel/ms sindresorhus/pretty-bytes\n```\n\nReaFuse shows three ideas and asks which one to build. When it finishes, the new project is in `.reafuse/runs/<run>/creature/` and the report is next to it in `REPORT.md`.\n\n**No account needed.** Out of the box ReaFuse thinks with [Kilo Gateway](https://kilo.ai)'s free models. If you have a Claude subscription, install [Claude Code](https://claude.com/claude-code) and log in (`claude`, then `/login`): ReaFuse then uses it automatically for the code-writing steps, which gives better results. See [choosing a brain](#choosing-a-brain).\n\n**Prefer a web page?** Run `npm run lab` and open http://localhost:4400.\n\n## Use it inside your AI agent\n\nReaFuse includes an [MCP](https://modelcontextprotocol.io) server. Add it to your agent and the agent itself does the thinking, using your existing account. Replace `/path/to/ReaFuse` with the folder you cloned.\n\n**Claude Code**\n\n```bash\nclaude mcp add reafuse -- node /path/to/ReaFuse/bin/reafuse.mjs mcp\n```\n\n**Codex** (in `~/.codex/config.toml`)\n\n```toml\n[mcp_servers.reafuse]\ncommand = \"node\"\nargs = [\"/path/to/ReaFuse/bin/reafuse.mjs\", \"mcp\"]\n```\n\n**Cursor, Windsurf or any other MCP client** (in its `mcp.json`)\n\n```json\n{ \"mcpServers\": { \"reafuse\": { \"command\": \"node\", \"args\": [\"/path/to/ReaFuse/bin/reafuse.mjs\", \"mcp\"] } } }\n```\n\nThen just ask your agent: *\"Fuse Spotify and WhatsApp with ReaFuse.\"*\n\nAgents that support skills can also load [`skills/reafuse/SKILL.md`](skills/reafuse/SKILL.md) (for Claude Code, copy the folder to `~/.claude/skills/reafuse/`).\n\n<details>\n<summary>MCP tools and options</summary>\n\n| Tool | What it does |\n|---|---|\n| `reafuse_fuse` | Starts a run from two donors and returns the next step |\n| `reafuse_answer` | Gives ReaFuse the agent's answer for the step it is waiting on |\n| `reafuse_pick` | Chooses which of the three ideas to build |\n| `reafuse_status` | Shows a run's report, or lists recent runs |\n| `reafuse_dissect` | Profiles one repository with REA, no fusion |\n\nBy default the agent answers every reasoning step (`REAFUSE_MCP_BRAIN=handoff`). Set `REAFUSE_MCP_BRAIN` to `kilo`, `claude-cli`, `hybrid` or `anthropic` to let ReaFuse call a model itself.\n\n</details>\n\n## How it works\n\n```text\ndonor A ─┐\n         ├─▶ find ─▶ dissect ─▶ fuse ─▶ contract ─▶ grow ─▶ verify ─▶ originality ─▶ report\ndonor B ─┘   GitHub   REA +     3 ideas  tests      fresh   sandbox    clean-room     verdict +\n             search   specs     pick 1   first      code    + repair   scan           certificate\n```\n\n1. **Find:** app names and websites are matched to open-source projects that recreate them, with one GitHub search per app, ranked by similarity, popularity and REA compatibility (about 2 seconds). Repository links skip this step.\n2. **Dissect with REA:** [REA](https://github.com/morluto/rea) statically analyzes each project (modules, exports, imports; code is read, never run). The brain turns that evidence plus the README and tests into a **spec card** that describes behavior, never code.\n3. **Fuse:** the brain proposes three new projects that use both donors and add something neither had. You pick one.\n4. **Contract:** acceptance tests are written **before** any code, each traced to donor A, donor B or the fusion. The new project can't change them.\n5. **Grow:** a new codebase is written from the specs, with zero dependencies, its own tests, a README and a CLI.\n6. **Verify:** tests run in a sandbox (Node's permission model: no file writes, no child processes). Failures go back to the brain for up to two repair rounds.\n7. **Originality:** a fingerprint scanner compares the new code against every donor file. Copied code, even reformatted, turns the verdict into **REJECTED**.\n8. **Report:** `REPORT.md` and `report.json` record the donors, licenses, REA evidence, test results, originality score and a SHA-256 certificate.\n\n**Verdicts:** ✅ **ALIVE** (all tests pass) · ⚠ **UNSTABLE** (most pass) · 💀 **DEAD** (most fail) · ⛔ **REJECTED** (copied code, or a strict license check failed)\n\n<details>\n<summary>Glossary</summary>\n\n| Word | Meaning |\n|---|---|\n| **Donor** | One of the two inputs: an app name, website, repository or folder |\n| **Creature** | The new project ReaFuse builds |\n| **Spec card** | A behavior-only description of what a donor does |\n| **Contract** | The tests the creature must pass, written before it exists |\n| **Brain** | The AI model that does the reasoning steps |\n| **Lab / run** | One fusion; everything it produces is saved in `.reafuse/runs/<run>/` |\n\n</details>\n\n## Examples\n\n| Creature | Donor A | Donor B | What's new | Tests | Verdict |\n|---|---|---|---|---|---|\n| [ratewise](showcase/ratewise/REPORT.md) | [vercel/ms](https://github.com/vercel/ms) (durations) | [sindresorhus/pretty-bytes](https://github.com/sindresorhus/pretty-bytes) (byte sizes) | Transfer rates and ETAs: `eta(\"3 GB\", \"25 MB/s\")` → `\"2m\"` | 18/18 | ✅ ALIVE |\n| [objdelta](showcase/objdelta/REPORT.md) | [lukeed/dequal](https://github.com/lukeed/dequal) (deep equality) | [lukeed/klona](https://github.com/lukeed/klona) (deep cloning) | Diff and immutable patch: `patch(a, diff(a, b))` equals `b` | 17/17 | ✅ ALIVE |\n\nEach folder in [`showcase/`](showcase) holds the creature, its report, the REA evidence and every brain answer, so a run can be audited and replayed.\n\n<details>\n<summary>What a run looks like in the terminal</summary>\n\n```text\n🧪 Intake: acquiring donors\n   A: ms ✓ @ 4ff48cec09, MIT\n   B: pretty-bytes ✓ @ a35ed21bb4, MIT\n🧪 Dissecting donor A (ms)\n   REA evidence ev_1bb7dd1cd16550c… (8 modules)\n   Spec card: 3 capabilities — Converts human-readable duration strings to milliseconds…\n🧪 Fusing: proposing creatures\n   1. ratewise — Human-readable transfer rates, ETAs and data budgets\n   2. staleness — Cache size and age policies in one readable string\n   3. quotaclock — Readable usage quotas\n🧪 Writing the acceptance contract\n   18 contract tests (A 2, B 7, fusion 9)\n🧪 Growing ratewise\n🧪 Verifying\n   contract 18/18, own tests 7/7 → ALIVE\n🧪 Originality scan (clean-room check)\n   overlap 0.0%, longest shared run 0 tokens → original\n\n══════════════════════════════════════\n  ALIVE — ratewise\n══════════════════════════════════════\n```\n\n</details>\n\n## Built on REA (Reverse Engineer Anything)\n\n[REA](https://github.com/morluto/rea) answers *\"how does this feature work?\"* for binaries, JavaScript and Electron apps, .NET assemblies and websites, with evidence for every conclusion. ReaFuse takes the next step: **reverse engineer two things with REA, then fuse them into a third thing that never existed.**\n\n| | REA | ReaFuse (built on REA) |\n|---|---|---|\n| Input | One app, binary, bundle or site | Two apps, repos or sites |\n| Question | How does this work? | What new thing can these two become? |\n| Output | Evidence: modules, imports, call paths | A new, tested project and a lab report |\n\nEvery donor goes through REA's static JavaScript analysis (`rea analyze-javascript-application`). REA's evidence feeds the spec cards, and each report records the REA version and evidence id. `rea-agents` is installed automatically by `npm install`.\n\n## Advanced\n\n### Command reference\n\n```bash\nreafuse fuse <A> <B> [--pick n]     # full run (asks which idea to build unless --pick is given)\nreafuse resume <run>                # continue a paused run, or build another idea with --pick\nreafuse dissect <donor>             # REA profile of one donor, no AI needed\nreafuse runs                        # list runs\nreafuse mcp                         # start the MCP server\nreafuse doctor [--json]             # check the setup\n```\n\nDonors can be app names (`Spotify`), websites (`instagram.com`), GitHub URLs, `owner/repo` or local folders.\n\n| Option | Effect |\n|---|---|\n| `--brain <name>` | Which AI does the reasoning (see below) |\n| `--pick <n>` | Build idea *n* without asking |\n| `--no-rea` | Skip REA analysis (faster, less grounded) |\n| `--max-repairs <n>` | Repair rounds after failing tests (default 2) |\n| `--strict-license` | Refuse copyleft and unidentified licenses (default: record and warn) |\n| `--lab <dir>` | Where runs are stored (default `.reafuse`) |\n\n### Choosing a brain\n\nEverything runs on **your** accounts. Set `REAFUSE_BRAIN` in `.env` (copy [`.env.example`](.env.example)) or pass `--brain`.\n\n| Brain | Setup | Best for |\n|---|---|---|\n| `auto` (default) | nothing | Anthropic key if set; otherwise Kilo free, plus your Claude CLI for code if installed |\n| `kilo` | nothing for free models (`KILO_API_KEY` for paid ones) | zero-setup use |\n| `claude-cli` | install [Claude Code](https://claude.com/claude-code), run `claude`, type `/login` | using your Claude subscription |\n| `hybrid` | Claude CLI login | Kilo for routine steps, Claude for writing code; each covers for the other |\n| `anthropic` | `ANTHROPIC_API_KEY` | API users; Claude Opus 5.5 with structured outputs |\n| `handoff` | nothing | an agent or a human answers each step (writes `brain/<stage>.prompt.md`, reads `<stage>.response.json`) |\n\nEvery answer is cached in the run folder, so runs can be resumed and replayed.\n\n### All settings\n\n| Variable | Default | Meaning |\n|---|---|---|\n| `REAFUSE_BRAIN` | `auto` | Brain for CLI and web lab |\n| `REAFUSE_MCP_BRAIN` | `handoff` | Brain for the MCP server (`handoff` = your agent) |\n| `ANTHROPIC_API_KEY` | | Anthropic API key |\n| `KILO_API_KEY` | | Kilo Gateway key (only for paid models) |\n| `REAFUSE_KILO_MODEL` | `kilo-auto/free` | Kilo model |\n| `REAFUSE_CLAUDE_MODEL` | `claude-opus-5-5` | Model passed to the Claude CLI |\n| `REAFUSE_CLAUDE_BIN` | found on `PATH` | Path to the Claude CLI |\n| `GITHUB_TOKEN` | | Faster app-name lookups (30 searches/min instead of 10) |\n| `REAFUSE_LAB` | `.reafuse` | Where runs and caches are stored |\n| `PORT` | `4400` | Web lab port |\n| `REAFUSE_RUNS_PER_HOUR` | `6` | Web lab rate limit per visitor |\n| `REAFUSE_MAX_CONCURRENT` | `1` | Web lab fusions at the same time |\n\n### Web lab and Docker\n\n```bash\nnpm run lab                                          # http://localhost:4400\n```\n\nSelf-hosting with Docker (the image includes the Claude CLI):\n\n```bash\ncp .env.example deploy/.env                          # choose a brain, add keys if any\ndocker compose -f deploy/compose.yml up -d --build   # serves 127.0.0.1:4400\ndocker exec -it reafuse claude                       # only for claude-cli/hybrid: type /login once\n```\n\n[`deploy/examples/Caddyfile.example`](deploy/examples/Caddyfile.example) adds HTTPS with live streaming.\n\n### Development\n\n```bash\nnpm test     # 22 tests, including offline end-to-end runs\n```\n\nThe code lives in `src/` (pipeline, brains, REA wrapper, twin search, originality scan, MCP server), the web lab in `web/`, and the tests in `test/`.\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| `reafuse: command not found` | Run `npm link` in the ReaFuse folder, or use `npm start -- <command>` |\n| `npm link` permission error | Use `npm start -- <command>` instead, or fix npm's global folder ([guide](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally)) |\n| Node version error | Install Node.js 22 or newer from [nodejs.org](https://nodejs.org) |\n| `Claude CLI … not logged in` | Run `claude`, type `/login`, finish in the browser; or use `--brain kilo` |\n| Steps are slow (2-3 min each) | Kilo's free models are slow. Log in to the Claude CLI, or set a `KILO_API_KEY` with a faster model |\n| `GitHub search 403` / rate limit | Wait a minute, or add a `GITHUB_TOKEN` to `.env`. ReaFuse falls back to the AI lookup on its own |\n| `Could not find a usable open-source build` | Use a repository link instead of an app name |\n| A run stopped half-way | `reafuse resume <run>`: finished steps are cached and not redone |\n\nStill stuck? Run `reafuse doctor --json` and [open an issue](https://github.com/sickpyramid/ReaFuse/issues) with its output.\n\n## Responsible use\n\n- ReaFuse is a tool: you are responsible for what you fuse and ship. Every report records each donor's license, so check it before publishing a creature. `--strict-license` enforces a conservative policy.\n- ReaFuse learns **behavior**, never code. The originality scan enforces this, so don't disable it to ship copied code.\n- Donor projects keep their copyrights. Reports credit every donor with its commit and license.\n\n## FAQ\n\n**What is REA (Reverse Engineer Anything)?**\n[REA](https://github.com/morluto/rea) is an open-source CLI and MCP server by morluto for reverse engineering native binaries, JavaScript/Electron apps, .NET assemblies and websites, with evidence for every finding.\n\n**Do I need an API key or a paid account?**\nNo. Without any setup ReaFuse uses Kilo Gateway's free models. A Claude subscription (through Claude Code) or an Anthropic API key gives better and faster results.\n\n**Can I really type \"Spotify\"?**\nYes. ReaFuse finds open-source projects that recreate the app, studies the best match with REA, and builds from that. It never touches the real app or its code. The report names the project it studied.\n\n**Does it copy code from the donors?**\nNo. It learns behavior from REA evidence, READMEs and tests, then writes fresh code. The originality scan rejects creatures that contain copied donor code.\n\n**What languages does it support?**\nDonors are analyzed as JavaScript/TypeScript (what REA's application analyzer reads). Creatures are written in modern JavaScript for Node.js.\n\n**Is ReaFuse an REA plugin or fork?**\nNeither. It's a separate project that depends on the published `rea-agents` package. REA is unmodified.\n\n## Status\n\nv0.1 — app-name, website and repository donors; REA analysis of JavaScript/TypeScript; library + CLI creatures; Kilo, Claude CLI, Anthropic and agent (MCP) brains; web lab. Next: runnable web-app creatures, direct REA website analysis, Python creatures.\n\n## Credits\n\n- **[REA — Reverse Engineer Anything](https://github.com/morluto/rea)** by morluto and contributors (MIT) is the reverse-engineering engine underneath ReaFuse. ReaFuse is independent and not affiliated with or endorsed by REA. Please star REA if this project is useful to you.\n- Showcase donors: [ms](https://github.com/vercel/ms), [pretty-bytes](https://github.com/sindresorhus/pretty-bytes), [dequal](https://github.com/lukeed/dequal), [klona](https://github.com/lukeed/klona), all MIT. No donor code is included in this repository.\n\n## License\n\nMIT, see [LICENSE](LICENSE). Third-party notices in [NOTICE.md](NOTICE.md).\n"}