StudyOS is a terminal-native adaptive tutor client built on top of Codex app-server for a distraction-minimised study environment.
The first target subjects are:
- Matrix Algebra & Linear Models
- Probability & Statistics for Scientists
StudyOS is not meant to be a prettier chat window. The goal is a rich, keyboard-first study client that combines:
- structured mathematical presentation
- structured mathematical answer input
- adaptive questioning
- spaced repetition
- misconception tracking
- deadline-aware session planning
- anti-crutch pedagogy
Codex app-server provides the conversation and agent runtime. The client provides the educational UX, local persistence, rendering, and focus-oriented workflow.
The first MVP should prove one complete study loop:
- launch from the terminal
- start or resume a session
- generate a session plan
- present a structured maths question
- accept structured input from the student
- grade the response
- persist the outcome locally
- schedule the next review
- client language:
Rust - runtime model: Codex app-server over
stdio - primary terminal target: graphics-capable local terminal
- storage: local
SQLite - pedagogy default: attempt-first, anti-passivity
- structured input is a core feature, not a later enhancement
- matrix entry grid
- working + final answer
- step list
- short retrieval response
Launcher / Focus Wrapper
-> Rich Tutor Client UI
-> Codex app-server session runtime
-> Local renderer
-> Local study memory store
-> Deadline / timetable adapters
-> Materials index
Included early:
- Rust TUI shell
- Codex app-server session runtime over
stdio - streamed transcript rendering
- structured answer widgets
- local memory database
- session planning
- recap and resume flow
Deferred until after the core loop works:
- dedicated custom MCP server suite
- live calendar integrations
- OCR-heavy materials ingestion
- slide-mode polish
- advanced analytics
This repository now has the first end-to-end tutor loop wired up:
- launch the Rust TUI shell
- boot Codex app-server locally
- start or resume a tutor thread
- request a schema-constrained opening study step
- render the returned teaching blocks and structured question
- submit a structured answer for grading and the next question
- review a compact recap before closing the session
- persist local resume state, session records, attempts, misconceptions, and session recaps in SQLite
Detailed V1 implementation docs live in:
Prerequisites:
- Rust
1.88.0 - local
codex-cli 0.121.0or newer installed and authenticated
Sanity check the workspace:
just check
# or, if `just` is not installed:
./scripts/check.shOnboard yourself with the built-in tour:
cargo run -p studyos-cli -- tourRun:
cargo run -p studyos-cliUseful keys:
qopen recap review, then confirm safe exittabcycle focus regions1to7switch side panels[and]jump between active questionsF5submit the active structured answerCtrl+Rreconnect the app-server after a disconnect?show help
Initialize local starter files:
cargo run -p studyos-cli -- initInspect local setup health:
cargo run -p studyos-cli -- doctorWrite runtime JSONL traces under .studyos/logs/ for debugging:
cargo run -p studyos-cli -- --log-jsonRun the internal alpha-readiness harness against the live runtime:
STUDYOS_CODEX_AVAILABLE=1 cargo run -p studyos-cli --example alpha_readinessManage local deadlines without hand-editing JSON:
cargo run -p studyos-cli -- deadlines list
cargo run -p studyos-cli -- deadlines add \
--title "Mock Linear Exam" \
--due-at "2026-05-20T09:00:00Z" \
--course "Matrix Algebra & Linear Models" \
--weight 0.6 \
--notes "Manual local entry"Inspect and switch the active course:
cargo run -p studyos-cli -- courses list
cargo run -p studyos-cli -- courses use --title "Probability & Statistics for Scientists"Ingest local course materials and search the distilled index:
cargo run -p studyos-cli -- materials ingest
cargo run -p studyos-cli -- materials list
cargo run -p studyos-cli -- materials search --query "variance"Inspect the attempt audit trail for a session:
cargo run -p studyos-cli -- attempts list --session <session-id>Inspect the local timetable:
cargo run -p studyos-cli -- timetable show
cargo run -p studyos-cli -- timetable today
cargo run -p studyos-cli -- timetable add --day friday --start 11:00 --end 12:00 --title "Stats Seminar"Example local data files live in:
- examples/studyos-config.toml
- examples/deadlines.json
- examples/timetable.json
- examples/materials-manifest.json
- examples/linear-models.toml
- examples/probability-stats.toml
These should be copied into the local .studyos/ data directory when you want the shell to load real local context:
.studyos/
config.toml
deadlines.json
timetable.json
logs/
runtime-<timestamp>.jsonl
courses/
linear-models.toml
probability-stats.toml
materials/
raw/
<drop your PDFs, notes, and text files here>
index/
manifest.json
concepts.json
materials ingest walks .studyos/materials/raw/, extracts text from .md, .txt, .tex, and .pdf, then writes only distilled snippets and tags into the manifest. StudyOS uses that distilled context to generate fresh teaching material rather than replaying source files verbatim.
Remote:
origin->https://github.com/georgepullen/StudyOS.git
Current branch:
main
Workspace:
crates/studyos-cli: executable entry pointcrates/studyos-core: shared domain types, persistence, and tutor payload models
Public repo safety defaults:
- local databases are gitignored
.envfiles are gitignored- generated runtime state is gitignored
- CI only runs repo-safe checks
- terminal-first
- local-first
- keyboard-first
- retrieval before explanation
- evidence of understanding over answer-only correctness
- low distraction by default