FEA
Enables APK target analysis and Android app harness support: detects Android tools (adb/emulator), supports manual app launching with an HTTP base URL for parity checks, and includes probeAndroidTools for Android SDK readiness.
Provides a Docker sandbox backend for running captures and verification (FEA_SANDBOX=docker) with a configurable image (FEA_DOCKER_IMAGE), and reports Docker availability via fea doctor.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FEAcapture this HTTP API, synthesize a clean-room rebuild, and verify parity"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FEA — Forward Engineer Anything
REA taught agents to read. FEA teaches them to rebuild — with proof.
FEA is an open-source MCP server + CLI that turns any software artifact into a verified working reimplementation:
ingest → capture → spec → synthesize → verify → exportIngest a target you are authorized to analyze (CLI binary, HTTP API in v0.1).
Capture black-box behavior into I/O vectors.
Extract a machine-checkable
BehaviorSpec(Zod-validated, evidence-linked).Synthesize behind a clean-room firewall — the synthesis agent sees behavior only, never decompiled code, addresses, or symbols.
Verify with a differential parity harness: original vs rebuild, same vectors, measured score.
Export a reproducible evidence pack (spec + parity report + hash-chained provenance log).
Positioning: FEA does not replace REA — it consumes REA (or any analysis tool) as its reader. REA reads. FEA rebuilds.
Install (once published): npm i -g fea-agents — the fea binary. From
source: pnpm install && pnpm build.
What v1.1 is
No more wrapper scripts. v1.1 makes the self-rebuilding loop one command:
Agent presets (new
@fea/agentspackage) —fea evolve --agent-preset codex(orclaude-code) instead of--agent-cmd+ a hand-written wrapper. The preset ships a prompt renderer (synthesis context + failing vectors → a clean-room prompt: behavior only, output code only) and a wrapper that invokes the model CLI (codex exec/claude -p), writes the code to<store>/evolve/, and prints{"rebuildPath"}.--agent-out-extpicks the file extension. Custom agents still work via--agent-cmd. Model CLIs must be installed and authenticated on the machine running evolve — FEA can't log you in.fea promote— bless a rebuild's new behavior as expected. After an intentional behavior change (new feature), the old vectors are stale: promote replays the vector set's inputs against the rebuild and stores a NEW vector set with its outputs. The new set is the rebuild's contract — verify passes against it. MCP tool:fea_promote(19 total), policy-gated asask(it executes the rebuild).
Related MCP server: REA
What v1.0 is
The Twin Era. v1.0 turns FEA from a tool into a movement:
Twin registry (new
@fea/twinspackage) —fea twin publishmints a registry entry for a verified pack;fea twin searchfinds twins;fea twin getfetches a twin and re-verifies on arrival (pack-verifymanifest sha256 — trust, but verify). Publish is gated: the pack must pass pack-verify AND contain only manifest-listed files (nothing smuggled in — never the original binary). Policy-gated as
askby default. MCP tools:fea_twin_publish,fea_twin_search,fea_twin_get(18 total).
Killer demo —
examples/twin-demo/: a word-count utility twinned clean-room, parity 100, published aswc-twin@1.0.0, fetched back and re-verified. The whole Twin Era story in one directory.
The v1.0 index backend is a local JSON file (<store>/twins/index.json,
overridable). It speaks the same TwinEntry shape as the planned
GitHub-backed fea-twins index — swapping the backend later changes no entries.
What v0.9 was
The Self-Rebuilding Era begins. v0.9 closes the biggest open loop in FEA — until now the synthesis step belonged to the human:
fea evolve— drives an external agent program until parity converges. The agent gets ONLY the firewalled synthesis context (behavior) plus the previous attempt's failing vectors — never the original binary's path (FEA fails closed if it ever leaks). The agent prints{"rebuildPath": "..."}on stdout; FEA scores each attempt with the parity oracle and stops at the target score or max attempts. FEA becomes the reward function; the agent does the writing.Agent protocol is just stdin/stdout JSON — wire anything: an LLM CLI wrapper, a synthesis script, a build hook.
examples/evolve-agent/shows the protocol with a scripted mock.
What v0.8 was
What changed. v0.8 answers the question every rebuild iteration asks:
fea diff --a <set> --b <set>(MCP:fea_diff_vectorsets, 15th tool) — which vectors were added, removed, or changed between two captures. Vectors are matched by input identity (what was asked), so independently captured sets still line up; changed vectors list the exact field paths that differ (output.stdout,weight, …).
What v0.7 was
Continuous proof. v0.7 closes the iteration loop:
fea watch— re-runs parity every time the rebuild changes (binary: mtime+size; API: content hash of the base URL). Prints each run's score and the delta vs the pinned baseline. Ctrl-C stops. Policyaskneeds--yes(approvals don't work in a watch loop).fea pin— pins a parity report as the baseline for a (target, vector set) pair. Laterfea verifyruns reportΔ vs baselineso regressions are visible at a glance.fea verify --junit <path>— JUnit XML for CI dashboards: one testcase per vector, failures carrying the expected/actual diff.
What v0.6 was
Proof of proof. v0.6 makes FEA's own guarantees verifiable:
fea pack-verify <path>(MCP:fea_verify_pack, 14th tool) — checks an evidence pack end to end: manifest parses, every file present with matching sha256, spec re-validates against BehaviorSpec v1, report id matches, and the hash-chained provenance log verifies. A tampered pack fails with the exact broken check named.Chain pinpointing —
verifyProvenanceChainreports the first broken entry (brokenAt+ reason) instead of a bare boolean.Doctor+ —
fea doctornow also validates the policy file and reports Android tool presence (adb/emulator) for the APK story.APK harness, honestly thin —
AppHarnessinterface +ManualHarness(you launch the app, FEA takes its HTTP base URL) +probeAndroidTools. The emulator-backed harness waits for a machine with the Android SDK; until then the documented path is launch-it-yourself +--rebuild-url.
Dropped honestly: the proxy SSE transport from the old roadmap — it was
a transport swap with no user-visible benefit over the working /call
protocol, so it stays out rather than shipping theater.
APIs & onboarding. v0.5 adds:
HTTP parity — the oracle now replays HTTP vectors against two base URLs:
fea verify --target <id> --rebuild-url http://127.0.0.1:3001 --vectorset <id>. Same path+query on both sides; compares status, headers, and body after normalization. Mixed CLI+HTTP vector sets work (each kind needs its rebuild).fea init— scaffolds a project directory:fea.policy.json(recommended),capture-plans.json(examples),FEA.md(workflow cheat-sheet),.fea/store.fea init my-api --kind http-api --target http://127.0.0.1:3000ingests immediately.New normalizer packs —
ansi(strip terminal color codes) andjson(structural: parse, sort keys, re-stringify — auditable in the report).
Note: the proxy SSE transport from the v0.4 roadmap stays open — HTTP parity was the bigger real gap, so it went first.
What v0.5 was
What v0.4 was
Scale & ship. v0.4 adds:
Persistent reader sessions —
fea reader serveholds ONE REA session and shares it over loopback HTTP (127.0.0.1 + bearer token), so document-stateful workflows (open_binary→list_strings) work across separatefea readcalls. Use--proxy-url/--proxy-tokenonfea read(orreaderProxyUrlon the MCP tool).Normalizer packs — named, auditable noise filters:
http(RFC1123 dates, ETags),log(timestamps, pids),path(temp/home dirs, ports),ids(UUIDs, hex tokens).fea verify --packs http,log— additive on the defaults, all listed in the parity report.apktarget kind — APK files fingerprint like native binaries; the actual analysis goes through the REA reader (JADX/apktool on the reader's machine).npm-publish-ready — every package has publish metadata, the CLI publishes as
fea-agents(name verified free;feaitself is taken),npm pack --dry-runverified. Steps indocs/PUBLISH.md— the publish itself needs yournpm login, so it's yours to run.
Quick start
pnpm install
pnpm verify # typecheck + lint + tests + build (must be green)
# toy demo: rebuild adder.js with 100 parity
node apps/cli/dist/index.js ingest ./examples/toy-cli/adder.js --kind cli --i-have-rights
node apps/cli/dist/index.js capture --target <tgt> --plans '[{"name":"add","argv":["2","3"]},{"name":"bad","argv":["x"]}]'
node apps/cli/dist/index.js spec --vectorset <vs>
node apps/cli/dist/index.js plan --spec <spec> # human approves here
node apps/cli/dist/index.js synth-context --spec <spec> --token <token>
node apps/cli/dist/index.js verify --target <tgt> --rebuild <rebuild> --vectorset <vs>
node apps/cli/dist/index.js pack --spec <spec> --report <rep>Or install the fea command globally from apps/cli, or register the MCP server with your agent:
node apps/cli/dist/index.js mcp # stdio MCP server — 9 toolsSee examples/toy-cli/README.md for the full demo script.
What v0.3 is
Trust & proof. v0.3 adds three things on top of v0.2:
Policy engine (
@fea/policy) — allow/ask/deny per tool. Anything that executes something (fea_capture_behavior,fea_verify_parity,fea_read) can be gated:allowruns,askstages an approval the human completes (fea_approve/fea approve --token),denyrefuses. Configure viaFEA_POLICYenv,--policy <file>,<store>/fea.policy.json, or./fea.policy.json. A recommended profile ships in code (RECOMMENDED_POLICY).Vector fuzzing —
fea fuzz --spec <id> --count 50 --seed s1generates deterministic boundary vectors (empty args, NaN, Infinity, unicode, huge numbers…) stored as a new vector set, so parity is tested beyond the recorded examples.HTML parity reports —
fea report --report <id>renders a self-contained page (score, failing-vector diffs, normalizers) with no external assets.
MCP surface is now 13 tools.
What v0.2 was
✅ Everything in v0.1, plus:
✅ Native binaries as a target kind (
--kind native)✅ REA reader adapter (
fea read/fea_read): calls any REA MCP tool, stores findings as evidence — REA stays the reader, FEA stays the rebuilder✅ CI mode:
fea verify --fail-under 95exits 1 below threshold✅ Docker sandbox backend:
FEA_SANDBOX=docker(image viaFEA_DOCKER_IMAGE);fea doctorreports backend + docker + REA status❌ Still no decompilers of its own · ❌ No license/DRM circumvention · ❌ Parity is behavioral, not a formal proof
What's next (v1.2)
The GitHub-backed fea-twins registry index (needs your go-ahead to create
the repo), the actual npm publish run (docs/PUBLISH.md — needs your
npm login), and the emulator-backed APK harness (honestly needs an
Android SDK machine).
Docs
docs/ARCHITECTURE.md— how the loop fits togetherdocs/SECURITY.md— authorization, sandboxing, secret scrubbingdocs/DISCLAIMER.md— read this before pointing FEA at anything../your_files/fea-blueprint.md— full PRD + MVP + tech-stack blueprint (v1.0)
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Policy-aware AI execution, verification, cost, and trajectory evidence for agents.
Scoped agent execution. Server-side credentials, policy, budgets and verifiable receipts.
Hunt zero-days by talking to binaries. 40+ tools. Hosted, OAuth + SSO, invite: hi@byteray.ai
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables agents to inspect and reverse engineer native binaries, JavaScript/Electron applications, .NET assemblies, websites, and runtime behavior, returning evidence-backed findings that can be explained, implemented, or tested.231,579 npm1MIT
- FlicenseNot gradedqualityBmaintenanceConnects AI agents and CLI users to local analysis tooling that inspects native binaries, JavaScript/Electron apps, .NET assemblies, websites, and saved network captures, returning evidence-backed findings with their limitations. This lets users understand how an existing app feature works and rebuild a similar version in their own project.2-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables agents to reverse-engineer software across native binaries, managed code, Electron apps, websites, and live runtime behavior, returning findings linked to the evidence and limitations behind each conclusion. It also maintains a durable workspace where those behaviors can be inspected, questioned, compared against real execution, and exported as runnable handoffs.231,579 npmMIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables agents to take software apart over MCP — native binaries, Go/Rust/.NET assemblies, WASM and EVM bytecode, Android and Flutter apps, firmware, databases, crashes and network captures — returning findings backed by code, references and explicit unknowns. Drives deep-analysis engines such as Hopper, Ghidra, IDA, JADX and Frida entirely locally, letting agents explain behavior or rebuild a feature in your own project.231,579 npmMIT