A learning app you run on your own machine. Give it something to learn and it finds sources and builds a study plan. Then it tutors you and keeps track of what you actually know.
The tutor won't give you the answer until you've tried. The code blocks the answer until then, so asking a different way doesn't help.
It runs on your own Anthropic API key, or an OpenRouter key. Your learning records stay on your computer, but each AI request is still sent to the model's provider.
This is the built-in demo topic. You can load it from the empty home page without an API key. Your first hour walks you through it. Click the animation for a sharper video.
There's also a phone layout.
- Builds a study plan for a topic, or for a longer goal split into milestones.
- Tutors you with questions and hints until you submit an attempt of your own (the app checks that it has some reasoning in it).
- Checks what you know in several ways: explaining it in your own words, recalling it days later, how sure you were, teaching it back, and things you build. A concept counts as solid only when these agree.
- Lets you practise under pressure: defend your ideas to a generated persona (a skeptical buyer, a thesis committee), or answer questions about a real paper.
- Tracks your momentum without punishing breaks.
- Reads your Obsidian notes and writes notes back, including a notebook per concept: your own notes, attempts, graded explanations, and worked solutions.
- Remembers what you've read and what it already explained, so it doesn't repeat itself.
- Shows what each agent did and what each call cost.
Grades decide what the app thinks you know, so they are tested. A set of 55 hand-written answers about gradient descent, backpropagation, Bayes' theorem, maximum likelihood, and L2 regularization covers correct answers in other wording, answers missing a key idea, common misconceptions, confident wrong answers, and answers that try to talk the grader into a high score.
With the default model and settings, no weak answer was graded as mastered (0 of 34), and 1 good
answer of 52 was marked as missing something it had. You can make the grader more or less strict
with AA_GRADING_STRICTNESS. The numbers for each level, and how to run the test yourself, are
in evals/grading.
You need Docker or OrbStack,
and just.
cp .env.example .env # then set ANTHROPIC_API_KEY=sk-ant-... in .env
just upOpen http://localhost:8000. just logs shows the logs and just down stops it.
You need uv, Node.js 22.12+ (or 20.19+), and just.
just setup # installs everything and creates .env; then set your key in .env
just dev # starts the app; Ctrl-C stops itOpen http://localhost:5173.
To use an OpenRouter key instead, set AA_LLM_BACKEND=openrouter and OPENROUTER_API_KEY in
.env. Claude models are the default there. Other models, such as DeepSeek, work but are
marked experimental.
Either way, Your first hour is a good place to start. For everything else (OpenRouter, vault setup, Linux file ownership, ports, models, offline use), see docs/SETUP.md.
Several agents work together, so it uses more tokens than a single chatbot. In measured runs, starting a new topic (research, curriculum, a few tutor turns, a grade) cost about a dollar on Claude Sonnet 5.5 and about 20 cents on DeepSeek V4.1 Flash through OpenRouter. Most of that is the web research. A tutor turn costs about a cent. A busy day can reach a few dollars.
The Usage page shows what you've spent each day, and on which features and models. To set
a daily limit, add AA_DAILY_BUDGET_USD=5 to .env. Details and limits of that cap are in
docs/COSTS.md.
Your records are stored on your machine. There's no account and no telemetry. The content of each AI request does go to Anthropic's API, or through OpenRouter to the model's provider if you use OpenRouter. On OpenRouter the app asks only for providers that don't train on your prompts; that isn't the same as not storing them. The app also fetches the web pages and papers you give it.
Everything is one SQLite file. Open Your data in the sidebar to download a backup, or run
just backup. Restoring is covered in docs/BACKUP.md.
The back end is Python and FastAPI, with SQLite for storage and the Anthropic SDK for model calls. The front end is SvelteKit.
Each feature started as a written design and a step-by-step plan before any code. Those documents are in the repo, and they explain the reasoning better than the code does:
- Overview: how the pieces fit together.
- Research: the learning science behind the design, with sources.
- Design specs and plans, one per feature.
It's early (pre-1.0), so expect rough edges. Issues and pull requests are welcome. See CONTRIBUTING.md for how to run the tests, and ROADMAP.md for what's planned. Please read the Code of Conduct and the security policy too.
Apache 2.0 © 2026 Thomas Sullivan






