Inspiration

I teach classical machine learning at a university as a hobby. I needed a way for students to review the main ideas between classes without repeating a full lecture. I first recorded full lectures, then published Markdown notes and an interactive textbook. Students rarely used them for quick review, but they did use AI agents to find material and request summaries. I built Learning Companions to turn course sources into short lessons with interaction and feedback.

What it does

Learning Companions is a general Codex skill that turns selected material from a repository or knowledge base into a short interactive lesson. An optional repository adapter defines which sources to use or exclude, along with local privacy, output, and publishing rules. Codex uses the learner's goal, topic, settings, and source constraints to build a grounded lesson payload. It then generates and validates one self-contained index.html with a short explanation, a topic-specific interaction, quizzes, and corrective feedback. The finished lesson runs offline without a server, account, API key, network connection, or AI model.

How we built it

I used Codex with GPT-5.6 to build three layers: a general skill, a repository adapter, and lesson payloads. The general skill contains the content contract, Python generator and validator, and shared JavaScript runtime. The ML adapter adds course-specific source, privacy, path, and publishing rules. JSON payloads keep lesson content and references separate from the renderer.

Pytest and Node tests check generation and browser behavior. GitHub Actions builds and publishes the pages. The course material and interactive textbook predated Build Week. During the event, I built the skill system, generator, validator, shared runtime, ML adapter, lesson payloads, and tests.

Challenges we ran into

Skill boundaries. One large skill mixed reusable behavior with repository rules, while separate topic skills duplicated the generator. I split the system into a general core, an optional adapter, and a lesson payload. Specific interactions. A shared renderer initially made Regression and Classification lessons look too similar. I added subject-specific interaction models without forking the core. Token use. Parallel agents repeatedly read the same repository context and revisited the same decisions. Reusing the core and adapter reduced that work.

Accomplishments that we're proud of

I separated the reusable generator from ML-specific sources and rules. Adapting another repository requires an adapter and lesson payloads, not a new generator. Each result is a grounded, portable HTML lesson. The ML course is the first implementation.

What we learned

Making content available is not enough; learners need interaction and feedback. Repository rules must stay outside the general skill.

What's next for Learning Companions

I want Learning Companions to work by default with any trusted material and adapt lessons to the learner's level, goals, and previous conversations. With permission, an AI agent could also track covered topics and start review sessions when needed.

Built With

Share this project:

Updates