erpaval
laithalsaadoon · laithalsaadoon/erpaval
This Claude Code plugin enables autonomous software development through a six-phase workflow (Explore, Research, Plan, Act, Validate, Compound) with classifier-driven routing and a self-improving memory system.
ERPAVal — autonomous software development. Six-phase Explore/Research/Plan/Act/Validate/Compound workflow with classifier-driven routing and a compounding lessons store.
Preview
What you can do with it
- Develop a new feature from start to finish with an autonomous agent.
- Automatically refine software components based on learned lessons from previous sessions.
- Establish a consistent SDLC workflow for AI agents working on a project.
Safety check
No risky patterns found in the files we scanned.
Automated scan of the repo files. Always review code you run.
From the README
ERPAVal
Autonomous software development for Claude Code.
ERPAVal stands for Explore · Research · Plan · Act · Validate — the five-phase loop, plus a sixth Compound phase that writes durable lessons to disk so the next session inherits what this one learned.
Six phases, classifier-driven routing, and a compounding memory layer that makes every session smarter than the last.
A structured workflow for teams of Claude Code agents that build software the way a senior engineer would — if that engineer could run ten of themselves in parallel and actually remember what they learned yesterday.
[!NOTE] ERPAVal has only been tested with Claude Code. It relies on Claude Code's
Agenttool,TaskCreate/TaskUpdate/TaskListtask system, plugin hooks (SessionStart,PostToolUse,Stop), and${CLAUDE_PLUGIN_ROOT}path resolution. It will not work with other AI coding tools or generic Claude API integrations.
[!IMPORTANT] Star → Fork → make it your own. ERPAVal is opinionated about coding workflow but agnostic about everything else. The bundle gives you a working flow on day one, but the workflow is designed to absorb your conventions, your team's writing style, your domain's vocabulary. Fork this repo, vendor in your own skills, swap out the ones that don't fit, rewrite the classifier prompts to match how you think. Re-syncing from upstream
personal-pluginsis intentionally manual — users who fork should diverge.
Install
ERPAVal is a Claude Code plugin. There are two ways to install it.
Option A — Claude Code plugin marketplace (recommended)
Ships everything: skills, agents, hooks, and MCP server config.
In a Claude Code session, run:
/plugin marketplace add theagenticguy/erpaval
/plugin install erpaval@erpaval
Adding a marketplace is lazy — nothing loads until you install. The plugin installs to your user
scope (available in every project) by default. To scope it to one project instead, use
/plugin install erpaval@erpaval --scope project.
Then enable the plugin and reload so its skills, agents, and hooks activate:
/plugin # → Installed tab → erpaval → Enable
/reload-plugins
Verify by listing skills:
/help # /erpaval:* should appear in the namespace
To uninstall:
/plugin uninstall erpaval
/plugin marketplace remove theagenticguy/erpaval
[!NOTE] If
/plugin marketplace addreports "not found", update Claude Code to a recent version (v2.1.xor later) and retry.
Option B — skills.sh CLI (skills only, multi-agent)
skills.sh is the open agent-skills directory. Its CLI installs the skills to whichever coding agents you have locally — Claude Code, Cursor, Codex, Windsurf, and ~50 others. It does not install the hooks, agents, or MCP server config that the plugin marketplace ships.
npx skills add theagenticguy/erpaval
Use this path if you want ERPAVal's skills available across multiple agents. Use Option A if you want the full Claude Code experience (compounding lessons, validation hooks, the Compound-phase nudge).
Option C — Local development install
To hack on the plugin without going through either:
git clone https://github.com/theagenticguy/erpaval
claude --plugin-dir ./erpaval
The problem
For single-file changes, the basic loop works: give Claude a task, get working code back, ship it. The loop breaks when a task touches multiple modules, depends on unfamiliar APIs, or requires coordinating work across files that reference each other.
It breaks in a second, quieter way: the next session starts from scratch — even though the previous one just spent two hours learning the codebase's peculiarities.
[!IMPORTANT] The failure mode of unstructured AI coding is not broken code. It is plausible code that does not belong, written by an agent that forgot last week's lessons.
ERPAVal fixes both: it front-loads understanding, crystallizes intent into a per-task context packet, hands each implementing subagent a curated briefing, and closes the loop by writing what was learned to disk so future sessions inherit it.
The flow
The high-level shape is a six-phase pipeline gated by mechanical dependency checks, with one deliberate human review at Gate 1.
flowchart LR
IN([User request]) --> CL[Classifiers]
CL --> ER[Explore +Research]
ER -->|Gate 0| PLAN[Plan]
PLAN -->|Gate 1human review| ACT[Act · waves]
ACT --> VAL[Validate]
VAL -.->|fail| ACT
VAL -->|Gate 2| COMP[Compound]
COMP --> DONE([Done])
| Phase | Purpose | Parallelizable with |
|---|---|---|
| Explore | Build a mental model of the codebase | Research |
| Research | Fetch live API docs, version pins, patterns | Explore |
| Plan | Decompose into a dependency-wired task graph | — |
| Act | Delegate to parallel subagents per task | Per dependency graph |
| Validate | 3-layer static + quality + security check | Partially |
| Compound | Extract durable lessons to .erpaval/solutions/ | — |
Gates are mechanical dependency blockers, not approval queues. addBlockedBy wires every phase to
its predecessors — the orchestrator reads TaskList and advances the moment predecessors flip to
completed. The one exception is Gate 1 (Plan → Act), which is a deliberate human
design-review checkpoint. Catching a wrong abstraction here saves hours of agent rework.
Before the phases: adaptive classifiers
ERPAVal never runs its full machinery on a one-line bug fix. Before Explore starts, a chain of
classifiers — labelled CL-* so they're easy to grep in the session trace