SkillKit for NUS
SkillKit for NUS (sk4n) is a small toolkit for everyday NUS student tasks.
It can help you look through Canvas, search NUSMods, browse TalentConnect jobs,
and give supported AI assistants a reliable way to use the same tools.
What can it do?
- Canvas: sign in with NUS SSO; ckeck courses, read assignments, upcoming items, files, announcements, modules, pages, people, and groups.
- NUSMods: search courses, view course details and comments, and keep a local timetable using NUSMods share links. No login is needed.
- TalentConnect: search jobs and companies, including information available after signing in with NUS SSO.
- Agent skills: install ready-made skills for ChatGPT Work / Codex, GitHub Copilot, Claude Code, and Google Antigravity.
Before you use it
This is an unofficial, independent project. It is not affiliated with, endorsed by, or supported by the National University of Singapore (NUS), Instructure/Canvas, NUSMods, Kinobi/TalentConnect, or any supported AI platform.
It is intended as a personal study and workflow aid. Follow NUS policies and the terms, rules, and acceptable-use requirements of every platform you access. AI and CLI output can be incomplete or wrong, so check important information against the original source. The software comes with no warranty of accuracy, reliability, or fitness for a particular purpose; see the MIT License.
Install
Not computing major or don't want to struggle with installation? You can try to ask your agent help me install https://github.com/hykzr/sk4n/ and let it do everything in this step for you
You need to install Python 3.11 or newer with pip first.
python -m pip install sk4n
If this command fail because the system cannot find python command,
try replacing python with py (for Windows), or python3 (on MacOS or Linux)
The one sk4n installation gives you four commands:
sk4n
canvas
nusmods
talent-connect
One extra setup step for Canvas and TalentConnect
Canvas and TalentConnect use a small automated browser (chromium) to handle NUS SSO. Set it up once after installing:
sk4n browser install chromium
NUSMods does not need this browser or an NUS login.
One extra setup step for AI assistants
Sometimes an AI assistant needs to look at a Canvas or TalentConnect page that
the regular commands cannot fully read. For those cases, sk4n uses
playwright-cli, a browser tool made for coding agents.
playwright-cli needs Node.js 18 or newer. After
installing Node.js, run:
npm install -g @playwright/cli@latest
playwright-cli install-browser
This is separate from the Chromium setup above: that browser handles your NUS login, while this one lets your AI assistant inspect a signed-in page when needed.
sk4n also comes with a doctor command to help you check if everything is
correctly installed:
sk4n doctor
Use it with an AI assistant
The package includes optional agent skills for Canvas, NUSMods, and TalentConnect. To install them for all supported assistants on your computer:
sk4n skills install --agents all --scope user
sk4n skills status --agents all --scope all
You can choose one assistant instead, for example --agents codex. Installing
a skill helps the assistant call the CLI consistently, but it does not make AI
answers automatically correct. Check important dates, requirements, course
information, and job details against the original platform.
CLI examples
Find courses with NUSMods
nusmods search "machine learning"
nusmods course CS1010
You can also import an existing timetable share link:
nusmods schedule import 'https://nusmods.com/timetable/sem-1/share?...'
Check Canvas
The first login opens a browser window for NUS SSO:
canvas auth login
canvas list
canvas todo
canvas upcoming
Once a course has been synced, you can inspect its saved content:
canvas course CS1010 assignments list
canvas course CS1010 announcements list
Search TalentConnect
talent-connect auth login
talent-connect fetch --query engineer --max-jobs 20
talent-connect fetch --saved
For a public search that does not open the NUS login:
talent-connect fetch --no-login --query engineer --max-jobs 20
Check the NUS academic week
sk4n calendar
sk4n calendar --date 2026-08-14
This uses public NUSMods calendar data and does not need an NUS login.
Where is my data?
Run this to see the exact folders used on your computer:
sk4n paths
Canvas and TalentConnect save browser session information so you do not need to sign in for every command. Treat those session files like login credentials: do not share or upload them.
To forget a saved login without signing your other browsers out of NUS SSO:
canvas auth logout
talent-connect auth logout
If the command is not found
First, close and reopen your terminal after installing. If the command is still
missing, Python's Scripts folder may not be on your PATH.
Contribute
This section is for contributors working from a repository clone. Ordinary users do not need any of these tools.
uv workflow
This repo uses uv to manage venv. see uv install
uv sync
uv run pytest -q
uv run ruff --config pyproject.toml check .
uv run pyright
uv run python scripts/generate_skill_references.py --check
uv run pip-audit --strict --progress-spinner off .
Optional just shortcuts
If just is installed, these
shortcuts are available:
just format
just check # same as test + lint + check references
just build
Neither just nor uv is needed by people who install sk4n from PyPI.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sk4n-0.1.0.tar.gz.
File metadata
- Download URL: sk4n-0.1.0.tar.gz
- Upload date:
- Size: 225.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31be4e0cc07cb94e0e43284a6bc4eb2e6cec002cc524d061630bfe3dad705e3b
|
|
| MD5 |
7b0958339815f51e96f338be0a0c7ba8
|
|
| BLAKE2b-256 |
b8db5047c4cdbdc8a5b024235ba959548109d1b9ed4fb8a0aab66c7361ebabdc
|
Provenance
The following attestation bundles were made for sk4n-0.1.0.tar.gz:
Publisher:
release.yml on hykzr/sk4n
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sk4n-0.1.0.tar.gz -
Subject digest:
31be4e0cc07cb94e0e43284a6bc4eb2e6cec002cc524d061630bfe3dad705e3b - Sigstore transparency entry: 2729970996
- Sigstore integration time:
-
Permalink:
hykzr/sk4n@ecded0cac774ce741085e8f9c3de3fd31a861726 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/hykzr
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ecded0cac774ce741085e8f9c3de3fd31a861726 -
Trigger Event:
release
-
Statement type:
File details
Details for the file sk4n-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sk4n-0.1.0-py3-none-any.whl
- Upload date:
- Size: 169.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
365947b5f7aa9cecb5f93c38d8c2bbc80463895dcc448d491ee69ba08e2a28e9
|
|
| MD5 |
bcf0b19feac7a9a4da5b7c45c5e9fba1
|
|
| BLAKE2b-256 |
8a0602e7643f8f9dcb8c9c65eb4ec34e33ae394196128401f517eb4c90063648
|
Provenance
The following attestation bundles were made for sk4n-0.1.0-py3-none-any.whl:
Publisher:
release.yml on hykzr/sk4n
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sk4n-0.1.0-py3-none-any.whl -
Subject digest:
365947b5f7aa9cecb5f93c38d8c2bbc80463895dcc448d491ee69ba08e2a28e9 - Sigstore transparency entry: 2729972241
- Sigstore integration time:
-
Permalink:
hykzr/sk4n@ecded0cac774ce741085e8f9c3de3fd31a861726 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/hykzr
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ecded0cac774ce741085e8f9c3de3fd31a861726 -
Trigger Event:
release
-
Statement type: