course_import
Imports a course from a URL (GitHub or HTTP).Course URL. Supports:
https://github.com/owner/repohttps://github.com/owner/repo/tree/branch/pathhttps://example.com/path/handhold.yaml
Discriminated union with variants:
{ kind: 'ok', course: CourseRecord }{ kind: 'invalidUrl' }{ kind: 'notFound' }{ kind: 'noManifest' }{ kind: 'badManifest', reason: string }{ kind: 'alreadyExists' }{ kind: 'downloadFailed', reason: string }
course_list
Returns all imported courses.Array of course metadata records
CourseRecord
Unique course identifier (hash of source URL)
Original import URL
Absolute path to course directory
Course title from manifest
Course description
Total number of steps
Unix timestamp (milliseconds) when course was imported
Number of completed steps
Course tags
course_search
Full-text search across course titles and descriptions.Search query (FTS5 syntax)
Matching courses
course_tags
Returns all unique tags across imported courses.Sorted array of tag names
course_by_tag
Returns courses with a specific tag.Tag name
course_delete
Deletes a course from the database and optionally removes workspace files.Course ID
If true, deletes lab workspaces for this course
course_get
Returns a single course by ID.course_manifest
Returns the parsedhandhold.yaml manifest for a course.
Manifest with resolved dependencies for current platform
CourseManifest
ManifestStep
Relative path to lesson markdown or lab directory
CourseDependency
Dependency name (e.g.,
'Node.js')Shell command to verify installation (e.g.,
'node --version')Install command for current platform, or null if unavailable
course_read_step
Reads lesson markdown content.Course ID
Path from manifest step (e.g.,
'01-intro/lesson.md')Raw markdown content. If step_path is a directory, concatenates all
.md files.course_read_lab
Reads lab configuration and paths.Course ID
Path to lab directory
LabData
Content of
INSTRUCTIONS.mdTrue if
scaffold/ directory existsAbsolute path to scaffold directory
True if
solution/ directory existsAbsolute path to solution directory
Absolute path to lab directory
Absolute path to workspace (provisioning target)
Parsed
lab.yaml configurationstep_complete
Marks a step as completed.Zero-based step index
step_progress
Returns completed step indices for a course.Array of completed step indices
slide_position_save
Persists current slide position for a lesson step.Total slide count (updated only if provided)
slide_position_load
Loads saved slide position for a lesson step.SlidePosition
slide_complete
Marks a specific slide as completed (for progress tracking).slide_completions
Returns completed slide IDs for a step.route_save
Persists current application route.Discriminated union:
{ kind: 'browser' }{ kind: 'course', courseId: string, stepIndex: number }{ kind: 'editor', courseId: string }
route_load
Loads persisted application route.Last saved route, or
{ kind: 'browser' } if none existscourses_dir_path
Returns absolute path to courses directory.home_dir_path
Returns user home directory path.course_sync
Scans courses directory and registers any new courses found locally.SyncResult
Number of courses added to database
Number of orphaned courses removed