keenly
Ship it. Own it.

Learn the code your agent writes

Answer on your phone:App StoreGoogle Play

The education layer

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.

  • 17%

    lower quiz scores for engineers who learned a new library with AI help.

    Anthropic, 2026

    KeenlyAsks you about the code of each pull request you open.

  • 19%

    slower with AI tools for experienced developers, who thought they were 20% faster.

    METR, 2025

    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, 2025

    KeenlyAsks a missed question again after 3 days, then after 7.

  • 7.2%

    less delivery stability, an estimated drop as AI adoption rose.

    Google DORA, 2024

    KeenlyShows reviewers on the pull request that its author answered.

How it works

A day with Keenly

You keep coding. Keenly fits into the gaps between prompts and pull requests.

  1. 10:12

    Claude edits src/profile.ts

    You ask for a retry. Claude writes it. You review the diff and move on.

  2. 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.

  3. 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.

  4. 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.

  5. 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
  6. 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.

The deck

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

Your code

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.

  1. Your pull request

    Keenly gets the diff only. Files that the pull request does not change stay on GitHub.

  2. 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
  3. A model, through OpenRouter

    OpenRouter sends your code only to providers that neither train on it nor keep it.

  4. 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 code
Pricing

Free 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

    Soon

    Custom

    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.

Get started

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