@sigmaschool/cli
v0.1.0
Published
CLI for the Sigma School learning portal — fetch lessons, work offline, submit for grading
Maintainers
Readme
sigmo
A command-line tool for the Sigma School learning portal. Fetch lesson starter code, work offline in your editor of choice, and submit for grading.
Install
npm install -g @lms/cliRequires Node.js ≥ 18.
Quick start
# 1. Generate an API token in the portal (Settings → API Token), then:
sigmo auth login
# 2. Browse available lessons
sigmo list
# 3. Pull starter code for a lesson into ./lesson-<id>/
sigmo fetch 42
# 4. Work in your editor — the CLI is offline until you submit.
# 5. Submit your answer for grading
cd lesson-42 && sigmo submitCommands
| Command | Description |
| --- | --- |
| sigmo auth login | Paste an API token, validate it, store it locally |
| sigmo auth logout | Clear the stored token |
| sigmo auth status | Re-validate the token and show the current user |
| sigmo list (ls) | List lessons with attached codetasks. --all includes lessons without codetasks |
| sigmo fetch <id> | Fetch starter code for a lesson into ./lesson-<id>/ (override with --dir) |
| sigmo submit [<id>] | Submit work from the current lesson dir; pass <id> to submit from elsewhere |
Run any command with --help for full options.
How it works
sigmo is a thin client over the portal's PayloadCMS REST API. It uses Payload's built-in API key auth (Authorization: users API-Key <key>) — no OAuth dance, no browser round trip.
- Fetch calls
GET /api/lessons/:id?depth=2, finds the related codetask, and writes itsfiles[]to disk in Sandpack JSON shape ({ "/index.js": { code } }). - Submit reads files from disk, applies ignore rules, and
POSTs{ codetaskId, answer }to/api/user-lessons/submit/:lessonId.
Each fetched lesson dir contains a .sigmo/manifest.json so you can cd in and run sigmo submit without re-typing the lesson ID.
.sigmoignore
Add a .sigmoignore file to a lesson directory to exclude extra paths from submission. Uses gitignore syntax. The CLI always excludes:
node_modules/
.git/
.sigmo/
.env
.DS_Store
.sigmoignoreExample:
# .sigmoignore
notes/
scratch/
*.logConfiguration
| Env var | Purpose |
| --- | --- |
| SIGMO_API_URL | Override the portal API base URL (useful for staging or local dev) |
| SIGMO_DEBUG=1 | Print stack traces on error |
The token is stored at ~/.config/configstore/@lms/cli.json (respects XDG_CONFIG_HOME).
Development
pnpm install # from the monorepo root
pnpm --filter @lms/cli test
node apps/cli/bin/sigmo.js --helpTo test the binary as if installed globally:
cd apps/cli
npm link # exposes `sigmo` on PATH
sigmo --help
npm unlink -g @lms/cliLicense
MIT
