A spaced-repetition CLI for LeetCode practice problems
Project description
Jobbernaut Sensei
Navigate the vast space of the job market.
Jobbernaut is a cloud-native, event-driven open core intelligence platform designed to automate the most tedious parts of the job search: data extraction, resume tailoring, and document management.
Jobbernaut Sensei is the LeetCode practice & spaced-repetition CLI tool within the ecosystem โ helping you sharpen your algorithmic skills with a structured review system. It's also an AI-agent-friendly API: every command outputs clean JSON, ready for agents like Cline, Claude Code, or ChatGPT to consume.
๐ The Ecosystem at a Glance
| Repository | Role | Technology Stack |
|---|---|---|
jobbernaut-infra |
Foundation | Terraform (HCL), AWS IAM, S3, DynamoDB |
jobbernaut-tabs |
Frontend | Next.js, React, Tailwind CSS |
jobbernaut-backend |
Control | Python (AWS Lambda), Boto3, Pydantic |
jobbernaut-tailor |
Intelligence | Docker, Python, LangChain (AI), TeXLive (LaTeX) |
jobbernaut-extract |
Collection | Chrome Extension (Manifest V3), JavaScript |
jobbernaut-sensei |
CLI Practice | Python (setuptools) |
๐ Documentation: For deep dives into the architecture, data flows, and setup guides, visit jobbernaut-docs.
โก๏ธ Key Features
- Spaced Repetition: Never forget a solution โ schedules reviews based on your difficulty rating.
- One-Command Scaffolding: Create new problem files with pre-filled metadata in seconds.
- ATS-Ready Tracking: Export your progress to CSV or Markdown.
- Context-Aware Fuzzy Matching: Open or mark problems by number, slug, or title words.
- Zsh Completions: Tab-complete problem names and categories.
- ๐ค AI-Agent Friendly: Every command outputs clean JSON โ
sensei revisit --json,sensei status,sensei show <problem>. - Non-Interactive Marking:
sensei mark 217 --rating eโ perfect for agent-driven tutoring sessions.
๐ฆ Setup
pip install jobbernaut-sensei
Initialize a problems/ directory:
sensei init
๐ Daily Loop
1. Morning โ see what's due
sensei revisit
2. Start a problem โ scaffold it
sensei new 217 contains-duplicate 1-arrays-and-hashing -d easy -t arrays hash-set
3. Open a problem โ jump back in
sensei open 217
4. After solving โ mark it
sensei mark 217
You'll be prompted with one question:
How did it go?
[e] easy โ 90 days
[g] good โ 30 days
[h] hard โ 7 days
[s] struggled โ 3 days
Press one key. last_solved and revisit_in_days are updated automatically.
๐ Command Reference
sensei revisit โ daily review runner
sensei revisit
sensei revisit --all
sensei revisit --topic arrays
sensei revisit --json # AI-agent friendly JSON output
sensei revisit --export
sensei revisit --export-md
Colored terminal output:
๐
Jobbernaut Sensei Revisit โ Tuesday, May 26 2026
๐ข UPCOMING (7 days)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
in 3d [hard ] 124. Binary Tree Maximum Path Sum (trees)
in 4d [medium] 853. Car Fleet (stack, monotonic-stack)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
0 problem(s) need attention today. Total tracked: 22
JSON output (--json):
{
"generated": "2026-05-26",
"total_tracked": 22,
"problems": [
{
"label": "124. Binary Tree Maximum Path Sum",
"difficulty": "hard",
"last_solved": "2026-05-26",
"due_date": "2026-05-29",
"days_until_due": 3,
"topics": ["trees"],
"topic_folder": "7-trees",
"filepath": "problems/7-trees/..."
}
]
}
| Flag | What it does |
|---|---|
| (none) | Overdue + due today + upcoming 7 days |
--all |
Everything, including far-future problems |
--topic arrays |
Filter by topic tag (partial match) |
--json |
Structured JSON output for AI agents |
--export |
Export all problems to export.csv |
--export-md |
Export all problems to export.md |
sensei status โ quick summary
sensei status
Returns a lightweight JSON snapshot of your tracker state:
{
"total": 22,
"overdue": 0,
"due_today": 0,
"upcoming": 4,
"problems": [
{ "label": "124. Binary Tree Maximum Path Sum", "difficulty": "hard", ... }
]
}
Ideal for AI agents to quickly assess a user's practice state before a tutoring session.
sensei show <problem> โ inspect a problem
sensei show 217
sensei show contains-duplicate
Returns metadata + your saved solution code as JSON:
{
"label": "217. Contains Duplicate",
"number": "217",
"title": "Contains Duplicate",
"filepath": "problems/1-arrays-and-hashing/...",
"metadata": {
"last_solved": "2026-05-14",
"revisit_in_days": 90,
"difficulty": "easy",
"topic_tags": ["arrays", "hashing"],
"due_date": "2026-08-12"
},
"solution": "class Solution:\n def containsDuplicate(..."
}
Use this to fetch a problem for analysis, code review, or tutoring.
sensei new โ scaffold a new problem
sensei new 217 contains-duplicate 1-arrays-and-hashing
sensei new 217 contains-duplicate 1-arrays-and-hashing -d easy -t arrays hash-set --open
| Argument | Description |
|---|---|
number |
LeetCode problem number |
slug |
LeetCode URL slug, e.g. contains-duplicate |
category |
Topic folder, e.g. 1-arrays-and-hashing |
-d / --difficulty |
easy / medium / hard (default: medium) |
-t / --tags |
One or more topic tags |
--open |
Open the file in $EDITOR / code immediately |
sensei open โ open a problem
sensei open 217
sensei open contains-duplicate
sensei open 217 --no-browser # editor only
Accepts problem number, slug, or title words โ same fuzzy matching as mark.
sensei mark โ mark a problem as reviewed
sensei mark 217
sensei mark contains-duplicate
sensei mark 217 --rating e # non-interactive (AI-agent friendly)
| Flag | What it does |
|---|---|
| (none) | Interactive prompt for difficulty rating |
--rating e |
Mark as easy (90 days until next review) |
--rating g |
Mark as good (30 days) |
--rating h |
Mark as hard (7 days) |
--rating s |
Mark as struggled (3 days) |
The --rating flag skips the interactive prompt โ perfect for AI agents tutoring a user and updating the schedule automatically.
๐ค AI-Agent Integration
See AGENTS.md โ a complete tool-calling guide for integrating sensei into any AI coding agent's toolset.
Quick reference:
sensei status # Assess user's practice state
sensei revisit --json # Get full review data
sensei show <problem> # Inspect problem + solution
sensei mark <problem> --rating g # Update schedule after tutoring
๐ง Zsh Shell Completions
Tab-complete sensei subcommands, problem numbers/names, and category names.
Add to ~/.zshrc:
fpath=(/path/to/jobbernaut-sensei/src/completions $fpath)
autoload -Uz compinit && compinit
Then reload: source ~/.zshrc
โ๏ธ License
Unless otherwise noted, all repositories within the Jobbernaut organization are licensed under the PolyForm Noncommercial License 1.0.0.
If a repository lacks a specific LICENSE file, the license located at Jobbernaut/LICENSE.md applies by default.
You are free to use, modify, and learn from this code for personal or non-commercial purposes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jobbernaut_sensei-0.3.1.tar.gz.
File metadata
- Download URL: jobbernaut_sensei-0.3.1.tar.gz
- Upload date:
- Size: 25.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
395dbedf36ec519c72ab64828d941a87bc61f4354be6097e8faba9f830b8fa27
|
|
| MD5 |
0769bc9443a9a868a87f44518c51b15c
|
|
| BLAKE2b-256 |
7f13d65abac21890a9eaacf7ebe3ca8ae0b505fa84dc30ec883c45c230c48ada
|
File details
Details for the file jobbernaut_sensei-0.3.1-py3-none-any.whl.
File metadata
- Download URL: jobbernaut_sensei-0.3.1-py3-none-any.whl
- Upload date:
- Size: 20.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db55a6bedd8e981bbf597658814cc327a29106494c22c7ecdd4f91bc7e919869
|
|
| MD5 |
199e5e9dd6cce1088cbb2337ffacdeaa
|
|
| BLAKE2b-256 |
95033036cbd293c6e38ba576fadfcd0a792c8532b15060f7c7410eea8612b055
|