Eklavya turns agent generation time into learning time. While Claude Code implements your task, it teaches you the concepts behind that exact work — Socratic questions grounded in the diff it just wrote, mastery tracked in a local knowledge graph.
Node 22+ · macOS, Linux and Windows · everything stays on your machine. No accounts, no sync, no telemetry.
I set httpOnly on the refresh cookie in auth.ts:42 and left the access token in memory. What does that split buy?
Coding agents create a comprehension gap. You ship code you didn’t write and couldn’t debug.
The moment code is being generated is the highest-leverage teaching moment there is: the concepts are concrete, the code is right in front of you, and your hands are free. So Eklavya asks you about it — once per task, never the same question twice, and harder each time you get it right.
The name
In the Mahabharata, Drona taught archery to princes. Ekalavya, a forest hunter's son, asked to learn — and was turned away.
He built a clay likeness of the guru and trained alone before it, arrow after arrow, until his skill surpassed the court's best archer.
You already learn beside a master that builds in front of you. Eklavya makes it answer: it asks about the work, grades honestly, and remembers what you've mastered.
The loop
Difficulty is earned, not picked. Tier 1 asks what a thing is; tier 5 asks when it is the wrong architecture entirely. You climb as you get things right, which is how "never ask the same question twice" survives contact with a finite concept graph.
Three bands sit over that ladder, held per project. Every codebase starts at easy, because the questions you can answer while watching an agent work are the ones that make the habit stick. A band moves up after 100 passing answers in that project, at 70% accuracy, across at least fifteen concepts. Nothing ever demotes you.
Bands overlap — medium still asks tier 2, hard starts at tier 3. Promotion is not a cliff.
"Add JWT auth to the Express API." Claude Code gets to work, same as always.
Each concept comes with a line pointing at the actual code.
Logging a concept is a natural pause, so that is where the question goes — one question, while the agent keeps working. Set cadence: end and it waits for the task instead.
Four options and a keystroke, so answering costs less than the question is worth. SM-2's 0–5 scale, recorded in the graph. Recognition is capped at grade 4 — picking one of four is weaker evidence than producing the answer.
One question about a concept the checkpoints did not reach — never a row of them at the moment you wanted to be done. A session that answered its budget while the agent worked finishes in silence, which is the entire point.
A one-line learner profile, so Claude calibrates from your first message. Shaky concepts come back later, at a higher tier.
The promise
Three separate things enforce it, because a prompt asking nicely is not enforcement.
The learner profile hands the tutor the list of what you know. Spaced repetition is the only thing that brings one back — harder than last time.
The quiz plan hands past questions back with the tier and grade each got. A question already asked is spent: same concept, different angle.
Getting something half-right no longer puts it straight back in the queue five minutes later. Prerequisites are checked too — foundations come first.
The dials
mode is how hard it pushes, focus is what it teaches, cadence is when it asks, difficulty is how hard the questions may get. They combine freely — enforced + learn is an intern who must pass a gate on a topic they chose.
mode
How hard does it push?
ambient
Questions offered, always skippable, no nagging. For anyone learning a new stack.
enforced
The session quiz must pass before git commit — inside Claude Code, and from a bare terminal once you install the git hook. For interns and onboarding.
off
Installed but dormant. Nothing fires, and focus is never read.
focus
What does it teach?
concept
The ideas behind the code, asked so the answer transfers to any codebase. For learning a stack.
project
The code just written — the file, the line, the decision. For learning a codebase.
learn
A topic you name, in prerequisite order, using your real code as the example wherever the work touches it.
cadence
When does it ask?
interleaved
One question at a time, at the seam where a concept is logged. A quiz is capped at one question under this cadence — the end-of-task sweep included, unless a commit gate is waiting on it or you asked for a quiz yourself.
end
Nothing until the task is finished, then whatever the budget has left. For deep focus, pairing, demos.
max_questions_per_task is a session budget, not a batch size — a question answered mid-work is one the Stop hook no longer asks, and a budget it never reaches is simply not spent.
difficulty
How hard may it get?
auto
Earned per project. Every codebase starts at easy and climbs to medium, then hard, on passing answers.
easy · medium · hard
Pinned there, and nothing promotes. easy on a repo keeps an onboarding codebase gentle for everyone; hard globally skips the runway.
Per project, because "how hard should this be" is a question about a codebase. A new repo starts at easy even when three others are on hard.
Repo settings beat global ones — eklavya config set mode enforced --repo pins enforced mode on one codebase without touching anyone's machine-wide setup. Because that also overrides a contributor's personal focus, the session banner names whatever the repo is overriding rather than letting it change silently.
/eklavya:quiz [topic]Quiz now — on this session's work, or a named topic/eklavya:mode [value]Show or change the mode, focus, cadence and difficulty dials/eklavya:learn <topic>A structured lesson, prerequisite-ordered, calibrated to what you know/eklavya:level [value]This project's difficulty band and the runway into it — or pin one/eklavya:pack [domain]Write a concept pack — a domain Eklavya has never heard of, or this codebase/eklavya:progressThe mastery map: which projects, what they taught, what you skipped, what's due/eklavya:gateCommit-gate status/eklavya:setupFirst run — checks Node, then picks your mode and focus
Or don't learn any of them. npm install -g eklavya && eklavya install also puts a skill in your
Claude Code, so “Eklavya, ease off — too many questions” and “open my
dashboard” move the same dials, in an ordinary sentence.
How that works
~/.eklavya/knowledge.db — SQLite, WAL mode, yours. Delete the directory and Eklavya forgets you entirely.
The commit gate is editor-agnostic: one script installs a plain git pre-commit hook that runs the same check, so a commit from a bare terminal is held exactly like one made inside Claude Code.
The long view
A terminal report has twenty lines and answers what now. The long view needs more room, so it gets a local page: six sections behind a sidebar, and every concept, session and question you have been asked two clicks away.
Bound to loopback, reading the same ~/.eklavya/knowledge.db. Nothing is
served to anyone but you. --port if 41729 is taken.
Documentation
This page is the overview. The docs are the step-by-step version — prerequisites, installation, every command, every configuration key, the commit gate, and what to do when something is not working.
Node 22+ · macOS, Linux and Windows · everything stays on your machine