Agents write the code. Someone still has to understand it.
Researchers call this gap cognitive debt. Keenly pays it back, one pull request at a time.
KeenlyAsks you about the code of each pull request you open.
KeenlyMeasures what you know. Three right answers master a topic.
83%
of people who wrote with ChatGPT could not quote their own essay minutes later.
MIT Media Lab, 2025KeenlyAsks a missed question again after 3 days, then after 7.
KeenlyShows reviewers on the pull request that its author answered.
A day with Keenly
You keep coding. Keenly fits into the gaps between prompts and pull requests.
- 10:12
Claude edits src/profile.ts
You ask for a retry. Claude writes it. You review the diff and move on.
- 10:20
You open acme/web#42
The Keenly GitHub App reads the diff. It can read pull requests only. It cannot change your code.
- 10:21
Keenly writes 3 questions. The check shows on the pull request.
Reviewers see that questions wait. The check shows no scores, unless you turn them on.
- 11:05
At your next prompt, Claude offers the question
Answer now, or skip it. A skipped question waits for you on the web and in the app.
- 11:06
You answer. +20 XP.
Each option gets feedback, so you learn why the wrong ones are wrong. Three right answers on a topic master it.
Nicely done!
await turns the rejection into a throw, so the catch block runs.
+20 XPPromises and async/await: 2 of 3 to master - 3 days later
A missed question comes back as a review
Miss it again, and it comes back 7 days after that. Keenly shows at most 5 reviews at a time.
Times and names are examples.
Four kinds of question
Keenly reads your diff and picks the topics it brings up. You choose how many of each kind a pull request gets.
Scope
What your pull request changes as a whole, and what it leaves as it was.
One per pull request at most.
loadProfile now retries once. Which callers see a change?Whole pull request
Literacy
A language topic that your diff brings up, such as promises or types.
JavaScript, TypeScript and GDScript.
The first fetchProfile(id) call rejects. What does loadProfile return?Promises and async/await
Design
A system design idea that your diff brings up, such as retries or caching.
Basic, intermediate and advanced courses.
All clients retry after exactly 500 ms. What does the API see?Retries and backoff
Infrastructure
How your code runs and is served, such as a CDN or a load balancer.
Basic, intermediate and advanced courses.
Sessions live in server memory. What breaks behind a load balancer?Load balancers and stateless servers
Keenly reads your pull requests. It never changes your code.
Keenly needs your diff to write its questions. This is what the app can do, where your code goes and what Keenly keeps.
Keenly GitHub App
Permissions on the repositories you choose
- Pull requestsReadReads the title, the description and the diff of a pull request that you open.
- ChecksIts own checkShows the Keenly check on your pull request. It shows no scores, unless you turn them on.
- Your codeNo writeKeenly cannot push, merge or close. It cannot change a line.
Remove the app from a repository, and Keenly reads none of its pull requests.
Your pull request
Keenly gets the diff only. Files that the pull request does not change stay on GitHub.
A filter
Keenly sends code, config and SQL. A diff of more than 200,000 characters gets no question.
- lockfiles
- generated files
- binaries
- docs
- images and fonts
A model, through OpenRouter
OpenRouter sends your code only to providers that neither train on it nor keep it.
Your question
Keenly keeps no diff. A question keeps only this:
- pull request title
- link
- 1 to 8 quoted lines
Private repositories follow the same rules. The Free plan includes them.
How Keenly handles your codeFree for engineers, paid for teams
Free
€0
for one engineer
- Questions on 10 pull requests a month
- XP, mastery and your skill tree
- JavaScript, TypeScript and GDScript courses
- Public and private repos
Team
€20
a month for 5 engineers, and €5 a month for each one more
- Everything in Free, for your whole team
- Questions on 35 pull requests a month for each engineer
- Teams of any size
- Team insights: the topics your team misses
- Add engineers by their GitHub login
- Add or drop seats any time
Enterprise
SoonCustom
on a yearly contract
- Everything in Team
- Courses on your own conventions and libraries
- SSO and a data processing agreement
- Retention controls, down to storing no code
Prices are in euros and exclude VAT.
Your next pull request asks the first question
Sign up with GitHub and connect the repositories you open pull requests in.
Sign up with GitHub