A plugin for Claude Code

Learn while your
agent works.

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.

claude — ~/my-express-api — zsh built by Ajay Kumar
~/my-express-api git:(main)

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

The archer who taught himself

01

Refused a teacher

In the Mahabharata, Drona taught archery to princes. Ekalavya, a forest hunter's son, asked to learn — and was turned away.

02

Practiced before a statue

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.

03

Here, the statue talks back

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

How it works

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.

easierharder
T1Recall easy
T2Mechanism easy
T3Judgement medium
T4Failure modes medium
T5Design hard

Bands overlap — medium still asks tier 2, hard starts at tier 3. Promotion is not a cliff.

  1. 1

    You ask for something

    "Add JWT auth to the Express API." Claude Code gets to work, same as always.

  2. 2

    Claude logs what the work touches

    Each concept comes with a line pointing at the actual code.

    jwt-structure httponly-cookies middleware-order-auth
  3. 3

    A question lands at the seam

    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.

  4. 4

    You answer, it grades honestly

    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.

  5. 5

    The task finishes, and asks at most one more

    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.

  6. 6

    Next session starts calibrated

    A one-line learner profile, so Claude calibrates from your first message. Shaky concepts come back later, at a higher tier.

The promise

Never the same question twice

Three separate things enforce it, because a prompt asking nicely is not enforcement.

Mastered concepts stay retired

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.

Every question is on record

The quiz plan hands past questions back with the tier and grade each got. A question already asked is spent: same concept, different angle.

Answered means done for the session

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

Four independent 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?
default 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?
default 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?
default 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?
default 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.

Eight commands

/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

Your data stays yours

~/.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

Am I actually getting better?

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.

$ eklavya dashboard
Eklavya dashboard on http://127.0.0.1:41729
Opening it in your browser…
  • Overview: accuracy, streak, thirty days of answers, a year as a calendar heatmap
  • Concepts: searchable and paged — open one for every question you were asked on it
  • Review: what is due, what is scheduled for the next fortnight, what you skipped
  • Sessions and Projects: what each piece of work taught, and the runway to the next level

Bound to loopback, reading the same ~/.eklavya/knowledge.db. Nothing is served to anyone but you. --port if 41729 is taken.

Turn generation time
into learning time.

$ npm install -g eklavya && eklavya install

Node 22+ · macOS, Linux and Windows · everything stays on your machine