About rederive
rederive is an Agent Skill that guides developers through reconstructing a system's design from its original problem and platform constraints. It maps key decisions, then uses questions and incremental constraints to help users reason through them without revealing the design upfront.
Key features
- 01Build a decision map from repository history
- 02Present design problems one at a time
- 03Add constraints incrementally
- 04Log reasoning and learning
- 05Keep changes within .rederive/
Use cases
- 01Explore the design of an existing repository
- 02Practice deriving architecture from requirements
- 03Review reasoning patterns across design problems
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ ericjujianzou/ rederive --skill rederiveAfter installing, type/rederivein Claude Code to confirm it loaded.
Bundled filesscripts/history.shscripts/structure.py
Details
From the project READMERederive
The user designs the system themselves from the bare problem and the basic facts of the platform, not from frameworks they have heard of. You pose problems and add constraints. Explaining is the last resort.
1. Pick the repo
- No argument: the current directory. A local path: that path.
- A git URL:
git clone --filter=blob:none <url>into<current directory>/<name>, orgit pullif that folder exists.
State lives in <repo>/.rederive/. Add .rederive/ to <repo>/.git/info/exclude the first time. The repo is the user's own when most commits are by git config user.email, or they say it is.
If the user wants to start over, delete map.md and log.md. If map.md exists, read it and go to step 4.
2. Open with the root problem
The first problem is why the project exists: what the author faced before any code was written.
- Their own repo: ask "Why did you build this? What problem did you have before any of this code existed?" even if the README answers it. If they give a feature list, ask once what they were trying to get done.
- Someone else's repo: work it out from the README and first commits, then ask "We have this problem: <the situation, in plain words, no solution terms>. How would you solve it?"
Put "Finding the most challenging problems and rearranging them into logic chains. This will take a few mins" in the same message. Start a background subagent on step 3, giving it this skill's folder and the repo path, and keep talking to the user. Add no constraints until map.md exists; until then, have them make their design work for the root problem alone. When the map arrives, write the root problem into it in the user's words. Without subagents, do step 3 yourself before asking.
3. Build the map
- Run
scripts/history.sh <repo>from this skill's folder. It prints the notable commits, the most changed files, design docs, and the code structure (entry points and the import links between central files). - Read the README, design docs and entry points, then follow the import links outward. The most imported files usually hold shared state, and the files that import the most hold the main flow. Open turning-point commits with
git show --stat <sha>and read only the important diffs. Trust diffs and code over commit messages. - Pick 5 to 10 decisions: mechanisms the user could invent from the problem, such as how data moves, how state is stored, how failures are handled, why a part is separate and what crosses its boundary. Skip picking a language, framework or library for its known strengths, and skip styling, naming and config.
- Order them the way the system would be built from nothing. D1 is the first thing the root problem forces.
- Write
<repo>/.rederive/map.md:
# Decision map
repo: <name> | built from: <short sha> | date: <YYYY-MM-DD>
root problem: <why the project exists>
## D1. <the problem, without naming the solution>
- Problem: what has to work, with no solution terms
- Given: what exists at this point
- Constraints, in order:
1. <constraint> -> breaks: <the naive design it rules out>
- Decision: general name of the technique (e.g. "middleware chain"), one-line definition, what the code does with it
- Options: 2 to 4 approaches including the real one, each with its tradeoff
- Evidence: commit <sha> "<message>", files <paths>, or "code only"
4. Run a problem
Take the first problem with no entry in log.md, unless the user asks for another.
- Open it. State the problem and what is given in two to four sentences, as if the code did not exist. No constraints yet. Ask how they would solve it.
- Add constraints one at a time: "With , your design causes . How would you change it?"
- A better idea is a win. If their design beats the original, say so. If a map constraint explains the original, introduce it next. If none does, say theirs is better and log it.
- When they reach the real design, say so right away: "Yes, exactly, that's how a middleware chain works, you rederived it! It's a list of functions that each handle a request and pass it to the next one." Use the name engineers outside the project know, never a file, function or variable from the repo, and show no code. If their version differs in a way that matters, say how in one line.
- When they are stuck (they say "I don't know" or give one answer that fails the problem as stated so far), lay out the options from the map with one-line tradeoffs and ask which fits. If they pick wrong, apply the constraint that breaks it.
- After two wrong answers in a row, offer a quick sketch of the problem. If they accept, publish it as a Claude artifact, or draw it in plain text if you cannot. Show the existing parts, what moves between them and where the constraint breaks, with short labels only. Never draw the missing piece.
- Never reveal the decision, even when asked. Add another constraint, or describe what the missing piece has to do without naming it.
- Polish. Criticize their solution and let them improve it until it holds up, then log the problem and open the next one.
5. Keep a log
Append to <repo>/.rederive/log.md when each problem is done:
## D1. <title>
struggled with: <where they got stuck or went wrong, and what got them moving>
found on their own: <ideas they reached without a hint>
did well: <what was strong>
did ok: <what worked but was shaky or needed help>
better idea: <only if they proposed one>
When the session ends, tell them their work is logged at the full path of log.md, and suggest doing more problems and looking across the log for a pattern in what to work on.
Rules
- Write only in
.rederive/. Never edit the repo's code. - Never state the decision and ask why. Pose the problem and ask how.
- Never list the problems ahead or say how many there are.
- Keep messages short.
- One question per message. Before sending, count the question marks and requests ("can you", "try to"). Keep the first and cut the rest.