When user declined venv recreation, setup was still printing
"Setting up virtual environment..." before checking if it existed,
making it appear that recreation was proceeding anyway.
Changes:
- Check for existing venv before printing any messages
- Show "✅ Using existing virtual environment" when user declines
- Show "🐍 Recreating..." only when actually recreating
- Show "🐍 Setting up..." only for new venv creation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace plain argparse help with custom Rich-formatted output:
- Intercept --help flag before argparse processes it
- Show ASCII logo at top (consistent with tito alone)
- Display commands in beautiful Rich table with colors
- Reuse _generate_welcome_text() for consistency
- Add formatted global options section
Benefits:
- Consistent Rich formatting across tito and tito --help
- Professional table layout for commands (green names, dim descriptions)
- Color-coded sections (cyan headers, yellow options, green commands)
- Same visual experience whether you run tito or tito --help
- All command info dynamically pulled from self.commands dict
Before: Plain black-and-white argparse output
After: Colorful, formatted Rich output with ASCII logo and tables
Replace static hardcoded help text with dynamic generation from command registry:
- Create welcome_sections dict as single source of truth for examples
- Add _generate_welcome_text() for interactive mode (tito)
- Add _generate_epilog() for help mode (tito --help)
- Both screens now pull from same data structure
Benefits:
- No more forgetting to update help when commands change
- Student/Developer command lists auto-generated from self.commands dict
- Quick Start examples defined once, used in both places
- Ensures consistency between tito and tito --help outputs
Changes:
- tito/main.py: Replace 40+ lines of static text with 70 lines of dynamic generation
- Commands automatically categorized from student_commands/developer_commands lists
- Rich formatting maintained for interactive mode, stripped for plain --help
Standardize color usage to match TinyTorch CLI style guide:
- Replace [blue] with [cyan] for all action/info messages (10 instances)
- Replace [bold blue] with [bold cyan] for headers (1 instance)
- Replace "bold blue" with "bold cyan" for table headers (3 instances)
- Replace "bright_blue" with "bright_cyan" for panel borders (1 instance)
Files updated:
- tito/main.py: Welcome screen community commands now use [cyan]
- tito/commands/login.py: URL display now uses [cyan]
- tito/commands/protect.py: All 7 blue instances → cyan
- tito/commands/milestone.py: Table headers → bold cyan
- tito/commands/test.py: Table headers → bold cyan
- tito/commands/grade.py: Border style → bright_cyan
Result: Holistic CLI consistency with [cyan] for actions, [green] for success,
[yellow] for warnings, [red] for errors across all 15+ commands.
- Move login/logout from standalone commands to tito community subcommands
- Reduce community.py from 860 to 264 lines by removing placeholder profile code
- Delegate login/logout to existing LoginCommand/LogoutCommand (no auth code changes)
- Maintain leaderboard, compete, and submit functionality
- Apply consistent Rich formatting: ✅ emoji, [cyan] for actions, [green] for success
- Update main.py help text to show new command structure
Commands:
tito community login - OAuth login via browser
tito community logout - Clear credentials
tito community leaderboard - Open leaderboard
tito community compete - Open competitions
tito community submit - Validate/submit benchmarks
All auth/submission code unchanged. Style consistent with TinyTorch CLI conventions.
Implement tito community submit command for Module 20 capstone submissions with schema validation, metrics display, and error handling. Shows baseline and optimized model metrics with improvement calculations. Includes Coming soon message for future leaderboard integration.
Added live progress bar to `tito module test --all` command:
- Shows spinner, progress bar, and task progress (X/20)
- Updates description with current module being tested
- Provides better visual feedback during long test runs
- Maintains all existing rich output (logo, panels, tables)
Uses rich.progress with SpinnerColumn, TextColumn, BarColumn,
and TaskProgressColumn for comprehensive progress visualization.
This completes the rich CLI enhancement pass for bulk commands.
New Commands:
- tito module test [NUMBER] - Test single module
- tito module test --all - Test all 20 modules sequentially
- tito module complete --all - Complete all modules (test + export)
- tito module reset --all - Reset all modules (already existed)
Features:
- Detailed test results with pass/fail status
- --verbose flag for full test output
- --stop-on-fail to halt on first failure
- Summary table showing all module test results
- 5-minute timeout per module test
- Proper error reporting and exit codes
This enables:
- Quick validation of all modules after global changes
- Bulk export workflow for package releases
- Easy testing during development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Demo improvements:
- Add hidden setup phase to demo tapes for clean state
- New benchmark and logo demo tapes
- Improved build-test-ship, milestone, and share-journey demos
- All demos now use Hide/Show for cleaner presentation
CLI fix:
- Add default=None to module reset command argument
- Prevents argparse error when no module specified
Cleanup:
- Remove outdated tinytorch/core/activations.py binary
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Fixed broken multiline comment that had closing parenthesis on wrong line.
The syntax error was preventing tito from running.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Typography refinements:
- Add extra space between TORCH letters for better readability
- Improve breathing room in R, C, and H letter forms
- Adjust flame positioning to match wider letter spacing
- Align tagline with updated TORCH width
The wider spacing gives each letter more presence and makes
the logo feel less cramped on narrow terminal windows.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Typography refinements:
- Move flames 1 space closer to T and H for better visual cohesion
- Make tagline bold to match flame glow intensity
- Use TAGLINE_COLOR constant for consistency
These micro-adjustments make the logo feel crafted rather than
assembled, with each element belonging to a unified whole.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added fourth section with essential help commands:
- tito system doctor (check environment health)
- tito --help (see all commands)
Completes welcome screen simplification with 4 focused groups
showing 10 total commands for new users.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added proper spacing (8 spaces) to align the tagline
'🔥 Don't just import it. Build it.' directly under the TORCH letters.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Separate required vs optional dependencies in health checks:
Required (from requirements.txt):
- NumPy, Rich, PyYAML, Pytest, Jupytext
Optional (nice to have):
- JupyterLab, Matplotlib
Now health check shows:
- Required deps as ✅ OK or ❌ Missing
- Optional deps as ✅ Installed or ○ Not installed (dim, not alarming)
This prevents students from thinking they have issues when
optional tools like JupyterLab aren't installed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Dramatically simplified the welcome screen to show only essential info:
- Quick Start (3 commands)
- Track Progress (2 commands)
- Community (1 command)
Removed redundant commands:
- leaderboard -> merged into community
- olympics -> merged into community
These backend-dependent features are consolidated into a single
community command that will handle all social features when the
backend is ready.
Changes:
- Simplified welcome screen (10 lines vs 40+ lines)
- Moved leaderboard.py and olympics.py to _archived/
- Updated all tests (45 passing)
- Cleaner --help output
- Updated archived README
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Students can run demos directly with Python, and developers can
run jupyter-book directly. The CLI wrappers don't add value.
Changes:
- Move demo.py and book.py to _archived/
- Remove from main.py command registry
- Remove from __init__.py imports
- Update test expectations (47 tests passing)
- Update archived README with removal rationale
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changed community join from anonymous UUID-based to GitHub-authenticated
profile creation with minimal CLI questions and web completion.
Changes:
- Ask only 3 questions: GitHub username (required), country, institution
- GitHub username is the authentication anchor (no more anonymous UUIDs)
- Auto-detect country when possible
- Open browser to tinytorch.ai/community/join with pre-filled params
- Store minimal profile locally (.tinytorch/community.json)
- Full profile completion happens on website (OAuth, bio, social links)
- Updated command description to be clearer
Benefits:
- Faster CLI experience (3 questions max vs 5+)
- GitHub username = single source of truth
- Better UX for complex forms (website has rich UI)
- OAuth authentication built-in
- Profile sync possible via API later
Local storage format:
{
"github_username": "studentX",
"joined_at": "2025-11-29T...",
"country": "USA",
"institution": "MIT",
"profile_url": "https://tinytorch.ai/community/studentX",
"last_synced": null
}
Tests: 49/49 passing ✅🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changed import from `.src` to `..src` since SrcCommand is in
tito/commands/src.py not tito/commands/module/src.py
This fixes the "No module named 'tito.commands.module.src'" error
when running `tito module complete`.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The checkpoint command tracked 21 technical capability checkpoints, but
this overlapped significantly with the milestones system which provides
a more engaging, narrative-driven progress tracking experience.
Changes:
- Removed checkpoint command and test files
- Updated milestone.py to remove checkpoint dependencies
- Removed checkpoint integration from export.py, src.py, leaderboard.py
- Updated CLI help text to reference milestones instead
- Updated test suite (49/49 tests passing)
- Archived checkpoint.py for reference
Rationale:
- Milestones is more engaging (historical ML achievements)
- Module status already shows granular progress
- Reduces duplication and confusion
- Single clear progress tracking system
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove hardcoded command list in welcome screen
- Dynamically build help from self.commands registry
- Categorize commands: Essential, Student Workflow, Community, Developer, Shortcuts
- Ensures welcome screen always shows only registered commands
- No more stale command references
Benefits:
- Single source of truth (commands registry)
- Adding/removing commands automatically updates welcome
- Clear categorization for different user roles
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove module from started_modules when marking complete
- Add validation to prevent completing modules out of order
- Show all modules in status (removed smart collapsing)
- Fix data integrity: modules must be completed sequentially
Prevents invalid states where module N is complete but N-1 is not.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Reorganize TinyTorch CLI from flat structure to hierarchical organization
with subfolders for complex commands with subcommands.
Changes:
- Create subfolders: module/, system/, package/
- Move module commands: module_workflow.py → module/workflow.py
- Move module_reset.py → module/reset.py
- Move system commands: system.py → system/system.py
- Move system subcommands: info.py, health.py, jupyter.py → system/
- Move package commands: package.py → package/package.py
- Move package helpers: reset.py, nbdev.py → package/
- Archive deprecated files: clean.py, help.py, notebooks.py, status.py
- Update all imports in moved files and main.py
- Add __init__.py exports for each subfolder
- Create comprehensive CLI test suite (52 tests)
- test_cli_registry.py: Validate command registration
- test_cli_execution.py: Smoke tests for all commands
- test_cli_help_consistency.py: Help text validation
- Update tests to match new structure
Benefits:
- Clear ownership: Easy to see which helpers belong to which commands
- Better organization: Related files grouped together
- Scales cleanly: Adding subcommands is straightforward
- Zero user impact: All commands work exactly the same
All 52 tests passing ✅🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update tagline across all commands to 'Don't just import it. Build it.'
- Rename milestone command to milestones for better consistency
- Remove duplicate milestones.py file
- Add auto-install of tito CLI in activate.sh
- Add command metadata structure to BaseCommand
- Clean up command registration with single source of truth
- Delete tito/commands/doctor.py (replaced by health/check commands)
- Update export.py: system doctor → system health
- Update help.py: system doctor → system health (4 occurrences)
- Update module_workflow.py: system doctor → system health
- Update setup.py: system doctor → system health
- Update src.py: system doctor → system health
Completes migration from 'tito system doctor' to new command structure.
- health: Show only ✅/❌ status (no version numbers)
- info: Remove dependency table (use 'system version' instead)
- Clear separation: health=status, info=resources, version=versions
Enhanced the tito logo command with a personal message from Professor Vijay
Janapa Reddi explaining how TinyTorch grew from the TinyML movement at Harvard.
The message emphasizes the importance of engineering ML systems from first
principles and includes the memorable Lego/Star Wars analogy.
Key changes:
- Added personal signature with Harvard CS 249R affiliation
- Included TinyML movement origin story in conversational, italic style
- Emphasized "engineer" as the core philosophy
- Added Lego blocks analogy for building from scratch
- Updated catchphrase: "The future of ML is tiny and bright—don't just 'import torch', build it."
- Updated tagline: "Start tiny. Go deep. Build big."
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changed banner to display 'Tiny🔥TORCH' with capital T to match
the official brand style.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
Fixes:
- module complete: Update paths to use src/ for source files
- module complete: Fix export call to use new SourceCommand API
- milestone run: Remove nonexistent progress_tracker dependency
- milestone run: Use progress.json directly for prerequisite checking
Both commands now work correctly with new directory structure
Major directory restructure to support both developer and learner workflows:
Structure Changes:
- NEW: src/ directory for Python source files (version controlled)
- Files renamed: tensor.py → 01_tensor.py (matches directory naming)
- All 20 modules moved from modules/ to src/
- CHANGED: modules/ now holds generated notebooks (gitignored)
- Generated from src/*.py using jupytext
- Learners work in notebooks, developers work in Python source
- UNCHANGED: tinytorch/ package (still auto-generated from notebooks)
Workflow: src/*.py → modules/*.ipynb → tinytorch/*.py
Command Updates:
- Updated export command to read from src/ and generate to modules/
- Export flow: discovers modules in src/, converts to notebooks in modules/, exports to tinytorch/
- All 20 modules tested and working
Configuration:
- Updated .gitignore to ignore modules/ directory
- Updated README.md with new three-layer architecture explanation
- Updated export.py source mappings and paths
Benefits:
- Clean separation: developers edit Python, learners use notebooks
- Better version control: only Python source committed, notebooks generated
- Flexible learning: can work in notebooks OR Python source
- Maintains backward compatibility: tinytorch package unchanged
Tested:
- Single module export: tito export 01_tensor ✅
- All modules export: tito export --all ✅
- Package imports: from tinytorch.core.tensor import Tensor ✅
- 20/20 modules successfully converted and exported
- Single source of truth in milestone_tracker.py
- Zero code duplication across codebase
- Clean API: check_module_export(module_name, console)
- Gamified learning experience through ML history
- Progressive unlocking of 5 major milestones
- Comprehensive documentation for students and developers
- Integration with module workflow and CLI commands
New milestone 05 demo that shows students the model learning to "talk":
- Live dashboard with epoch-by-epoch response progression
- Systems stats panel (tokens/sec, batch time, memory)
- 3 test prompts with full history displayed
- Smaller model (110K params) for ~2 minute training time
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The auto-protection feature was setting core tinytorch files to read-only
after each export, which caused permission errors on subsequent exports.
Students who want file protection can run 'tito protect --enable' manually.
- Implement tito benchmark baseline and capstone commands
- Add SPEC-style normalization for baseline benchmarks
- Implement tito community join, update, leave, stats, profile commands
- Use project-local storage (.tinytorch/) for user data
- Add privacy-by-design with explicit consent prompts
- Update site documentation for community and benchmark features
- Add Marimo integration for online notebooks
- Clean up redundant milestone setup exploration docs
- Finalize baseline design: fast setup validation (~1 second) with normalized results
The itemize environment parameters [leftmargin=*, itemsep=1pt, parsep=0pt]
were appearing as visible text in the PDF because the enumitem package
wasn't loaded. This fix adds \usepackage{enumitem} to the preamble.
All itemized lists now format correctly with proper spacing and margins.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>